-通用语法及分类
SQL通用语法
1.SQL语句可以单行或多行书写,以分号结尾。
2.SQL语句可以使用空格/缩进来增强语句的可读性。
3.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
4.注释:
单行注释:–注释内容或#注释内容(MySQL特有)
·多行注释:/注释内容/
DDL-数据库操作
查询
- 查询所有数据库
SHOW DATABASES; - 查询当前数据库
SELECT DATABASE(); - 创建
CREATE DATABASE 「 IF NOT EXISTS ] 数据库名「DEFAULT CHARSET字符集] [ COLLATE排序规则]; - 删除
DROP DATABASE [ IF EXISTS]数据库名; - 使用
USE 数据库名;
DDL-表操作-查询
- 查询当前数据库所有表
SHOW TABLES; - 查询表结构
DESC表名; - 查询指定表的建表语句
SHOW CREATE TABLE表名;
常用DATE TIME DATETIME三种
DDL-表操作-修改
添加字段
- ALTER TABLE表名ADD字段名类型(长度),[COMMENT注释][约束];
案例:
==为emp表增加一个新的字段”昵称”为nickname,类型为varchar(20)
DDL-表操作-修改
- 修改数据类型
ALTER TABLE表名MODIFY字段名新数据类型(长度); - 修改字段名和字段类型
ALTER TABLE表名CHANGE旧字段名新字段名类型(长度) [COMMENT注释] [约束]; - 修改表名
ALTER TABLE表名RENAME TO新表名; - 删除表
DROP TABLE[ IF EXISTS]表名; - 删除指定表,并重新创建该表
TRUNCATE TABLE表名;
DML增删改
DML英文全称是Data Manipulation Language(数据操作语言),用来对数据库中表的数据记录进行增删改操作。
添加数据(INSERT)
修改数据(UPDATE)
删除数据(DELETE)
-
给指定字段添加数据
INSERT INTO表名(字段名1,字段名2,…)VALUES(值1,值2,…) ; -
给全部字段添加数据
INSERT INTO表名VALUES(值1,值2,…); -
批量添加数据
INSERT INTO表名(字段名1,字段名2,…)VALUES(值1,值2.….),(值1,值2,…),(值1,值2,…);
INSERT INTO表名VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…); -
修改数据
UPDATE表名SET字段1=值1,字段2=值2[WHERE条件]; -
删除数据
DELETE FROM表名[ WHERE冬件];
DQL查询
- SELECT
字段列表 - FROM
表名列表 - WHERE
条件列表 - GROUP BY
分组字段列表 - HAVING
分组后条件列表 - ORDER BY
排序字段列表 - LIMIT
分页参数
1.查询多个字段
SELECT字段1,字段2,字段3… FROM表名;
SELECT * FROM 表名;
2.设置别名
SELECT字段1 [AS别名1],字段2[ AS 别名2]… FROM表名;
3.去除重复记录
SELECT DISTINCT字段列表FROM表名;
聚合函数
注意:null值不参与所有聚合函数运算。
-排序查询
- 语法
SELECT 字段列表 FROM表名[ WHERE条件 ] GROUP BY分组字段名[ HAVING分组后过滤条件];
公 - where与having区别
执行时机不同: where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。判断条件不同: where不能对聚合函数进行判断,而having可以。
执行顺序: where >聚合函数>having
排序方式
ASC:升序(默认值)DESC:降序
-分页查询
语法:
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
例子:
-- 查询第一页数据,展示10条
SELECT * FROM employee LIMIT 0, 10;
-- 查询第二页
SELECT * FROM employee LIMIT 10, 10;
注意事项
- 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
- 分页查询是数据库的方言,不同数据库有不同实现,MySQL是LIMIT
- 如果查询的是第一页数据,起始索引可以省略,直接简写 LIMIT 10
DCL
管理用户
查询用户:
USER mysql;
SELECT * FROM user;
创建用户:
CREATE USER ‘用户名’@‘主机名’ IDENTIFIED BY ‘密码’;
修改用户密码:
ALTER USER ‘用户名’@‘主机名’ IDENTIFIED WITH mysql_native_password BY ‘新密码’;
删除用户:
DROP USER ‘用户名’@‘主机名’;
例子:
-- 创建用户test,只能在当前主机localhost访问
create user 'test'@'localhost' identified by '123456';
-- 创建用户test,能在任意主机访问
create user 'test'@'%' identified by '123456';
create user 'test' identified by '123456';
-- 修改密码
alter user 'test'@'localhost' identified with mysql_native_password by '1234';
-- 删除用户
drop user 'test'@'localhost';
注意事项
主机名可以使用 % 通配
权限控制
常用权限:
-用户管理
权限 说明
ALL, ALL PRIVILEGES 所有权限
SELECT 查询数据
INSERT 插入数据
UPDATE 修改数据
DELETE 删除数据
ALTER 修改表
DROP 删除数据库/表/视图
CREATE 创建数据库/表
更多权限请看权限一览表
权限控制
查询权限:
SHOW GRANTS FOR ‘用户名’@‘主机名’;
授予权限:
GRANT 权限列表 ON 数据库名.表名 TO ‘用户名’@‘主机名’;
撤销权限:
REVOKE 权限列表 ON 数据库名.表名 FROM ‘用户名’@‘主机名’;
注意事项
多个权限用逗号分隔
授权时,数据库名和表名可以用 * 进行通配,代表所有
函数-字符串函数
CONCAT(s1, s2, …, sn) | 字符串拼接,将s1, s2, …, sn拼接成一个字符串 |
LOWER(str) | 将字符串全部转为小写 |
UPPER(str) | 将字符串全部转为大写 |
LPAD(str, n, pad) | 左填充,用字符串pad对str的左边进行填充,达到n个字符串长度 |
-RPAD(str, n, pad) - | -右填充,用字符串pad对str的右边进行填充,达到n个字符串长度- |
TRIM(str) | 去掉字符串头部和尾部的空格 |
SUBSTRING(str, start, len) | 返回从字符串str从start位置起的len个长度的字符串 |
-- 拼接
SELECT CONCAT('Hello', 'World');
-- 小写
SELECT LOWER('Hello');
-- 大写
SELECT UPPER('Hello');
-- 左填充
SELECT LPAD('01', 5, '-');
-- 右填充
SELECT RPAD('01', 5, '-');
-- 去除空格
SELECT TRIM(' Hello World ');
-- 切片(起始索引为1)
SELECT SUBSTRING('Hello World', 1, 5);