MySQL复习随笔-P2

约束

NOT NULL 非空约束

UNIQUE 唯一约束

PRIMARY KEY 主键约束

DEFAULT 默认约束

CHECK  检查约束 

FOREIGN KEY 外键约束 

实例如下:

create table people(
    id int primary key auto_increment comment '主键',
    name VARCHAR(10) NOT NULL UNIQUE COMMENT '名字',
    age int check ( age>0 and age<=120 ) comment '年龄',
    status char(1) default '1' comment '状态',
    gender char(1) comment '性别'
)comment '人员信息';

insert into people(name, age, status, gender) values ('翠花',12,'1','男'),('翠绿',72,'1','女');

外键约束:外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。 

添加外键:

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);

删除外键:

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

删除/更新行为

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名) ON UPDATE 行为 ON DELETE 行为;

多表查询

多表关系:一对一、一对多、多对多;

在多表查询时,我们要消除无效的笛卡尔积

多表查询分类:

1、连接查询 

内连接:查询A、B交集部分数据

外连接:左外连接:查询左表所有数据,以及两张表交集部分数据

              右外连接:查询右表所有数据,以及两张表交集部分数据

自连接:当前表与自身的连接查询,自连接必须使用表别名

语法如下:

内连接查询语法:
隐式内连接:
select 字段列表 from 表1,表2 where 条件···;
显示内连接;
select 字段列表 from 表1 [inner] join 表2 on 连接条件··;

外连接查询语法:
左外连接:
SELECT 字段列表 FROM 表1 LEFT[outer] join 表2 on 条件···;
右外连接:
SELECT 字段列表 FROM 表1 RIGHT[outer] join 表2 on 条件···;

自连接查询语法:
select 字段列表 from 表A 别名A join 表A 别名B on 条件···;
自连接查询,可以是内连接查询,也可以是外连接查询;

联合查询-union,union all,对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集。union 会将合并的结果去除重复的部分,union all只是将合并的结果加在一起。对于联合查询的多张表的列数必须保持一致,字段类型也需要保持一致。 

2、子查询

子查询:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询;子查询外部的语句可以是增删改查的任何一个。 

标量子查询:子查询返回的结果是单个值(数字、字符串、日期等),最简单的形式,这种子查询称为标量子查询。

列子查询:列子查询返回的结果是一列(可以是多列)。所涉及的操作符:IN、NOT IN 、ANY 、SOME (ANY与SOME都是子查询返回列表中,有任意一个满足即可)、ALL

行子查询:行子查询返回的结果是一行(可以是多列)。所涉及的操作符:=、<>、in、not in

表子查询:表子查询返回的结果是多行多列。所涉及的操作符:in

事务

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

MySQL默认自动提交事务

方式一:查看/设置事务提交方式

select @@autocommit;        set @@autocommit = 0; 

提交事务

commit;

回滚事务

rollback;

方式二:

开启事务

START TRANSACTION 或BEGIN;

提交事务

commit;

回滚事务

rollback; 

事务的四大特性(ACID):

原子性;一致性;隔离性(数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下进行);持久性;

并发事务问题:

1.脏读:一个事务读到另外一个事务还没有提交的数据;

2.不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读;

3.幻影:一个事务在按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了”幻影“。

事务隔离级别

隔离级别脏读不可重复读幻读
Read uncommitted
Read committed×
Repeatable Read (默认)××
Serializable×××
查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;

设置事务隔离级别
set[session|global] transaction isolation level{READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ | SERIALIZABLE}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值