MySQL-7 DDL约束 标识列 TCL事务控制语言 视图view
文章目录
- DDL语言
- 常见约束
- 约束分类
- 添加约束的时机
- 创建表时添加约束
- 通用写法
- 修改表时添加约束
- 修改表时删除约束
- 主键和唯一的对比
- 外键约束
- 案例讲解常见约束
- 标识列
- TCL事务控制语言
- 事务
- 事务的特性ACID
- 事务的创建
- 数据库的隔离级别
- 事务并发问题的介绍
- 隔离级别
- 视图
- 视图的创建
- 视图的好处
- 视图的修改
- 视图的删除和查看结构
- 视图的练习
- 视图的更新(更新数据)
- 视图和表的对比
- delete和truncate在事务使用时的区别
- 视图测试题
- 复习 事务 视图 约束
DDL语言
常见约束
- 含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性.
create table 表名(
字段名 字段类型 约束,
字段名 字段类型 约束,
字段名 字段类型 列级约束,
表级约束
);
约束分类
- not null:非空约束,用于保证该字段的值不能为空,比如姓名,学号等.
- default:默认约束,用于保证该字段有默认值,比如性别.
- primary key:主键约束,用于保证该字段的值具有唯一性,并且非空,比如学号,员工编号等.
- unique:唯一约束,用于保证该字段的值具有唯一性,可以为空.比如座位号.
- check:检查约束,mysql中不支持,语法支持但没效果,oracle支持,比如年龄,性别
- foreign key:外键约束,用于限制两个表的关系,用于保证该表该字段的值必须来自于主表的关联列的值.==在从表添加外键约束,用于引用主表中某列的值.==比如:专业编号,员工表的部门编号,员工表的工种编号.
添加约束的时机
- 创建表时
- 修改表时
- 约束的添加分类
- 列级约束
- 六大约束语法上都支持,但外键约束没有效果
- 表级约束
- 除了非空,默认,其他的都支持.
- 列级约束
创建表时添加约束
- 添加列级约束
- 语法:直接在字段名和类型后面追加约束类型即可,只支持默认,非空,主键,唯一.
use 库名;
create table stuinfo(
id int primary key,#主键
stuName varchar(20) not null,#非空
gender char(1) check(gender='男' or gender='女'),#检查约束
seat int unique,#唯3一约束
age int default 18,#默认约束
majorId int references major(id)#外键
);create table major(
id int primary key,
majorName varchar(20)
);
desc stuinfo;
# 查看表的索引,包含主键,外键,唯一
show index from stuinfo;
- 添加表级约束
- 语法:在各个字段的最下面
constraint 约束名 约束类型(字段名),
constraint 约束名 可以省略
drop table if exists stuinfo;
create table stuinfo(
id int,
stuName carchar(20),
gender char(1),
seat int,
age int,
majorid int,
constraint pk primary key(id),#主键
constraint uq unique(seat),#唯一键
constraint ck check(gender='男' or gender='女'),#检查
constraint fk_stuinfo_major foreign key(majorid) references major(id)#外键
);
show index from stuinfo;
通用写法
drop table if exists stuinfo;
create table if not exists stuinfo(
id int primary key,
stuname varchar(20) not null,
gender char(1),
age int default 18,
seat int unique,
majorid int,
constraint fk_stuinfo_major foreign key(majorid) references major(id)
);
修改表时添加约束
- 语法:
# 添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束;
# 添加表级约束
alter table 表名 add constraint 约束名 约束类型(字段名) 外键应用;
- 添加非空约束
drop table if exists stuinfo;
create table stuinfo(
id int,
stuName carchar(20),
gender char(1),
seat int,
age int,
majorid int
);
# 添加非空约束
alter table stuinfo modify column stuname varchar(20) not null;
desc stuinfo;
# 添加默认约束
alter table stuinfo modify column age int default 18;
# 添加主键
# 列级主键
alter table stuinfo modify column id int primary key;
# 表级主键
alter table stuinfo add primary key(id); # 添加唯一键
# 列级唯一
alter table stuinfo modify column seat int unique;
# 表级唯一
alter table stuinfo add unique(seat); # 添加外键
alter table stuinfo add constraint fk_stuinfo_major foreign key(majorid) references major(id);
修改表时删除约束
# 删除非空约束
alter table stuinfo modify column stuname varchar(20) null;
# 删除默认约束
alter table stuinfo modify column age int;
# 删除主键
alter table stuinfo drop primary key;
# 删除唯一
alter table stuinfo drop index seat;
# 删除外键
alter table stuinfo drop foreign key fk_stuinfo_major;
主键和唯一的对比
保证唯一性 是否允许为空 一个表中可以有多少个 是否允许组合键
主键 可以 不可以 不可以 允许,但不推荐
唯一 可以 可以 可以 允许,但不推荐
外键约束
- 特点:
- 要求在从表设置外键关系
- 从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无要求
- 主表的关联列必须是一个key(一般是主键或唯一)
- 插入数据时,先插入主表,再插入从表,删除数据时,先删除从表,再删除主表
案例讲解常见约束
练习题
标识列
- 标识列又称为自增长列
- 含义:可以不用手动的插入值,系统提供默认的序列值
- 特点:
- 标识列必须和主键搭配吗?不一定,但要求是一个key(主键,唯一等)
- 一个表只能有一个标识列(自增长列)
- 标识列的类型只能是数值型.(int,float,double等)
- 标识列可以通过 set auto_increment_increment=3;设置步长,可以通过手动插入值,设置起始值.
# 创建表时设置标识列
drop table if exists tab_identity;
create table tab_identity(
id int primary key auto_increment,
name varchar(20)
);
truncate table tab_identity;
insert into tab_identity(id,name) values(null,'john');
select * from tab_identity;
show variables like '%auto_increment%';
# 修改表时设置标识列
alter table tab_identity modify column id int primary key auto_increment;
# 修改表时删除标识列
alter table tab_identity modify column id int;
TCL事务控制语言
事务
存储引擎(了解)
transaction control language 事务控制语言
事务:一个或一组sql语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行.
事务的特性ACID
- 事务的特性(ACID)
- 原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生.
- 一致性(Consistency):事务必须使数据库从一个一致性状态变换到另外一个一致性状态.
- 隔离性(Isolation):事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰.
- 持久性(Durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响.
事务的创建
- 隐式事务:事务没有明显的开启和结束的标记.比如:insert,update,delete语句
delete from 表 where id=1;
- 显示事务:事务具有明显的开启和结束的标记.
- 前提:必须先设置自动提交功能为禁用
set autocommit=0;
show variables like 'autocommit';
show engines;# 显示事务
# 步骤1:开启事务
set autocommit=0;
start transaction;# 可选的
# 步骤2:编写事务中的sql语句(select insert update delete)
语句1;
语句2;
# 步骤3:结束事务
commit;# 提交事务
rollback;# 回滚事务
# 演示事务的使用步骤
set autocommit=0;
start transaction;
update 表名 set 字段 = 500 where username='QW';
update 表名 set 字段 = 1500 where username='wq';
commit;
# 或
rollback;
select * from 表名;
数据库的隔离级别
事务并发问题的介绍
- 对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题:
- 脏读:对于两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段,之后,若T2回滚,T1读取的内容就是临时且无效的.
- 不可重复读:对于两个事务T1,T2,T1读取了一个字段,然后T2更新了该字段,之后,T1再次读取同一个字段,值就不同了.
- 幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段,然后T2在该表中插入了一些新的行,之后,如果T1再次读取同一个表,就会多出几行.
隔离级别
- 一个事务与其他事务隔离的程度称为隔离级别数据库规定了多种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性就越好,但并发性越弱
- 一般使用默认的隔离级别
- read uncommitted:出现脏读,幻读,不可重复读
- read committed:避免脏读,出现幻读和不可重复读
- repeatable read:避免脏读,不可重复读,出现幻读
- serializable:避免脏读,幻读,不可重复读.
- mysql中默认repeatable read
- oracle中默认 read committed
- 查看隔离级别:select @@tx_isolation;
- 设置隔离级别:set session/global transaction isolation level 隔离级别;
- 设置保存点:savepoint 节点名;只搭配rollback使用:rollback to 节点名;
演示事务的隔离级别:脏读,不可重复读,幻读
保存节点,回滚点的使用
# 演示savepoint 的使用
set autocommit =0 ;
start transaction;
delete from 表名account where id=25;
savepoint a;#设置保存点
delete from 表名account where id=28;
rollback to a;# 回滚到保存点a
视图
- 概念:虚拟表,和普通表一样使用
- mysql 5.1版本出现的新特性,是通过表动态生成的数据
视图的创建
- 语法:
create view 视图名
as
查询语句;
视图的创建演示
视图的好处
- 重用sql语句
- 简化复杂的sql操作,不必知道它的查询细节
- 保护数据,提高安全性
视图的修改
- 语法:
# 方式一:
create or replace view 视图名
as
查询语句;# 方式二:
alter view 视图名
as
查询语句;
视图的修改演示
视图的删除和查看结构
- 语法:
# 删除视图
drop view 视图名,视图名,...;
# 查看视图结构
desc 视图名;
show create view 视图名;
视图的删除和查看演示
视图的练习
视图的案例练习
视图的更新(更新数据)
- 视图的增删改也会更新原始表
- 给视图添加权限,只读,不能修改.
视图的更新演示
# 插入
insert into 已创建好的视图 values(值1,值2,值3,...);
# 修改,对原始表也有效
update 视图名 set 字段name='123' where 筛选条件;
# 删除
delete from 视图 where 筛选条件;
视图和表的对比
- 创建语法的关键字:视图(create view),表(create table)
- 是否实际占用物理空间:视图(只是保存了sql逻辑),表(保存了数据)
- 使用:视图(一般不能增删改,用来查)表(增删改查)
delete和truncate在事务使用时的区别
- delete可以回滚 ,truncate不支持回滚
演示区别
视图测试题
视图测试题
复习 事务 视图 约束
MySQL-7 DDL约束 标识列 TCL事务控制语言 视图view相关推荐
- 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引...
一.TCL事务控制语言 ###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. ...
- DCL(数据控制语言)和TCL(事务控制语言)
文章目录 1.DCL(数据控制语言) 2.TCL(事务控制语言) 3. 其他常用sql语句 1.DCL(数据控制语言) DCL主要用来管理数据库用户以及用户涉及的权限 1.1 创建数据库中的新用户 语 ...
- mysql数据库入门教程(10):标识列和事务
一.标识列 标识列有点类似前文的约束. 又称为自增长列 含义:可以不用手动的插入值,系统提供默认的序列值 使用方法在插入的列后面 添加关键字 AUTO_INCREMENT 特点: 1.标识列必须和主键 ...
- MySQL表级约束和列级约束
MySQL中只要支持六种完整性约束,如表所示:其中check约束是MySQL8中提供的支持. 约束条件 约束描述 primary key 主键约束,约束的值可唯一的标识对应的记录 not null 非 ...
- 十八、MySQL之TCL事务控制语言(详解)
TCL : Transaction Control Language 事务控制语言 零.MySQL 中的存储引擎 1.概念:在mysql中的数据用各种不同的技术存储在文件(或内存)中. 2.通过sho ...
- MySQL --- 19♪ 进阶15 TCL事务控制语言--建立结束事务/设置断点--默认隔离级别--脏读/幻读/不可重复读
#TCL事物控制语言 : /* Transaction control language : 事物控制语言 事务: 一个或者一组sql语句组成一个执行单元,这个执行单元要么全部执行,要 ...
- TCL——事务控制语言
一.事务控制语言(TCL)介绍 1.1 事务 事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的.而整个单独单元作为一-个不可分割的整体,如果单元中某条SQL语句一 ...
- MySQL 的DDL DML DQL DCL细节解析 知道这些就够了
SQL语言一共分为4大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL 1.数据定义语言DDL(Data Definition Language) 对象: 数据库和表 ...
- MySQL_TCL事务控制语言_刘锋的博客
文章目录 TCL事务控制语言 一.事务的属性(ACIB) 原子性 一致性 隔离性 持久性 二.事务的创建 隐式的事务 显式的事务 三.事务的隔离级别 脏读: 不可重复度: 幻读: 四.delete和t ...
最新文章
- 蓝桥杯国赛-数正方形-java
- Netflix正式开源其API网关Zuul 2--转
- 数据库读写分离(aop方式完整实现)
- 关于.Net 1.1 Windows Forms 控件的一个小问题
- 一套完整java项目 后台+管理+前端
- 封装一个时间百分比多个数比较
- View4.5测试参考文档1--测试环境规划
- 2.2 流程控制-for序列 2.3 流程控制-for字典 2.4 循环退出 2.5 流程控制-while
- 用极大似然法估计因子载荷矩阵_spss教程:因子分析
- python拆分word文档_python-docx处理word文档
- 一个农村孩子的大城市梦想之深入江湖!
- 公文管理系统案例展示
- uni-app之uniCloud(一)
- mesh 协调器 路由器_双模网络协调器、双模路由器、双模mesh组网系统及其方法与流程...
- Power Query (Power BI)傻瓜式合并资产负债表,史上最好用
- 12306 售票网站新版验证码识别对抗
- 五、Zabbix — 监控报警那点事儿
- MongoDB年终大会转移至线上进行 | 周五参会指南
- java jcseg 官网_Jcseg轻量级Java中文分词器2.6.5最新版
- 福利 | 手把手教你做好一场技术分享
热门文章
- 手把手教你撸个直播小程序
- 力推美团企业版 美团究竟意欲何为?
- 用正则表达式提取富文本内容(去除html,p,a等标签)
- 无法打开登录所请求的数据库 xxx。登录失败。用户 'AAA' 登录失败。
- 南邮-云计算技术与大数据期末考试(知识点总结二)
- 还在肝阴阳师?别错过千年一遇的高冷妹纸
- c++7-1 无符号整数的内部结构 - C/C++ 指针及引用
- CGB 2107 2021.8.18 笔记
- 14-[LVI-SAM]visual_odometry_callbackAndprocess
- App 启动流程与 Activity 启动流程梳理