MySql-函数-约束-多表查询-事务总结

一、函数

(1)字符串函数:

函数功能
concat(S1,S2,…Sn)字符串拼接,将S1,S2,… Sn拼接成一个字符串
lower(str)将字符串str全部转为小写
upper(str)将字符串str全部转为大写
lpad(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
rpad(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
trim(str)去掉字符串头部和尾部的空格
substring(str,start,len)返回从字符串str从start位置起的len个长度的字符串

(2)数值函数:

函数功能
ceil(x)向上取整
floor(x)向下取整
mod(x,y)返回x/y的模
rand()返回0~1内的随机数
round(x,y)求参数x的四舍五入的值,保留y位小数

(3)日期函数:

函数功能
curdate()返回当前日期
curtimr()返回当前时间
now()返回当前日期和时间
year(date)获取指定date的年份
mouth(date)获取指定date的月份
day(date)获取指定date的日期
date_add(date,interval,exprtype)返回一个日期/时间值加上一个时间间隔expr后的时间值
datediff返回起始时间date1 和 结束时间date2之间的天数

(4)流程函数:

函数功能
if(value,t,f)如果value为true,则返回t,否则返回f
ifnull(value1 , value2)如果value1不为空,返回value1,否则返回value2
case where [ vall ] then [ res1 ]…else [ default ] end如果val1为true,返回res1,… 否则返回default默认值
case [ expr ] where [ vall ] then [ res1 ]…else [ default ] end如果expr的值等于val1,返回res1,… 否则返回default默认值

二、约束

约束描述关键字
非空约束限制该字段的数据不能为nullnot null
唯一约束保证该字段的所有数据都是唯一、不重复的unique
主键约束主键是一行数据的唯一标识,要求非空且唯一primary key
默认约束保存数据时,如果未指定该字段的值,则采用默认值default
检查约束保证字段值满足某一个条件check
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性foreign key
语法:
  • 创建表时:
    create table 表名(
    字段名 数据类型,

    [ constraint ] [ 外键名称 ] foreign key (外键字段名) references 主表 (主表列名)
    )
  • 修改表时:alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表 (主表列名)
  • 删除外键:alter table 表名 drop foreign key 外键名称
删除/更新行为:
行为说明
no action当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 restrict 一致) 默认行为
restrict当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 (与 no action 一致) 默认行为
cascade当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。
set null当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null)。
set default父表有变更时,子表将外键列设置成一个默认的值 (innodb不支持)
具体语法:
  • alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表 (主表列名) on update cascade on delete cascade;

三、多表查询

分类:
  • 连接查询
    • 内连接:相当于查询A、B交集部分数据
    • 外连接:
      • 左外连接:查询左表所有数据,以及两张表交集部分数据
      • 右外连接:查询右表所有数据,以及两张表交集部分数据
      • 自连接:当前表与自身的连接查询,自连接必须使用表别名
  • 子查询

(1)内连接:

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

    注意事项:一旦为表起了别名,就不能再使用表名来指定对应的字段了,此时只能够使用别名来指定字段。

(2)外连接:

  • 左外连接:select 字段列表 from 表1 left [ outer ] join 表2 on 条件…;

    左外连接相当于查询表1(左表)的所有数据,当然也包含表1和表2交集部分的数据。

  • 右外连接:select 字段列表 from 表1 right [ outer ] join 表2 on 条件…;

    右外连接相当于查询表2(右表)的所有数据,当然也包含表1和表2交集部分的数据

注意事项:
左外连接和右外连接是可以相互替换的,只需要调整在连接查询时SQL中,表结构的先后顺序就可以了。而我们在日常开发使用时,更偏向于左外连接。

(3)自连接:
自连接查询,顾名思义,就是自己连接自己,也就是把一张表连接查询多次。

  • select 字段列表 from 表a 别名a join 表a 别名b on 条件…;

注意事项:
在自连接查询中,必须要为表起别名,要不然我们不清楚所指定的条件、返回的字段,到底是哪一张表的字段。

(4)联合查询:
对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。

  • selete 字段列表 from 表A … union [ all ] selete 字段列表 from 表B…

    对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。
    union all 会将全部的数据直接合并在一起,union 会对合并之后的数据去重。

(5)子查询
SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。

标量子查询(子查询结果为单个值):

子查询返回的结果是单个值(数字、字符串、日期等)。(如:select id from dept where name = ‘销售部’😉

列子查询(子查询结果为一列):

常用的操作符:in 、not in 、 any 、some 、 all

操作符描述
in在指定的集合范围之内,多选一
not in不在指定的集合范围之内
any子查询返回列表中,有任意一个满足即可
some与any等同,使用some的地方都可以使用any
all子查询返回列表的所有值都必须满足
行子查询(子查询结果为一行):

子查询返回的结果是一行(可以是多列),这种子查询称为行子查询。
常用的操作符:= 、<> 、in 、not in

表子查询(子查询结果为多行多列):

子查询返回的结果是多行多列,这种子查询称为表子查询。
常用的操作符:in

根据子查询位置,分为:
A. where之后
B. from之后
C. select之后

四、事务:

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

控制事务一:

  • 查看事务提交方式 :selete @@autocommit ;
  • 设置事务提交方式 : set @@autocommit = 0 ;(1是自动,0是手动)
  • 提交事务:commit;
  • 回滚事务:rollback;

    注意:上述的这种方式,我们是修改了事务的自动提交行为, 把默认的自动提交修改为了手动提交, 此时我们执行的DML语句都不会提交, 需要手动的执行commit进行提交。

控制事务二:

  • 开启事务:start transaction 或 begin
  • 提交事务:commit
  • 回滚事务:rollback
事务四大特性
  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。
事务隔离级别
隔离级别脏读不可重复读幻读
Read uncommitted
Read committed×
Repeatable Read(默认)××
Serializable×××
  • 查看事务隔离级别:selete @@transaction_isolation
  • 设置事务隔离级别:set [ session ] [ global] transaction isolation level 隔离级别

    注意:事务隔离级别越高,数据越安全,但是性能越低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值