MySQL

DDL

数据定义语言,用来定义数据库对象(数据库,表,字段)

数据库操作

show databases; 查询所有数据库
select database(); 查询当前数据库
create databases [if not exists] 数据库名 [default charset 字符集] [collate 排序规则]; 创建
drop database [if exists] 数据库名; 删除
use 数据库名; 使用

表操作

show tables; 查询当前数据库所有表
desc 表名; 查询表结构
show create table 表名; 查询指定表的建表语句
alter table 表名 add 字段名 类型(长度) [comment 注释] [约束]; 添加字段
alter table 表名 modify 字段名 新数据类型(长度); 修改数据类型
alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [约束]; 修改字段名和字段类型
alter table 表名 drop 字段名; 删除字段
alter table 表名 rename to 新表名; 修改表名
drop table [if exits] 表名; 删除表
truncate table 表名; 删除指定表,并重新创建该表

DML

数据操作语言,用来对数据库表中的数据进行增删改
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 分页参数

DCL

数据控制语言,用来创建数据库用户、控制数据库的访问权限

管理用户

create user ‘用户名@主机名’ identified by ‘密码’; 创建用户
alter user ‘用户名@主机名’ identified with mysql_native_password by ‘新密码’; 修改用户密码
drop user ‘用户名@主机名’; 删除用户

权限控制

show grants for ‘用户名@主机名’; 查询权限
grant 权限列表 on 数据库名.表名 to ‘用户名@主机名’; 授予权限
revoke 权限列表 on 数据库名.表名 from ‘用户名@主机名’; 撤销权限

函数

字符串函数

concat(s1,s2,...sn) 字符串拼接
lower(str) 字符串小写
upper(str) 字符串大写
lpad(str,n,pad) 左填充
rpad(str,n,pad)右填充
trim(str) 去头尾空格
sustring(str,start,len) 字符串截取

数值函数

ceil(x) 向上取整
floor(x) 向下取整
mod(x,y) 返回x/y的模
rand() 返回0~1内的随机数
round(x,y) 求参数x的四舍五入的值,保留y位小数
select lpad(round(rand()*1000000,0),6,0); || select substring(rand(),3,6); 生成六位的随机数

日期函数

curdate() 返回当前日期
curtime() 返回当前时间
now() 返回当前日期和时间
year(date) 获取指定date的年份
month(date) 获取指定date的月份
day(date) 获取指定date的日期
date_add(date,interval expr type) 返回一个日期或时间值加上一个时间间隔expr的时间值
datediff(date1,date2) 返回日期差(天数)

流程函数

if(value,t,f) 如果值为真,返回t,否则返回f
ifnull(value1,value2) 如果值1不为空,返回值1,否则返回值2
case when [val1] then [res1] ... else [defalut] end 如果值1为真,返回结果1,否则返回默认值
case [expr] when [val1] then [res1] ...else [defalut] end 如果expr等于val1,返回结果1,否则返回默认值

约束

not null 非空约束
unique 唯一约束
primary key 主键约束
default 默认约束
check 检查约束(8.0.16版本)
foreign key 外键约束

外键

alter table 表名 add constraint 外键名称 foreign key(外键字段名) reference 主表(主表列名); 添加外键
alter table 表名 drop foreign key 外键名称; 删除外键

外键行为

cascade 级联
set null 设为空

多表查询

多表关系

1.一对多:在多的一方设置外键,关联的一方的主键
2.多对多:建议中间表,中间表包含两个外键,关联两张表的主键
3.一对一:用于表结构拆分,在其中一方设置外键(UNIQUE),关联另一方的主键

内连接

select 字段列表 from 表1,表2 where 条件…; 隐式内连接
select 字段列表 from 表1 [inner] join 表2 on 条件…; 显示内连接

外连接

select 字段列表 from 表1 left [outer] join 表2 on 条件…; 左外连接(查询表1的所有数据 包含 表1和表2交集部分的数据)
select 字段列表 from 表1 right [outer] join 表2 on 条件…; 右外连接(查询表2的所有数据 包含 表1和表2交集部分的数据)

自连接

select 字段列表 form 表1 别名1 join 表1 别名2 on 条件…;

联合查询

select 字段列表 from 表1 union [all] select 字段列表 from 表2; (列数和字段类型保持一致,union all将全部数据合并,union会去重)

子查询

标量子查询 列子查询 行子查询 表子查询
1.标量子查询:子查询返回的结果是单个值(数字、字符串、日期等)
2.列子查询:子查询返回的结果是一列(可以是多行)
3.行子查询:子查询返回的结果是一行(可以是多列)
4.表子查询:子查询返回的结果是多行多列
select * from t1 where column = (select column1 from t2);

事务

是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败

事务操作1

select @@autocommit; 查看事务提交方式
set @@autocommit = 0; 设置事务提交方式
commit; 提交事务
rollback; 回滚事务

事务操作2

start transaction 或 begin; 开启事务
commit; 提交事务
rollback; 回滚事务

事务四大特性(ACID)

原子性(Atomicity)事务是不可分割的最小操作单元,要么全部成功,要么全部失败
一致性(Consistency)事务完成时,必须使所有的数据都保持一致状态
隔离性(Isolation)数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
持久性(Durability)事务一旦提交或回滚,它对数据库中的数据的改变就是永久的

并发事务问题

  • 脏读 一个事务读到另外一个事务还没有提交的的数据
  • 不可重复读 一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读
  • 幻读 一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”

事务隔离级别

事务隔离级别越高,数据越安全,但是性能越低
Read Uncommitted(读未提交)
Read Uncommitted(读已提交)
Repeatable Read(可重复读取)
Serializable(可串行化)
select @@transaction_isolation; 查看事务隔离级别
set [session | global] transaction isolation level {Read Uncommitted | Read Uncommitted | Repeatable Read | Serializable} 设置事务隔离级别

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值