Mysql的使用
文章目录
分类 | 全称 | 说明 |
---|---|---|
DDL | Data Definition Language | 数据定义语言,用来定义数据库对象(数据库,表,字段) |
DML | Data Manipulation Language | 数据操作语言,用来对数据库表中的数据进行增删改 |
DQL | Data Query Language | 数据查询语言,用来查询数据库中表的记录 |
DCL | Data Control Language | 数据控制语言,用来创建数据库用户、控制数据库的访问权限 |
DDL
数据库
操作功能 | 语法语句 | 补充说明 |
---|---|---|
查询所有数据库 | show databases; |
列出 MySQL 服务器中存在的所有数据库 |
查询当前数据库 | select database(); |
返回当前所在的数据库名称,若未选中数据库则返回 NULL |
使用 / 切换数据库 | use 数据库名; |
切换到指定名称的数据库进行后续操作 |
创建数据库(常规) | create database 数据库名; |
直接创建指定名称数据库,若已存在会报错 |
创建数据库(避免报错) | create database if not exists 数据库名; |
若数据库不存在则创建,存在则不执行创建操作,避免报错 |
删除数据库(常规) | drop database 数据库名; |
直接删除指定数据库,若不存在会报错 |
删除数据库(避免报错) | drop database if exists 数据库名; |
若数据库存在则删除,不存在则不执行删除操作,避免报错 |
表
约束类型
约束 | 描述 | 关键字 |
---|---|---|
非空约束 | 限制该字段值不能为null | not null |
唯一约束 | 保证字段的所有数据都是唯一、不重复的 | unique |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | primary key |
默认约束 | 保存数据时,如果未指定该字段值,则采用默认值 | default |
外键约束 | 让两张表的数据建立连接,保证数据的一致性和完整性 | foreign key |
数值类型
类型 | 大小 | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 |
---|---|---|---|---|
TINYINT | 1byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2bytes | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT | 3bytes | (-8388608,8388607) | (0,16777215) | 大整数值 |
INT/INTEGER | 4bytes | (-2147483648,2147483647) | (0,4294967295) | 大整数值 |
BIGINT | 8bytes | (-263,263-1) | (0,2^64-1) | 极大整数值 |
FLOAT | 4bytes | (-3.402823466 E+38,3.402823466351 E+38) | 0 和 (1.175494351 E-38,3.402823466 E+38) | 单精度浮点数值 |
DOUBLE | 8bytes | (-1.7976931348623157 E+308,1.7976931348623157 E+308) | 0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) | 双精度浮点数值 |
DECIMAL | 依赖于M(精度)和D(标度)的值 | 依赖于M(精度)和D(标度)的值 | 小数值(精确定点数) |
字符串类型
类型 | 大小 | 描述 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串(需要指定长度) |
VARCHAR | 0-65535 bytes | 变长字符串(需要指定长度) |
TINYBLOB | 0-255 bytes | 不超过255个字符的二进制数据 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65 535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65 535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16 777 215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295 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 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值,时间戳 |
mysql
-- 建表
create table 表名(
字段1 字段1类型 [约束] [comment 字段1注释 ],
字段2 字段2类型 [约束] [comment 字段2注释 ],
......
字段n 字段n类型 [约束] [comment 字段n注释 ]
) [ comment 表注释 ] ;
-- 查询当前数据库的所有表
show tables;
-- 查看指定的表结构
desc 表名 ; -- 可以查看指定表的字段、字段的类型、是否可以为NULL、是否存在默认值等信息
-- 查询指定表的建表语句
show create table 表名 ;
-- 添加字段
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];
-- 修改字段类型
alter table 表名 modify 字段名 新数据类型(长度);
-- 删除字段
alter table 表名 drop 字段名;
-- 修改表名
rename table 表名 to 新表名;
-- 删除表
drop table [ if exists ] 表名;
DML
操作类型 | 语法示例 | 功能说明 |
---|---|---|
插入数据(全字段) | INSERT INTO tb_user VALUES (1, 'zhangsan', '张三', 20, '男'); |
按表中字段顺序插入一条完整数据,需包含所有字段值(自增字段可省略或填 NULL) |
插入数据(指定字段) | INSERT INTO tb_user (username, name, age) VALUES ('lisi', '李四', 22); |
只插入指定字段的数据,未指定的字段将使用默认值(如 NULL 或定义的 DEFAULT) |
批量插入数据 | INSERT INTO tb_user (username, name) VALUES ('wangwu', '王五'), ('zhaoliu', '赵六'); |
一次插入多条数据,提高操作效率 |
更新数据(全表) | UPDATE tb_user SET age = 21; |
将表中所有记录的 age 字段值改为 21(谨慎使用,可能影响大量数据) |
更新数据(条件) | UPDATE tb_user SET age = 23 WHERE username = 'zhangsan'; |
只更新满足 WHERE 条件的记录(如用户名是 zhangsan 的行) |
更新多字段 | UPDATE tb_user SET age = 24, gender = '女' WHERE id = 3; |
同时更新多个字段的值,用逗号分隔字段赋值表达式 |
删除数据(全表) | DELETE FROM tb_user; |
删除表中所有记录(表结构保留,数据清空,谨慎使用) |
删除数据(条件) | DELETE FROM tb_user WHERE age < 18; |
只删除满足 WHERE 条件的记录(如年龄小于 18 的行) |
DQL
比较运算符:
比较运算符 | 功能 |
---|---|
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
= | 等于 |
<> 或 != | 不等于 |
between ... and ... | 在某个范围之内(含最小、最大值) |
in(...) | 在in之后的列表中的值,多选一 |
like 占位符 | 模糊匹配(_匹配单个字符, %匹配任意个字符) |
is null | 是null |
逻辑运算符
逻辑运算符 | 功能 |
---|---|
and 或 && | 并且 (多个条件同时成立) |
or 或 || | 或者 (多个条件任意一个成立) |
not 或 ! | 非 , 不是 |
聚合函数
函数 | 功能 |
---|---|
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
操作类型 | 语法示例 | 功能说明 |
---|---|---|
基础查询(全字段) | SELECT * FROM tb_user; |
查询表中所有字段的所有记录(* 表示所有字段,不推荐在生产环境使用) |
基础查询(指定字段) | SELECT id, username, age FROM tb_user; |
查询表中指定字段的所有记录,仅返回需要的字段 |
条件查询 | SELECT name, age FROM tb_user WHERE age > 18 AND gender = '男'; |
用 WHERE 子句筛选满足条件的记录,支持 AND 、OR 、NOT 逻辑运算符 |
模糊查询 | SELECT username FROM tb_user WHERE name LIKE '张%'; |
用 LIKE 匹配字符串模式(% 表示任意字符,_ 表示单个字符) |
范围查询 | SELECT * FROM tb_user WHERE age BETWEEN 20 AND 30; |
用 BETWEEN...AND 查询字段值在指定范围内的记录 |
空值查询 | SELECT * FROM tb_user WHERE email IS NULL; |
用 IS NULL 或 IS NOT NULL 查询字段为空或非空的记录 |
排序查询 | SELECT name, age FROM tb_user ORDER BY age DESC, id ASC; |
用 ORDER BY 排序(DESC 降序,ASC 升序,默认升序),支持多字段排序 |
分页查询 | SELECT * FROM tb_user LIMIT 10 OFFSET 0; 或 SELECT * FROM tb_user LIMIT 0, 10; |
用 LIMIT 限制返回记录数(OFFSET 指定起始位置,默认从 0 开始) |
去重查询 | SELECT DISTINCT gender FROM tb_user; |
用 DISTINCT 去除查询结果中重复的记录(针对所有查询字段的组合去重) |
聚合查询 | SELECT COUNT(*) 总人数, AVG(age) 平均年龄 FROM tb_user; |
用聚合函数(COUNT /SUM /AVG /MAX /MIN )对数据进行统计 |
分组查询 | SELECT gender, COUNT(*) 人数 FROM tb_user GROUP BY gender; |
用 GROUP BY 按指定字段分组,结合聚合函数统计每组数据 |
分组筛选 | SELECT gender, AVG(age) 平均年龄 FROM tb_user GROUP BY gender HAVING AVG(age) > 25; |
用 HAVING 对分组后的结果进行筛选(HAVING 可接聚合函数,WHERE 不行) |
多表连接查询(内连接) | SELECT u.name, o.order_no FROM tb_user u INNER JOIN tb_order o ON u.id = o.user_id; |
用 INNER JOIN 查询两表中满足连接条件的匹配记录 |
多表连接查询(左连接) | SELECT u.name, o.order_no FROM tb_user u LEFT JOIN tb_order o ON u.id = o.user_id; |
用 LEFT JOIN 查询左表所有记录,右表无匹配时显示 NULL |
子查询 | SELECT * FROM tb_user WHERE age > (SELECT AVG(age) FROM tb_user); |
嵌套在主查询中的查询,子查询结果作为主查询的条件或数据源 |