Mysql 基础(二)
Mysql 基础(二)
DML
Data Manipulation Language (数据操作语言),用于对数据库中的数据进行增删改操作。
添加数据 (INSERT)
给指定字段添加数据
1
INSERT INTO 表名 (字段1, 字段2,..., 字段n) VALUES(值1, 值2, ..., 值n);
值的顺序需与字段顺序对应
给全部字段添加数据
1
INSERT INTO 表名 VALUES(值1, 值2, ..., 值n);
值的顺序需与表中各字段顺序对应
批量添加数据
1
INSERT INTO 表名 (字段1, 字段2,..., 字段n) VALUES(值1, 值2, ..., 值n),(值1, 值2, ..., 值n),(值1, 值2, ..., 值n);
1
INSERT INTO 表名 VALUES(值1, 值2, ..., 值n),(值1, 值2, ..., 值n),(值1, 值2, ..., 值n);
修改数据 (UPDATE)
1 |
|
如果没有添加条件语句默认修改整张表的该字段
删除数据 (DELETE)
1 |
|
如果没有添加条件语句默认删除整张表的数据
DQL
Data Query Language (数据库查询语言),用来查询表中的记录
语法
1 |
|
基础查询
查询指定字段
1
SELECT 字段1, 字段2, 字段3 FROM 表名;
查询所有字段
1
SELECT * FROM 表名;
开发中尽量使用字段列表代替
*
,因为*
不直观且效率低设置别名
1
SELECT 字段1 [AS 别名1], 字段2 [AS 别名2], 字段3 [AS 别名3] FROM 表名;
AS 可省略
去除重复记录
1
SELECT DISTINCT 字段列表 FROM 表名;
条件查询
语法
1
SELECT 字段列表 FROM 表名 WHERE 条件列表;
条件
比较运算符 功能 > 大于 >= 大于或等于 < 小于 = 等于 <> 或 != 不等于 BETWEEN … AND … 在某个范围内(包括最大值和最小值) IN(…) 在列表中,多选一 LIKE 模糊匹配(_匹配多个字符,%匹配任意字符) IS NULL 是 NULL 逻辑运算符 功能 AND 或 && 并且(多个条件同时成立) OR 或 || 或(多个条件中任意一个或多个成立) NOT 或 ! 非,不是
聚合函数
将一列数据作为一个整体,进行纵向计算
语法
1
SELECT 聚合函数(字段) FROM 表名;
常见聚合函数
函数 功能 count 统计数量 min 最小值 max 最大值 sum 求和 avg 平均值
分组查询
语法
1
SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
WHERE 与 HAVING 的区别
- 执行时机不同:WHERE 在分组前进行过滤,不满足 WHERE 条件,不参与分组;HAVING 在分组后对结果进行过滤
- 判断条件不同:WHERE 不能对聚合函数进行判断,而 HAVING 可以
分组后查询字段一般为分组字段和聚合函数,查询其它字段无任何意义
排序查询
语法
1
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2...;
若为多字段排序,则优先按前面的字段排序,前面字段相同时按照后面字段排序
排序方式
- ASC:升序(默认值)
- DESC: 降序
分页查询
语法
1
SELECT 字段列表 FEOM 表名 LIMIT 起始索引, 查询记录数;
- 起始索引从0开始,起始索引 = (查询页面-1) * 每页记录数
- 分页查询是数据库的方言,不同的数据库有不同的实现,Mysql 中使用 LIMIT
- 如果查询第一页数据,起始索引可以省略,直接简写为
LIMIT 查询记录数
DQL 执行顺序
FROM –> WHERE –> GROUP BY –> SELECT –> ORDER BY –> LIMIT
DCL
Data Control Language ( 数据控制语言 ) ,用来管理数据库用户,控制数据库访问权限
用户管理
查询用户
1
2USE mysql;
SELECT * FROM user;创建用户
1
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
修改用户密码
1
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
删除用户
1
DROP USER '用户名'@'主机名';
主机名为
localhost
的用户只能在本机访问主机名为
%
的用户可在任意主机上访问数据库
权限控制
权限 | 说明 |
---|---|
ALL , ALL PRIVILEGES | 所有权限 |
SELECT | 查询数据 |
INSERT | 插入数据 |
UPDATE | 修改数据 |
DELETE | 删除数据 |
ALTER | 修改表 |
DROP | 删除数据库/表/视图 |
CREATE | 创建数据库/表 |
查询权限
1
SHOW GRANTS FOR '用户名'@'主机名';
授权
1
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
撤销权限
1
REVOKE 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
数据库名.* 表示该数据库的所有表 , . 表示所有数据库的所有表
函数
- 函数是指一段可以直接被另一段程序调用的代码
字符串函数
函数 | 功能 |
---|---|
CONCAT(S1,S2,…Sn) | 字符串拼接,将S1,S2,…Sn 拼接成一个字符串 |
LOWER(str) | 将字符串 str 全部转为小写 |
UPPER(str) | 将字符串 str 全部转为大写 |
LPAD(str,n,pad) | 左填充,用字符串 pad 对 str 的左边进行填充,达到 n 个字符长度 |
RPAD(str,n,pad) | 右填充,用字符串 pad 对 str 的右边进行填充,达到 n 个字符长度 |
TRIM(str) | 去掉字符串首尾的空白符 |
SUBSTRING(str,start,len) | 返回字符串 str 从 start 位置起的 len 个长度的字符串, start 从1开始 |
示例
1 |
|
数值函数
函数 | 功能 |
---|---|
CEIL(x) | 向上取整 |
FLOOR(x) | 向下取整 |
MOD(x,y) | 返回 x mod y |
RAND() | 返回 0-1 的随机数 |
ROUND(x,y) | 对 x 四舍五入,保留 y 位小数 |
日期函数
函数 | 功能 |
---|---|
CURDATE() | 返回当前日期. YYYY-MM-DD |
CURTIME() | 返回当前时间 HH:mm:ss |
NOW() | 返回当前日期时间 YYYY-MM-DD HH:mm:ss |
YEAR(date) | 获取指定 date 的年份 YYYY |
MONTH(date) | 获取指定 date 的月份 MM |
DAY(date) | 获取指定 date 的日期 DD |
DATE_ADD(date, INTERVAL expr type) | 返回一个日期/时间值加上一个时间间隔 expr 后的时间值 |
DAFEDIFF(date1, date2) | 返回起始时间 date1 和结束时间 date2 之间的天数 |
1 |
|
流程函数
函数 | 功能 |
---|---|
IF(value, t, f) | 当 value 为 true 时返回 true, 否则返回 false |
IFNULL(value1, value2) | 若 value1 不为空,返回 value1, 否则返回 value2 |
CASE WHEN [val1] THEN [res1] … ELSE [default] END | 若 val1 为 true, 返回 val1, 否则返回 default |
CASE [expr] WHEN [val1] THEN [res1] … ELSE [default] END | 若表达式 expr 的值等于 val1,返回 res1,否则返回 default |
IF 可嵌套
CASE 中可以包含多个 WHEN THEN
1 |
|
Mysql 基础(二)
http://mrzzzz1.github.io/2023/03/22/mysql2/