7.4 标识列

  • 含义:又称为自增长列,可以不用手动的插入值,系统提供默认的序列值

  • 特点:

1、自增长列要求必须设置在一个键上,比如主键或唯一键
2、自增长列要求数据类型为数值型
3、一个表至多有一个自增长列

CREATE TABLE gradeinfo(
	gradeID INT PRIMARY KEY AUTO_INCREMENT,
	gradeName VARCHAR(20)
);

SELECT * FROM gradeinfo;

INSERT INTO gradeinfo VALUES(NULL,'一年级'),(NULL,'2年级'),(NULL,'3年级');

INSERT INTO gradeinfo(gradename)VALUES('一年级'),('2年级'),('3年级');

8 TCL 语言

  • Transcaction Control Language:事务控制语言

  • 概念:由一条或多条sql语句组成,要么都成功,要么都失败

  • 特性:ACID

原子性(Atomicity):事务中所有操作是不可再分割的原子单位。事务中所有操作要么全部执行成功,要么全部执行失败。

一致性(Consistency):事务执行后,数据库状态与其它业务规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账号余额之和应该是不变的。

隔离性(Isolation):隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰。

持久性(Durability):一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使提交事务后,数据库马上崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。

  • 分类:

隐式事务:没有明显的开启和结束标记
比如DML语句的insert、update、delete语句本身就是一条事务

insert into stuinfo values(1,'john','男','ert@dd.com',12);

显式事务:具有明显的开启和结束标记

一般由多条SQL语句组成,必须具有明显的开启和结束标记

步骤:
	取消隐式事务自动开启的功能
	1、开启事务
	2、编写事务需要的sql语句(1条或多条)
	insert into stuinfovalues(1,'john','男','ert@dd.com',12);
	insert into stuinfo values(1,'john','男','ert@dd.com',12);
	3、结束事务
  • savepoint 节点名;设置保存点

  • 事务的隔离级别:

事务的隔离级别 脏读 不可重复读 幻读
read uncommitted
read committed ×
repeatable read × ×
serializable × × ×

1.MySQL中默认第三个隔离级别 repeatable read

2.Oracle中默认第二个隔离级别 read commited

3.查看隔离级别

select @@tx_isolation;

4.设置隔离级别

set session|global trancate isolation level 隔离级别;

#演示事务的使用步骤

SHOW VARIABLES LIKE '%auto%'

#1、取消事务自动开启
SET autocommit=0;

#2、开启事务
START TRANSACTION;

#3、编写事务的sql语句

#将张三丰的钱-5000
UPDATE stuinfo SET balance=balance-5000 WHERE stuid = 1;

#将灭绝的钱+5000
UPDATE stuinfo SET balance=balance+5000 WHERE stuid = 2;

#4、结束事务
#回滚
ROLLBACK;
#提交
COMMIT;

SELECT * FROM stuinfo;

#演示事务对于delete和truncate的处理的区别
DELETE 支持回滚,TRUNCATE不支持回滚

SET autocommit=0;
START TRANSACTION;
DELETE FROM stuinfo;
ROLLBACK;

#演示savepoint的使用

SET autocommit=0;
START TRANSACTION;
DELETE FROM stuinfo WHERE id = 1;
SAVEPOINT a; #设置保存点
DELETE FROM stuinfo WHERE id = 2;
ROLLBACK TO a; #回滚到保存点
SELECT * FROM stuinfo;

9 视图

  • 含义:虚拟表,和普通表一样使用,是通过表动态生成的数据

  • 创建表与视图的区别

类型 创建语法的关键字 是否实际占用物理空间 使用
视图 create view 只是保存了sql逻辑 一般不能增删改
create table 保存了数据 增删改查
#一、创建视图
语法:
CREATE VIEW 视图
AS
查询语句;

USE myemployees;
#1.查询姓名中包含a字符的员工名、部门信息和工种信息
#①创建
CREATE VIEW myv1
AS
SELECT last_name,department_name,job_title
FROM employees e
JOIN departments d ON e.department_id = d.department_id
JOIN jobs j ON j.job_id = e.job_id;
 
#②使用
SELECT * FROM myv1 WHERE last_name LIKE '%a%';

#二、视图的修改
#方式一:
CREATE OR REPLACE VIEW 视图名
AS
查询语句;

#方式二:
ALTER VIEW 视图名
AS
查询语句;


#三、删除视图
语法:
DROP VIEW 视图名,视图名,...;

#四、查看视图
DESC myv3;
SHOW CREATE VIEW myv3;

#五、视图的更新
CREATE OR REPLACE VIEW myv1
AS
SELECT last_name,email
FROM employees;

SELECT * FROM myv1;

#1.插入
INSERT INTO myv1 VALUES('张飞''zf@qq.com');

#2.修改
UPDATE myv1 SET last_name = '张无忌' WHERE last_name = '张飞';

#3.删除
DELETE FROM myv1 WHERE last_name = '张无忌';
  • 具备以下特点的视图不允许更新

①包含以下关键字的sql语句:分组函数、distinct、group by、hanving、union或者union all
②常量视图
③select中包含子查询
④含有join
⑤from一个不能更新的视图
⑥where子句的子查询引用了from子句中的表