数据类型

整型

类型

范围

备注

bit

1~64B

bit(2)表示2个二进制位,取值范围为0~3

tinyint

1B

标记 UNSIGNED 时,取值范围为0~255。当标记 ZEROFILL 且同时标记了 UNSIGNED,当位数不足 M 时,添加前导 0。例如 tinyint(5),当值为 123时,会添加两个前导0,即00123

smallint

2B

同上

mediumint

3B

同上

int

4B

同上

integer

4B

与 int 完全相同

bigint

8B

同上

浮点数

类型

范围

备注

float

正负3.4E38

float(5,2)表示长度为5,其中2位小数。与Java中float精度相同

double

正负1.79E308

同上

numeric

小数点前后有效位数之和不大于65位

使用与float、double相同,但存储方式不同,把9位十进制压缩成4个字节来存储。相当于把浮点数当成字符来保存,但进行了压缩,比float、double更安全可靠,不会出现精度缺失的问题

decimal

65位

在MySQL中,decimal与numeric完全相同,二者在表示钱时,很有用

字符串

类型

范围

备注

注意

char

255B

固定长度字符串类型。char(4),当数据长度为2时,会在后边添加2个空格补位

长度固定,所以存取效率比 varchar 快,但会占据多余空间,是以空间换时间

varchar

65535B

可变长度字符串。varchar(4),当数据长度为2时,不会添加空格补位。占3个字节,其中一个字节用来记录长度,当数据长度大于255时,记录长度就需要2个字节了

相比 char 存取速度慢,因其长度可变,所以不会浪费多余的空间,是以时间换空间

tinytext

2^8~1B

可变长度字符串

text

2^16~1B

同上

用于存储较大字符串,有一个字符集,并且会根据字符集的校对规则对值进行排序和比较

mediumtext

2^24~1B

同上

longtext

2^32~1B

同上

布尔类型

类型

范围

备注

bool

布尔值,但实际上是用tinyint(1)表示的。当值为0时表示假,当值为非0时表示真。-128也是真

boolean

与bool完全相同

日期类型

类型

范围

备注

date

yyyy-mm-dd

datetime

yyyy-mm-dd hh:mm:ss

timestamp

时间戳,用在记录插入与更新自动记录时间

year

year(2),表示两位的年

time

只表示时间

二进制

类型

范围

备注

注意

binary

255B

固定长度二进制类型。binary(10),当数据为5B时,会添加5B来补位,即长度为10B

varbinary

255B

可变长度二进制类型。varbinary(10),当数据为5B时,不会补位,长度为6B,其中1B用来记录长度

tinyblob

2^8~1B(256B)

可变长度二进制类型

blob

2^16~1B(64K)

同上

存储二进制数据,没有字符集

mediumblob

2^24~1B(16M)

同上

SQL 语句格式

用户

功能

格式

备注

创建

CREATE USER { 用户名@IP地址 | 用户名@‘%’ } IDENTIFIED BY 密码;

用户名@IP地址:用户只能在指定的IP地址上登录;

用户名@‘%’:用户可以在任意IP地址上登录。

删除

DROP USER ‘用户名@IP地址’;

修改用户

RENAME USER ‘用户名@IP地址’ TO ‘新用户名@IP地址’;

修改密码

SET PASSWORD [‘用户名@IP地址’] = PASSWORD(新密码);

权限

功能

格式

备注

查看用户权限

SHOW GRANTS FOR ‘用户名@IP地址’;

授权

GRANT ALL PRIVILEGES ON 数据库.* TO 用户名@IP地址;

GRANT { CREATE | ALTER | DROP | INSERT | UPDATE | DELETE | SELECT } ON 数据库名.* TO 用户名@IP地址;

取消授权

REVOKE 权限 ON 库名.表名 FORM 用户名@IP地址;

数据库

功能

格式

备注

连接数据库

mysql -uroot -p

断开连接

quit 或 exit

创建

CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARSET SET utf8];

数据库中数据编码采用的是安装时指定的默认编码 utf8

删除

DROP DATABASE [IF EXISTS] 数据库名;

查看全部

SHOW DATABASES;

切换数据库

USE 数据库名;

查看定义信息

SHOW CREATE DATABASE 库名;

查看所有的编码

SHOW VARIABLES LIKE ‘char%’;

修改编码

ALTER DATABASE 数据库名 CHARACTER SET utf8;

查看正在使用的数据库

SELECT DATABASE();

功能

格式

备注

创建

CREATE TABLE [IF NOT EXISTS] 表名(

`列名` 数据类型 [列属性] [列索引] [列注释] , …,

PRIMARY KEY (`列名`),

KEY `外键名` (`作为外键的列`),

CONSTRAINT `外键名` FOREIGN KEY (`作为外键的列`) REFERENCES `目标表` (`目标列`)

)ENGINE = INNODB DEFAULT CHARSET = utf8;

删除

DROP TABLE [IF EXISTS] 表名;

修改表名

ALTER TABLE 旧表名 RENAME { AS | TO } 新表名;

查看所有表

SHOW TABLES;

查看创表代码

SHOW CREATE TABLE 表名;

查看表结构(列名及属性等)

DESC 表名;

修改表的字符集

ALTER TABLE 表名 CHARACTER SET 字符集;

表字段

功能

格式

备注

添加

ALTER TABLE 表名 ADD 列名 数据类型 [列属性];

删除

ALTER TABLE 表名 DROP 列名;

修改列的类型及约束

ALTER TABLE 表名 MODIFY 列名 数据类型 [列属性];

MODIFY 关键字不能用来列名的重命名,只能修改列的类型和约束

修改列名

ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [列属性];

CHANGE 关键字用来列名的重命名,不能修改列的类型和约束;

修改默认值

ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;

删除默认值

ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;

表主键

功能

格式

备注

添加

ALTER TABLE 表名 ADD PRIMARY KEY(列名);

删除

ALTER TABLE 表名 DROP PRIMARY KEY;

表外键

功能

格式

备注

添加

ALTER TABLE 表名 ADD CONSTRAINT `外键名` FOREIGN KEY (`作为外键的列`) REFERENCES `目标表` (`目标列`);

删除

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

表数据

功能

格式

备注

注意

添加

INSERT INTO `表名` [(列名,…)] values (值,…)[,(值,…)];

删除

DELETE FROM `表名` [WHERE 条件];

DELETE 删除数据,如果是 Innodb,自增会从0开始(存在内存中,断电即失);如果是Myisam,则继续从上一个子增量开始(存在文件中,不会丢失);

一条条删除,不清空 auto_increment 记录数

删除

TRUNCATE TABLE `表名`;

TRUNCATE 删除数据,不会改变表结构和索引约束,自增清零

将表删除,重新建表,auto_increment 将置为0

更新

UPDATE `表名` SET `列名` = 值[,…] [WHERE 条件];

查看

SELECT [ALL | DISTINCT] {* | table.* | [table.列名 [as 别名][,…]]} FROM `表名` [as 别名] [left | right | inner join `表名`] [WHERE 条件] [GROUP BY 分组列[,…]] [HAVING 过滤条件] [ORDER BY 排序列[,…]] [LIMIT {[offset,]页码 | 条目数 offset}]

事务

功能

格式

备注

开启/关闭

SET autocommit = {0 | 1};

0 关闭自动提交;1 开启自动提交(默认)

开始

START TRANSACTION;

提交

COMMIT;

回滚

ROLLBACK;

事务保存点

功能

格式

备注

新增

SAVEPOINT 保存点名;

回滚到某个保存点

ROLLBACK TO SAVEPOINT 保存名;

删除

RELEASE SAVEPOINT 保存点;

索引

功能

格式

备注

新增

CREATE {INDEX | UNIQUE INDEX | FULLTEXT INDEX} 索引名 ON `表名` (`列名`);

不能用来创建主键索引,必须用 ALTER TABLE 来代替创建

新增

ALTER TABLE `表名` ADD {PRIMARY KEY | INDEX | UNIQUE | FULLTEXT} 索引名 (`列名`);

删除

DROP INDEX 索引名 ON `表名`;

删除

ALTER TABLE `表名` DROP INDEX 索引名;

运算符

比较运算符

运算符

描述

注意

> < <= >= = <>

大于、小于、小于等于、大于等于、等于、不等于

BETWEEN … AND …

在某一区间中

含头含尾

IN

在 in 列表中的值

LIKE 通配符

模糊查询

% 用来匹配多个字符

_ 用来匹配一个字符

IS NULL

判断为空

IS NOT NULL

判断不为空

逻辑运算符

运算符

描述

and

多个条件同时成立

or

多个条件任意一个成立

not

取反

视图(view)

  • 视图是一个虚拟表,其内容有查询定义。其与真实表一致,包含列和行数据;
  • 它并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成;
  • 定义视图的筛选可以来自当前或其他数据库的表或视图。

创建视图

-- 格式:CREATE VIEW 视图名 AS SQL语句
CREATE VIEW getAreaDayInfo AS 
	SELECT * FROM area_day_info WHERE pollutantCode IN('6','7');

删除视图

-- 格式:DROP VIEW 视图名称
DROP VIEW getAreaDayInfo;

修改视图

-- 格式:ALTER VIEW 视图名称 AS SQL 语句
ALTER VIEW getAreaDayInfo AS
	SELECT * FROM area_day_info WHERE pollutantCode IN('6','7','8');

使用试图

-- 格式:SELECT * FROM 视图名称
SELECT * FROM getAreaDayInfo

函数(function)

在MySQL中有很多内置函数,比如SUM()、MAX()等,函数可以传参数,也可以接受返回值,但是函数没办法得到执行语句得到的结果。

创建函数

DELIMITER \\
CREATE FUNCTION functionName(
	i1 int,
	i2 int)
RETURNS int
READS SQL DATA
## 由于开启了二进制文件,就必须指定函数状态
## 函数状态有三种:DETERMINISTIC(不确定的)、NO SQL(没有SQL语句,不会修改数据)、READS SQL DATA(只读,不修改数据) 
BEGIN
	DECLARE num int;
	SET num = i1 + i2;
	RETURN(num);
END \\
DELIMITER ;

删除函数

-- 格式:DROP FUNCTION functionName;
DROP FUNCTION functionName;

执行函数

-- 获取返回值
DECLARE @i VARCHAR(32);
SELECT UPPER('alex') into @i;
SELECT @i;

-- 在查询中使用
SELECT f1(1,2);

触发器(trigger)

当你在执行这条语句之前或者之后触发一次增删改查,触发器用于定制用户对表的行进行【增/删/改】前后的操作。

创建触发器

-- 格式:CREATE TRIGGER 触发器名 <before|after> <insert|update|delete> ON <表名> FOR EACH ROW BEGIN ... END;
-- 实例:插入后操作
DELIMITER //
CREATE TRIGGER triggerName AFTER INSERT ON user FOR EACH ROW 
BEGIN
	IF NEW.NAME == 'xkf' THEN
		INSERT INTO user_info(NAME) VALUES('xxx')
	END
END //
DELIMITER ;

删除触发器

-- 格式:DROP TRIGGER triggerName;
DROP TRIGGER triggerName;

使用触发器

-- 格式:增删改的操作可以用来触发触发器
INSERT INTO user(name) VALUES('XXX');

存储过程(procedure)

创建存储过程

DELIMITER // -- 自定义sql语句结尾符号
CREATE PROCEDURE procedureName()
BEGIN
	SELECT * FROM user;
END //
DELIMITER ; -- 自定义sql语句结尾符号

带参的存储过程

  • in 仅用于入参
  • out 仅用于返回值
  • inout 既可以用于入参又可以当作返回值
DELIMITER \\
CREATE PROCEDURE procedureName(
	in i1 int,		-- 入参
	inout i3 int,	-- 即入参又能用于出参
	out r1 int		-- 出参
)
BEGIN
	DECLARE temp1 int; -- 声明变量
	SET temp1 = 1;
	SET i3 = temp1 + 100;
	SET r1 = temp1;
END \\
DELIMITER ;

-- 执行存储过程
DECLARE @t1 INT DEFAULT 3;  -- 设置变量默认值为3
DECLARE @t2 INT;
CALL procedureName(1,@t1,@t2);
SELECT @t1,@t2;

执行存储过程

-- 格式:call 存储过程名();
CALL procedureName();

删除存储过程

-- 格式:DROP PROCEDURE 存储过程名;
DROP PROCEDURE procedureName;