# Mysql
# 1、Sql 语句
# (1) DDL—— 数据定义语言,用来定义数据库对象 (数据库、表、字段)
- 查询所有数据库
show databases;
- 查询当前数据库
select database();
- 创建数据库
creat database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则]; --if not exists 表示若数据库存在,则不创建
- 删除数据库
drop database[if exists]数据库名; --if exists 表示若数据库不存在,则不删除
- 使用数据库
use 数据库名;
- 查询当前数据库所有表
show tables;
- 查询表结构
desc 表名;
- 查询指定表的建表语句
show create table 表名;
- 表创建
create table 表名( 字段1 字段1类型[COMMENT 字段1注释], 字段2 字段2类型[COMMEN+T 字段2注释], 字段3 字段3类型[COMMENT 字段3注释], ...... 字段n 字段n类型[COMMENT 字段n注释] )[COMMENT 表注释];
- 添加表的字段
alter table 表名 add 字段名 类型(长度)[COMMENT 注释][约束];
- 修改表的字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [COMMENT 注释][约束];
- 修改字段的数据类型
alter table 表名 modify 字段名 新数据类型;
- 修改表名
alter table 表名 reanme to 新表名;
- 删除字段
alter table 表名 drop 字段名;
- 删除表
drop table[if exists] 表名;
- 删除指定表,并重新创建该表
truncate table 表名; --删除表后,表中的数据也会删除
# (2) DML—— 数据操作语言,用来对数据库表中的数据进行增删改
- 查询所有数据库
show databases;
- 查询当前数据库
select database();
- 创建数据库
creat database [if not exists] 数据库名 [default charset 字符集] [collate 排序规则]; --if not exists 表示若数据库存在,则不创建
- 删除数据库
drop database[if exists]数据库名; --if exists 表示若数据库不存在,则不删除
- 使用数据库
use 数据库名;
- 查询当前数据库所有表
show tables;
- 查询表结构
desc 表名;
- 查询指定表的建表语句
show create table 表名;
- 表创建
create table 表名( 字段1 字段1类型[COMMENT 字段1注释], 字段2 字段2类型[COMMENT 字段2注释], 字段3 字段3类型[COMMENT 字段3注释], ...... 字段n 字段n类型[COMMENT 字段n注释] )[COMMENT 表注释];
- 添加表的字段
alter table 表名 add 字段名 类型(长度)[COMMENT 注释][约束];
- 修改表的字段名和字段类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [COMMENT 注释][约束];
- 修改字段的数据类型
alter table 表名 modify 字段名 新数据类型;
- 修改表名
alter table 表名 reanme to 新表名;
- 删除字段
alter table 表名 drop 字段名;
- 删除表
drop table[if exists] 表名;
- 删除指定表,并重新创建该表
truncate table 表名; --删除表后,表中的数据也会删除
# (3) DQL—— 数据查询语言,用来查询数据库中的表的记录
- 基本查询
- 查询多个字段
select 字段1,字段2,字段3,... from 表名; select *from 表名;--查询整张表 - 设置别名 select 字段1[as 别名1],字段2[as 别名2],字段3[as 别名3],...from 表名; - 无处重复记录 select distinct 字段列表 from 表名;
- 条件查询
语法
select 字段列表 from where 条件列表;
条件
select 字段列表 from where 条件列表;
- 聚合函数
介绍
将一列数据作为一个整体,进行纵向计算。
常见聚合函数
语法
select 聚合函数(字段列表) from 表名;
- 分组查询
- 语法
select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件] - where和having区别 - 执行实际不同:where是分组之前进行过滤,不满条件where条件,不参与分组;having是分组之后对结果进行过滤。 - 判断条件不同:where不能对聚合函数进行判断,而having可以。
- 排序查询
- 语法
select 字段列表 from 表名 order by 字段1 排序方式,字段2 排序方式2;
- 排序方式
- ASC:升序 (默认值)
- DESC:降序
- 如果是多字段排序,当第一个字段排序值相同时,才会根据第二个字段进行排序
- 分页查询
- 语法
select 字段列表 from 表明 limit 起始索引,查询记录数;
- 注意
- 起始索引从 0 开始,起始索引 =(查询页码 - 1)* 咩野显示记录数。
- 分页茶树是数据库的方言,不同的数据库有不同的实现,Mysql 中是 LIMIT。
- 如果查询的是第一页数据,起始索引可以省略,直接简写为 [limit 查询记录数]。
- 语句执行顺序
# (4) DCL—— 数据控制语言,用来创建数据库用户、控制数据库的访问权限
# 1、管理用户
- 查询用户
use mysql; select *from user;
- 创建用户
create user '用户名'@'主机名' IDENTIFIED BY '密码';
- 修改用户密码
alter user '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
4. 删除用户
drop user '用户名'@'主机名';
# 2、权限管理
- 查询权限
show grants for '用户名'@'主机名'; 2. 授予权限 grant 权限列表 on 数据库.表名 to '用户名'@'主机名'; 3. 撤销权限 revoke 权限列表 on 数据库.表名 from '用户名'@'主机名';
- 多个权限之间,使用逗号分隔。
- 授权时,数据库名和表名可以使用 * 进行通配,代表所有。
# 2、数据类型
<img src="http://lgqimg.changzer.cn/image-20220226131643378.png" alt="image-20220226131643378" />
# 3、函数
- 语法
select 函数(参数);
# 1. 字符串函数
# 2. 数值函数
# 3. 日期函数
# 4. 流程函数
# 4、约束
- 外键约束
- 添加外键
create table 表名( 字段名 数据类型, ... [constraint][外键名称] foreign key(外键字段名) references 主表(主表列名) ); alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名);
- 删除外键
alter table 表名 drop foreign key 外键名称;
- 删除 / 更新行为
- 语法
alter table 表名 add constraint 外键名称 foreign(外键字段) references 主表名(主表字段名) on update 行为 on delete 行为;
# 5、多表查询
# 5.1 多表关系
- 一对多 (多对一)
- 多对多
- 一对一
# 5.2 多表查询概述
- 多表查询分类
# 5.3 内连接
内连接查询的是两张表交集的部分
- 隐式内连接
select 字段列表 from 表1,表2 where 条件...;
- 显式内连接
select 字段列表 from 表1[inner] join 表2 on 连接条件...;
# 5.4 外连接、
- 左外连接
select 字段列表 from 表1 left [outer] join 表2 on 条件...;
- 右外连接
select 字段列表 from 表1 right [outer] join 表1 on 条件...;
# 5.5 自连接、
- 自连接查询法
select 字段列表 from 表A 别名A join 表A 别名B on 条件...;
- 自连接查询,可以是内连接查询,也可以是外连接查询.
# 5.6 联合查询
- 对于 union 查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。
- 语法
select 字段列表 from 表A union [all] select 字段列表 from 表B;
- 对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致
- union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重
# 5.7 子查询
概念 :SQL 语句中嵌套 select 语句,称为嵌套查询,又称子查询
语法
select * from t1 where column1=(select column1 from2);
- 子查询外部的邮局可以是 insert/update/delete/select 的任何一个
- 分类
- 标量子查询
- 列子查询
- 行子查询
- 表子查询
# 6、事务
- 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销请求,即这些操作要么同时成功,要么同时失败。
事务操作
查看 / 设置事务提交方式
select @@autocomit;-- 查看事务提交方式,1 为自动提交,0 为手动提交 set @@sutiocomit=0;-- 设置提交方式,0 为手动提交提交事务
l
commit;回滚事务
rollback;
- 开启事务
start transaction 或 begin;
- 事务的四大特性
- 并发事务问题
- 事务隔离级别
查看事务隔离级别
select @@transaction_isolation;设置事务隔离级别
set [session|global] transaction isolation level {read uncommitted|read committed|repeatable read|serializable}; --session表示会话级别,表示当前客户端窗口有效 --session global 表示所有客户端窗口有效