sql个人文档(基础篇)
sql 个人文档(基础篇)
序
- sql不区分大小写,关键字建议使用大写
- -- 关键注释
sql分类:
- DDL 数据定义语言 (建表相关)
- DML 数据操作语言 (对数据进行增删改)
- DQL 数据查询语言 (数据查询)
- DCL 数据控制语言 (对数据库用户权限控制)
SQL基本数据类型
可选参:
unsigned
double(4 , 1) 4位,小数最多位数:1
SQL分类详
DDL-数据库操作
查询
show databases(); -- 查询所有数据库
selecvt databases(); -- 查询当前数据库
创建数据库
create database if not exists [数据库名]
可选字段:
- default charset utf8mb4 【设置默认字符集为 : utf8mb4】
删除数据库
drop database if exists [数据库名];
使用数据库
use 【数据库名】;
创建表
参考建表语句
create table if not exists tb_user
(
id int auto_increment auto_increment primary key comment '编号',
name varchar(50) comment '姓名',
age tinyint unsigned comment '年龄',
gender varchar(1) comment '性别'
);
查询语法
查看所有表 - show tables;
查询表结构 - desc [表名]
查询建表数据 - show create tb_user;
修改表
添加新的字段
alter table [表名] add [字段名] [类型] [约束];
修改原有的字段
alter table [表名] modify [字段名] [类型] [约束];
修改原有字段包括字段名
alter table [表名] change [旧字段名] [新字段名] [类型] [约束];
删除原有的字段
alter table [表名] drop [字段名];
修改表名
alter table [表名] rename to [新表名];
删除表名
drop table if exists [表名];
truncate table [表名];
DDL-数据操作
INSERT
给指定字段添加数据,全部添加不需要指定字段名 , 添加多个数据用逗号隔开即可
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);
注意:
- 插入时的顺序需要一一对应
- 字符串和日期型数据应该包含在引号中
- 插入数据的大小应在数据范围内
UPDATE
UPDATE 表名 SET 字段名1 = 值1 , 字段名2 = 值2 , .... [ WHERE 条件 ] ;
- 修改语句的条件可以有,也可以没有,如果没有条件,则会修改整张表的所有数据。
DELETE
DELETE FROM 表名 [ WHERE 条件 ] ;
DQL-数据查询
基本操作
执行顺序:
2 设置别名:
SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;
SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名;
3 去除重复数据
SELECT DISTINCT 字段列表 FROM 表名;
常用查询条件
基本执行顺序:
- from
- where
- group by
- select
- order by
- limit
常用的聚合函数
NULL不参与所有聚合函数运算
分组查询
语法 : SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组 后过滤条件 ];
where 跟 having 的区别
-
执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组后对结果进行过滤。
-
判断条件不同:where不能对聚合函数进行判断,而having可以。
- group by 常与 聚合函数一起使用
- having可以对查询后的数据进行进一步处理
注意:
- 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。执行顺序: where > 聚合函数 > having 。
- 支持多字段分组, 具体语法为 : group by columnA,columnB
排序查询
语法 :
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1 , 字段2 排序方式2 ;
排序方式:
- DESC 降序
- ASC 升序(默认)
- ASC可以省略
分页查询
- 分页查询是方言
语法:
SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数 ;
注意事项:
- 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
- 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10。
DCL-数据控制
查询用户
use 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 '用户名'@'主机名';
函数
字符串函数
常用的函数有:
- 字符串中的下标从一开始 , 带上的是长度
数值函数
日期函数
控制函数
约束
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。
目的:保证数据库中数据的正确、有效性和完整性。
常用约束:
外键约束
添加外键 :
CREATE TABLE 表名(
字段名 数据类型,
...
[CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名)
);
或者
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名) ;
删除外键
alter table emp drop foreign key fk_emp_dept_id;
事务
事务 是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系
统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
事务的四大特征(ACID)
- 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
- 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
- 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
- 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
事务的隔离等级
1). 查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
2). 设置事务隔离级别
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
注意:事务隔离级别越高,数据越安全,但是性能越低。
并发事务问题