这里讲的是SQL的通用语法,DML、DDL、DQL、DCL等语法
通用语法
- 以分号结尾,可以单行或多行写
- 语句不区分大小写,但关键字规范是大写
- 单行注释:
--或#;多行注释:/**/
DDL
DDL为数据定义语言,涉及定义操作:
数据库操作
- 查询所有数据库:
SHOW DATABASES; - 查询当前数据库:
SELECT DATABASE(); - 创建数据库:
CREATE DATABASE [IF NOT EXIST] 数据库名 [DEFAULT CARSET 字符集] [COLLATE 排序规则];- 若创建已有的数据库,且不添加
IF NOT EXIST,会报错 - 可以自选字符集,建议使用支持四字节长的
utf8mb4
- 若创建已有的数据库,且不添加
- 删除数据库:
DROP DATABASE [IF EXISTS] 数据库名;- 若删除没有的数据库,且不添加
IF EXISTS,会报错
- 若删除没有的数据库,且不添加
- 使用数据库:
USE 数据库名;
数据类型
数值类型
- 指定有无符号在类型后添加SIGNED/UNSIGNED
- FLOAT与DOUBLE后面要用括号定义总位数与精度,如
DOUBLE(4,1) - 这里的精度指的是某实数有效数字位数,标度为小数位数
字符串类型
- CHAR与VARCHAR后面要用括号定义字符最大长度
- VARCHAR占用大小是数据实际长度,CHAR是定长,多出来的用空格填充
- VARCHAR性能较差
日期时间类型
表操作
查询:
- 查询当前数据库所有表:
SHOW TABLES;- 需要使用USE先进入该数据库
- 查询表结构:
DESC 表名; - 查询指定表的建表语句:
SHOW CREATE TABLE 表名;
创建:
创建表:
1
2
3
4
5
6
7CREATE TABLE 表名( 字段1 字段1类型 [COMMENT 字段1注释], 字段2 字段2类型 [COMMENT 字段2注释], 字段3 字段3类型 [COMMENT 字段3注释], ... 字段n 字段n类型 [COMMENT 字段n注释] ) [ENGINE=存储引擎] [DEFAULT CHARSET=字符集] [COLLATE=排序规则] [COMMENT 表注释];
修改:
添加字段:
ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];修改数据类型:
ALTER TABLE 表名 MODIFY 字段名 新类型(长度);修改字段名和类型:
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];删除字段:
ALTER TABLE 表名 DROP 字段名;修改表名:
ALTER TABLE 表名 RENAME TO 新表名;
删除:
- 删除表:
DROP TABLE [IF EXISTS] 表名; - 删除指定表并重新创建:
TRUNCATE TABLE 表名;
DML
DML是数据操作语言,对表中的记录进行增删改操作
添加数据
- 指定字段添加数据:
INSERT INTO 表名(字段1,...) VALUES(值1,...); - 全部字段添加数据:
INSERT INTO 表名 VALUES(值1,...); - 批量添加数据:
INSERT INTO 表名(字段1,...) VALUES(值1,...), (值1,...), (值1,...)...;INSERT INTO 表名 VALUES(值1,...), (值1,...), (值1,...)...;
注意:
- 插入数据时字段顺序与之顺序一一对应
- 字符串和日期数据要在引号中
修改数据
UPDATE 表名 SET 字段名1=值1, 字段名2=值2,... [WHERE 条件];
如果没有条件,则会修改整张表的所有数据
删除数据
DELETE FROM 表名 [WHERE 条件];
- 如果没有条件,则会删除整张表的所有数据
- DELETE语句不能删除某一个字段的值,可以用UPDATE
DQL
DQL是数据查询语言,用来查询数据
语法
1
2
3
4
5
6
7
SELECT 字段列表
FROM 表名列表
WHERE 条件列表
GROUP BY 分组字段列表
HAVING 分组后条件列表
ORDER BY 排序字段列表
LIMIT 分页参数;基本查询
查询多个字段:
SELECT 字段1, 字段2,... FROM 表名;
SELECT * FROM 表名;设置别名:
SELECT 字段1 [AS 别名], 字段2 [AS 别名],... FROM 表名;- AS可以省略
去除重复记录:
SELECT DISTINCT 字段列表 FROM 表名;
条件查询
语法:SELECT 字段列表 FROM 表名 WHERE 条件列表
条件:
IN列表内的值只需要满足一个即可
LIKE举例:查询最后一位是X的信息:
SELECT * FROM table WHERE id LIKE '%X';
聚合函数
将某一列作为一个整体,纵向计算
常见聚合函数:
语法:SELECT 聚合函数(字段列表) FROM 表名;
注意:NULL值不参与聚合函数运算
分组查询
语法:SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件];
例:查询男性和女性的数量:SELECT gender, COUNT(*) FROM table GROUP BY gender
注意:
- WHERE用于分组前过滤,不满足WHERE条件的不参与分组;HAVING用于分组后对结果过滤;WHERE不能对聚合函数判断,而HAVING可以
- 执行顺序:WHERE>聚合>HAVING
- 分组后查询字段一般为聚合函数和分组字段
排序查询
语法:SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2,...;
排序方式:
- ASC:升序(默认)
- DESC:降序
首先按照第一个,然后第二个,以此类推
分页查询
语法:SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
- 起始索引从0开始,计算方式:\((查询页码-1)\times 每页显示记录数\)
- 分页查询是数据库的方言,不同数据库有不同实现
- 若查询第一页数据,起始索引可以省略,简写为LIMIT 10
- LIMIT要放在所有查询最后
执行顺序
编写顺序:SELECT->FROM->WHERE->GROUP BY-> HAVING->ORDER BY->LIMIT
执行顺序:FROM->WHERE->GROUP BY->HAVING ->SELECT->ORDER BY->LIMIT
DCL
DCL是数据控制语言,管理数据库用户和访问权限
用户管理
查询用户:用户信息存放在系统数据库mysql中
1
2USE mysql; SELECT * FROM user;创建用户:
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';- 任意主机只需要将主机名改为
%
- 任意主机只需要将主机名改为
修改密码:
ALTER USER '用户名'@'主机名' IDENTIFIED WITH 密码处理方式(一般mysql_native_password) BY '新密码';删除用户:
DROP USER '用户名'@'主机名';
权限控制
- 常用权限:
查询权限:
SHOW GRANTS FOR '用户名'@'主机名';授予权限:
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';撤销取消:
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';可以用
*来指定所有