MySQL 基本知识
大约 2 分钟
1. 基本概念
1.1 术语
- 数据库(database)
- 数据表(table)
- 模式(schema): mysql中和database一样
- 列(column)
- 行(row)
- 主键(primary key)
1.2 语言
- 数据定义语言(DDL): CREATE、ALTER、DROP
- 数据操纵语言(DML): INSERT、UPDATE、DELETE、SELECT
- 事务控制语言(TCL): COMMIT、ROLLBACK
- 数据控制语言(DCL): GRANT、REVOKE, 用于控制权限
1.3 数据类型
- 整型:
TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
分别使用 8, 16, 24, 32, 64 位存储空间 - 浮点数:
- 32位
FLOAT
和 64位DOUBLE
为浮点类型,CPU 原生支持浮点运算 DECIMAL
为高精度小数类型。CPU 原生支持 DECIMAl运算,因此 DECIMAL 的计算比浮点类型需要更高的代价
- 32位
- 字符串
CHAR
是定长的,不会保留字符串末尾的空格VARCHAR
是变长的,会保留字符串末尾的空格
- 时间和日期
DATETIME
能够保存从 1001 年到 9999 年的日期和时间,精度为秒,使用 8 字节的存储空间,和时区无关TIMESTAMP
和 UNIX 时间戳相同,保存从 1970 年 1 月 1 日午夜(格林威治时间)以来的秒数,使用 4 个字节,只能表示从 1970 年 到 2038 年,和时区有关
- 大规模数据存储:MySQL把每个BLOB和TEXT值当做一个独立的对象。当BLOB和TEXT值太大时,InnoDB会使用专门的“外部”存储区域来进行存储,此时每个值在行内需要1~4个字节存储一个指针,然后在外部存储区域存储实际的值
BLOB
存储二进制TEXT
存储字符
1.4 常见操作
# 删除
# id = 1, 非事务, 非触发器, 但会保留结构
TRUNCATE TABLE user;
# id = auto, 事务, 触发器
DELETE FROM user;
# 完全清除, 非事务, 非触发器
DROP TABLE user;
# 查找
# 去重3
SELECT DISTINCT name FROM user;
# 限制(3-5行)
SELECT * FROM user LIMIT 2, 3;
SELECT * FROM user LIMIT 3 OFFSET 2;
# 排序, 先排前再排后
SELECT * FROM user
ORDER BY age DESC, name ASC;
# 分组
SELECT category, COUNT(*)
FROM domain.domain
GROUP BY category
HAVING COUNT(*) > 1000;