一、数据类型
类型 | 大小(Bytes) | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT | 4 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 | (-3.40 E+38,-1.17 E-38),0,(1.17 E-38,3.40 E+38) | 0,(1.17 E-38,3.40E+38) | 单精度 浮点数值 |
DOUBLE | 8 | (-1.79 E+308,-2.22 E-308),0,(2.22 E-308,1.79 E+308) | 0,(2.22 E-308,1.79 E+308) | 双精度 浮点数值 |
DECIMAL (M,D) | 如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
类型 | 大小(Bytes) | 范围 | 格式 | 用途 |
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' | YYYY-MM-DD hh:mm:ss | 混合日期和时间值 |
TIMESTAMP | 4 | '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC | YYYY-MM-DD hh:mm:ss | 时间戳 |
类型 | 大小 | 用途 | ||
CHAR | 0-255 bytes | 定长字符串 | ||
VARCHAR | 0-65535 bytes | 变长字符串 | ||
TEXT | 0-65 535 bytes | 长文本数据 |
二、创建、删除数据库
CREATE DATABASE [IF NOT EXISTS] database_name
[CHARACTER SET charset_name]
[COLLATE collation_name];
- CHARACTER SET 字符集
- COLLATE 排序规则
DROP DATABASE [IF EXISTS] <database_name>;
三、创建、删除数据表
CREATE TABLE [IF NOT EXISTS] <表名>
( <列名> <数据类型>[ <列级完整性约束> ]
[,<列名> <数据类型>[ <列级完整性约束>] ] …
[,<表级完整性约束> ] ) ;
完整性约束包括 PRIMARY KEY、 REFERENCES表名(列名)/FOREIGN KEY REFERENCES 表名(列名)、UNIQUE、NOT NULL等。
DROP TABLE IF EXISTS table_name;
四、数据增删
#增
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
#删
DELETE FROM table_name
WHERE condition;
五、数据修改
1. UPDATE
#更新
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
2. ALTER
#添加新列
ALTER TABLE table_name
ADD COLUMN new_column_name datatype;
#修改字段名
ALTER TABLE table_name
CHANGE COLUMN old_column_name new_column_name datatype;
#删除列
ALTER TABLE table_name
DROP COLUMN column_name;
五、数据查询
#查
SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[ORDER BY column_name [ASC | DESC]]
[LIMIT number];
ORDER BY column_name [ASC | DESC]
是一个可选的子句,用于指定结果集的排序顺序,默认是升序(ASC)LIMIT number
是一个可选的子句,用于限制返回的行数
1. 分组查询(GROUP BY)
SELECT column1, aggregate_function(column2)
FROM table_name
WHERE condition
GROUP BY column1;
2. 排列顺序(ORDER BY)
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;
3. 模糊搜索(LIKE)
SELECT column1, column2, ...
FROM table_name
WHERE column_name LIKE pattern;
- 百分号%字符表示零个或多个字符
- 下划线_表示一个字符
4. 运算符
符号 | 描述 | 备注 |
---|---|---|
BETWEEN | 在两值之间 | >=min&&<=max |
NOT BETWEEN | 不在两值之间 | |
IN | 在集合中 | |
NOT IN | 不在集合中 | |
<=> | 严格比较两个NULL值是否相等 | 两个操作码均为NULL时,其所得值为1;而当一个操作码为NULL时,其所得值为0 |
IS NULL | 为空 | |
IS NOT NULL | 不为空 |
六、连接
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接):获取右表所有记录,即使左表没有对应匹配的记录。