2022-2023年大二上mysql学习汇总

weakxy-home / 2023-05-17 / 原文

CRUD等操作(DDL、DML、DQL)

权限操作:

  create user 用户名@"localhost或%" identified by '密码'    show grants for 用户名@主机名   grant 权限列表(all/insert/delete/select等) on 库名(*).表名(*) to 用户名@主机名    remove 与授予一样

函数:

  内置(后面加as 可以使函数别名):

     字符串:concat拼接  substring截取  lower/upper大小写  l/r pad用某个字符填充  trim去头尾空格

     数值:ceil / floor向上/下取整  round四舍五入  mod   rand 0~1随机数

     日期:curdate/curtime 当前日期/时间 now  year/month/day  date_add在指定时间加指定时间  datediff日期相差天数

      流程:if  ifnull返回不为空的值   case when [val] then [res] ... else [default] end   如果val为true,返回res,否则default(when...then可以多个)

约束:

  非空not null、唯一unique、主键primary key、默认default、检查check(满足某个条件)、外键foreign key、自增auto_increment

  添加外键:alter table 表名 add constraint 外键名称(如fk_表名_列名) foreign key (列)references 主表(列) [添加行为 on update/on delete 有no action/restrict/cascade/set null/set default]

  删除外键:alter table 表名 drop foreign key 外键名称

多表:一对多是通过多表做外键、多对多是建立中间表做外键、一对一是单表拆分后在其中一张表中创建外键联系另一张

  内连接(交集):隐式select 字段 from 表1, 表2 where ...    显示select 字段 from 表1 [inner]join 表2 on 条件

  左/右外连接:select 字段 from 表1 left/right [outer] join 表2 on 条件

  联合union和or的区别:用union在通常情况下比用or的效率要高的多,因为where里面用or会引起全表扫描,也有特殊情况

  子查询 = > <等  in,not in,all,any等 

事务:

  select @@autocommit;查询事务    set @@autocommit;设置当前窗口的sql语句手动提交   commit;提交事务   rollback;回滚事务   start transaction/begin;开启事务

  四大特性:ACID

  并发事务问题:脏读(读到未提交事务)、不可重复读(在同一未提交事务中查询不一致)、幻读(因为未保存事务,查询还是之前事务的模样,另一事务更改后,原来事务无法提交成功)

  隔离级别(锁机制):select @@TRANSACTION_ISOLATION查看隔离级别  set [session当前|global所有客户端] transaction isolation level 隔离级别