MySQL基本使用备忘录(for mac)

数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。

MySQL是开源免费的数据库,现已经被Oracle收购了,从MySQL6.x版本也开始收费。下载地址:https://dev.mysql.com/downloads/mysql/

Sequel Pro 是Mac用户常用的MySQL管理软件,经亲自体验非常容易上手。下载地址:http://www.sequelpro.com

1、配置环境变量,在终端命令行输入

ls -all
open .bash_profile 

在.bash_profile 文件的末尾添加下面这行,之后保存文件

export PATH=${PATH}:/usr/local/mysql/bin

2、查看MySQL版本号(在终端命令行输入)

mysql --version

3、使用root账户登录mysql(若出现问题,自行度娘)

mysql -u root -p

需要输入你自己设置的登录密码

exit; // 退出当前操作

4、通过MySQL的命令行检查编码

show variables like '%char%';

编辑MySQL的配置文件,把数据库默认的编码全部改为UTF-8。

cd /usr/local/mysql
open support-files

复制my-default.cnf文件到桌面,并重命名为my.cnf,打开修改如下内容

[client]
default-character-set=utf8

[mysqld]
default-storage-engine=INNODB
character-set-server=utf8
collation-server=utf8_general_ci

将修改后的文件my.cnf复制到/etc目录下,重启mysql
注:如果MySQL的版本≥5.5.3,可以把编码设置为utf8mb4,utf8mb4和utf8完全兼容,但它支持最新的Unicode标准,可以显示emoji字符。(这个我目前没试过,在网上看到的)

SQL分类
1、数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,数据表,列等。关键字:create,alter,drop等
2、数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等
3、数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。
4、数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等

SQL通用语法
1、SQL语句可以单行或多行书写,以分号结尾
2、可使用空格和缩进来增强语句的可读性
3、MySQL数据库的SQL语句不区分大小写,建议使用大写,例如:

SELECT * FROM user。

4、可以使用/**/的方式完成注释

MySQL中的我们常使用的数据类型如下:

整数类型    
tinyInt 很小的整数
smallint    小的整数
mediumint   中等大小的整数
int(integer)    普通大小的整数

小数类型    
float   单精度浮点数
double  双精度浮点数
decimal(m,d)压缩严格的定点数

日期类型    
year    YYYY  1901~2155
time    HH:MM:SS  -838:59:59~838:59:59
date    YYYY-MM-DD 1000-01-01~9999-12-3
datetime    YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59
timestamp YYYY-MM-DD HH:MM:SS  1970~01~01 00:00:01 UTC~2038-01-19 03:14:07UTC

文本、二进制类型    
CHAR(M)         M为0~255之间的整数
VARCHAR(M)      M为0~65535之间的整数
TINYBLOB    允许长度0~255字节
BLOB        允许长度0~65535字节
MEDIUMBLOB  允许长度0~167772150字节
LONGBLOB    允许长度0~4294967295字节
TINYTEXT    允许长度0~255字节
TEXT        允许长度0~65535字节
MEDIUMTEXT  允许长度0~167772150字节
LONGTEXT    允许长度0~4294967295字节
VARBINARY(M)允许长度0~M个字节的变长字节字符串
BINARY(M)   允许长度0~M个字节的定长字节字符串

一、创建数据库操作

1、创建数据库

CREATE DATABASE db_liehuo; // 数据库中数据的编码采用的是安装数据库时指定的默认编码utf8
CREATE DATABASE db_liehuo CHARACTER SET utf8; // 创建数据库并指定数据库中数据的编码

2、查看数据库

 show databases; // 查看数据库MySQL服务器中的所有的数据库
show create database db_liehuo; // 查看某个数据库的定义的信息

3、删除数据库

drop database db_liehuo;

4、切换数据库(我想使用那个就切换到那个)

use db_liehuo;

5、查看正在使用的数据库

select database();

二、创建数据表

1、创建数据表结构

格式:
create table 表名(
     列名1 数据类型 约束,
     列名2 数据类型 约束,
     列名3 数据类型 约束
);
 CREATE TABLE tab_users (
     uid INT PRIMARY KEY AUTO_INCREMENT,
     uname VARCHAR(20),
     passwd VARCHAR(6)
 ) AUTO_INCREMENT = 100000;

注:a、创建用户表,用户编号,姓名,密码
b、将编号列,设置为主键约束,保证列的数据唯一性,非空性PRIMARY KEY
让主键列数据实现自动增长AUTO_INCREMENT,从指定数字开始自增长AUTO_INCREMENT = 100000

2、显示所有数据表

show tables;

3、查看表中结构

desc tab_users;

4、删除数据表

drop table tab_users;

5、添加列(添加字段)

格式:alter table 表名 add 列名 数据类型 约束
ALTER TABLE tab_users ADD phone varchar(11);

修改后可通过下面的sql语句进行查看表结构

desc tab_users;

6、修改列名,在原有的列上修改

格式:alter table 表名 change 旧列名 新列名 数据类型 约束
ALTER TABLE tab_users CHANGE phone tel int;

7、数据类型约束,在原有的列上修改

格式:alter table 表名 modify 列名 数据类型约束
ALTER TABLE tab_users MODIFY tel VARCHAR(50);

8、删除列

格式:alter table 表名 drop 列名
ALTER TABLE tab_users DROP tel;

9、修改表名

格式:rename table 表名 to 新表名 
RENAME TABLE tab_users TO users;

三、向数据表中添加数据

CREATE TABLE product(
   -- 主键列,自动增长
   id INT PRIMARY KEY AUTO_INCREMENT,
   -- 商品名字,可变字符,非空
   pname VARCHAR(100) NOT NULL,
   -- 商品的价格,double
   price DOUBLE
);

1、向数据表中添加数据(新增)

格式:insert into 表名(列名1,列名2,列名3) values (值1,值2,值3)
INSERT INTO product (id,pname,price) VALUES (1,'笔记本',5555.99);
INSERT INTO product (id,pname,price) VALUES (2,'智能手机',9999);

2、不考虑主键(主键自增长的)

INSERT INTO product (pname,price) VALUES('洗衣机',800);

3、所有值全给出

INSERT INTO product VALUES (4,'微波炉',300.25);

4、批量添加数据

格式:insert into 表名 (列名1,列名2,列名3) values (值1,值2,值3),(值1,值2,值3)
INSERT INTO product (pname,price) VALUES 
('智能机器人',25999.22),
('索尼电视',1250.36),
('mix2全面屏手机',3200);

四、修改数据

1、对数据进行更新操作(重新赋值)

格式:update 表名 set 列1=值1,列2=值2 where 条件
update product set price=4999.9 where id = 2;
UPDATE product SET pname='智能电视机', price=10000 WHERE id = 6;

2、修改条件的写法

id=6
id<>6 // 不等于
id<=6

&& --> and
|| --> or 
!  --> not

id in (1,3,4,5,6) // 包含
UPDATE product SET price = 2000 WHERE id = 1 OR id = 7;

3、删除表中的数据

格式:delete from 表名 where 条件
delete from product where id=7;

4、删除整个数据表

删除表中的所有数据,保留表结构

delete from product;

表结构和数据都被删除了

drop table product;

五、查询数据

CREATE TABLE zhangwu (
  id INT PRIMARY KEY AUTO_INCREMENT, -- 账务ID
  zname VARCHAR(200), -- 账务名称
  zmoney DOUBLE -- 金额
);

INSERT  INTO zhangwu(id,zname,zmoney) VALUES (1,'吃饭支出',247);
INSERT  INTO zhangwu(id,zname,zmoney) VALUES (2,'工资收入',12345);
INSERT  INTO zhangwu(id,zname,zmoney) VALUES (3,'服装支出',1000);
INSERT  INTO zhangwu(id,zname,zmoney) VALUES (4,'吃饭支出',325);
INSERT  INTO zhangwu(id,zname,zmoney) VALUES (5,'股票收入',8000);
INSERT  INTO zhangwu(id,zname,zmoney) VALUES (6,'打麻将支出',8000);
INSERT  INTO zhangwu(id,zname,zmoney) VALUES (7,NULL,5000);
INSERT  INTO zhangwu(id,zname,zmoney) VALUES (8,'买bit币',3500);
INSERT  INTO zhangwu (zname) VALUES ('彩票收入');

/**查询所有列的数据*/
select * from zhangwu;

/**查询指定列的数据*/
SELECT zname,zmoney FROM zhangwu;

/*
 查询去掉重复记录
 DISTINCT 关键字 跟随列名
*/
SELECT DISTINCT zname FROM zhangwu;

/*
  查询重新命名列
  as 关键字
*/
SELECT zname AS 'name' FROM zhangwu;

/*
  查询数据中,直接进行数学计算
  对指定列数字进行计算
*/
SELECT zname,zmoney+1000 AS'sum' FROM zhangwu;

-- 查询所有的吃饭支出
SELECT * FROM zhangwu WHERE zname='吃饭支出';

-- 查询金额大于1000
SELECT * FROM zhangwu WHERE zmoney>1000;

-- 查询金额在2000到5000之间 
SELECT * FROM zhangwu WHERE zmoney >= 1000 AND zmoney <= 5000;

-- 改造成between and 方式
SELECT * FROM zhangwu WHERE zmoney BETWEEN 1000 AND 5000;

-- 查询金额是1000、3500、5000
SELECT * FROM zhangwu WHERE zmoney = 1000 OR zmoney=3500 OR zmoney=5000;

-- 改造成in方式
SELECT * FROM zhangwu WHERE zmoney  IN (1000,3500,5000);

-- like 模糊查询 配合通配符
-- 查询所有的支出
SELECT * FROM zhangwu WHERE zname LIKE '%支出%';

-- 查询账务名字,五个字符的
SELECT * FROM zhangwu WHERE zname LIKE'_____';

-- 查询账务名,不为空的
SELECT * FROM zhangwu WHERE zname IS NOT NULL;

SELECT * FROM zhangwu WHERE NOT (zname IS NULL);


/*
   使用聚合函数查询计算
*/

-- count 求和,对表中的数据的个数求和  count(列名)
-- 查询统计账务表中,一共有多少条数据
SELECT COUNT(*)AS'count' FROM zhangwu;

-- sum求和,对一列中数据进行求和计算 sum(列名)
-- 对账务表查询,对所有的金额求和计算
SELECT SUM(zmoney) FROM zhangwu;

-- 求和,统计所有支出的总金额
SELECT SUM(zmoney) FROM zhangwu WHERE zname LIKE'%支出%';

-- 求和,统计所有收入的总金额
SELECT SUM(zmoney) FROM zhangwu WHERE zname LIKE'%收入%';

-- max 函数,对某列数据获取最大值
SELECT MAX(zmoney) FROM zhangwu;

-- avg 函数,计算一个列所有数据的平均数
SELECT AVG(zmoney)FROM zhangwu;


/*
  查询,对结果集进行排序
  升序、降序,对指定列排序
  order by 列名 [desc][asc]
  desc 降序
  asc  升序排列,可以不写
*/
-- 查询账务表,价格进行升序
SELECT * FROM zhangwu ORDER BY zmoney ASC;

-- 查询账务表,价格进行降序
SELECT * FROM zhangwu ORDER BY zmoney DESC;

-- 查询账务表,查询所有的支出,对金额降序排列
-- 先过滤条件where查询的结果再排序
SELECT * FROM zhangwu WHERE zname LIKE'%支出%' ORDER BY zmoney DESC;

-- 查询所有的收入,对金额进行降序排列
select * from zhangwu where zname like'%收入%' order by zmoney desc;

/*
    查询所有的数据
    吃饭支出 共计多少
    工资收入 共计多少
    服装支出 共计多少
    股票收入 共计多少
    打麻将支出 共计多少钱
    
    分组查询:  group by 被分组的列名
    必须跟随聚合函数
    select 查询的时候,被分组的列,要出现在select选择列的后面
*/
SELECT SUM(zmoney) as 'sum',zname FROM zhangwu GROUP BY zname;
  
-- 对zname内容进行分组查询求和,但是只要支出
SELECT SUM(zmoney)AS 'sum',zname FROM zhangwu WHERE zname LIKE'%支出%'
GROUP BY zname
ORDER BY sum DESC;

-- 对zname内容进行分组查询求和,但是只要支出,显示金额大于5000
-- 结果集是分组查询后,再次进行筛选,只能使用关键字 having
SELECT SUM(zmoney)AS 'sum',zname FROM zhangwu WHERE zname LIKE'%支出%'
GROUP BY zname 
HAVING sum>5000;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容