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子句中的表