MySQL命令大全 (5)

事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

持久性(Durability)

持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响

2.开启事务

# 关闭自动提交 set autocommit=0;   #开启事物(可选) start transaction;

 

3.结束事务

commit;提交事务   # 或者 rollback;回滚事务   # 或者 rollback to 回滚点名;回滚到指定的地方

 

4.并发事务

事务的并发问题是如何发生的?

多个事务 同时 操作 同一个数据库的相同数据时

并发问题都有哪些?

脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的

不可重复读: 对于两个事务T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了(在一个事物中不管读多少次,读取的数据应该都一样)

幻读: 对于两个事务T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行

如何解决并发问题

通过设置隔离级别来解决并发问题

 

5.事务隔离级别

隔离级别 脏读 不可重复读 幻读
read uncommitted:读未提交   ×   ×   ×  
read committed:读已提交     ×   ×  
repeatable read:可重复读       ×  
serializable:串行化        

 6.查看隔离级别

select @@tx_isolation;

 

7.设置隔离级别

# 设置当前 mySQL 连接的隔离级别: set transaction isolation level read committed;   # 设置数据库系统的全局的隔离级别: set global transaction isolation level read committed;

 

十四.视图

MySQL从5.0.1版本开始提供视图功能。一种虚拟存在的表,行和列的数据来自定义视图的查询中 使用的表,并且是在使用视图时动态生成的,只保存了sql逻辑,不保存查询结果

 

1.创建视图

create view 视图名 as 查询语句;

例1:创建视图emp_v2,要求查询部门的最高工资高于12000的部门信息

# 创建视图,查询每个部门的最高工资,筛选出高于12000的 DROP VIEW emp_v2; CREATE VIEW emp_v2 AS SELECT department_id, MAX( salary ) max_salary FROM employees GROUP BY department_id HAVING max_salary > 12000;

# 根据创建的视图连接departments表查询部门信息 SELECT d.*, ev2.max_salary FROM departments d JOIN emp_v2 ev2 ON d.department_id = ev2.department_id;

 

2.修改视图

create or replace view 视图名 as 查询语句;

 

3.删除视图

drop view 视图名,视图名,...

 

4.查看视图

DESC 视图名;

 

5.视图的更新

视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能更新的。

包含以下关键字的sql语句:分组函数、distinct、group by

having、union或者union all

常量视图

Select中包含子查询

join

from一个不能更新的视图

where子句的子查询引用了from子句中的表

 

十五.存储过程

什么是存储过程:事先经过编译并存储在数据库中的一段sql语句的集合。类似于java中的方法

1.创建语法

CREATE PROCEDURE 存储过程名(参数列表) BEGIN 存储过程体(一组合法的SQL语句) END

例1:插入到admin表中五条记录

USE girls; DELIMITER $ CREATE PROCEDURE myp1() BEGIN INSERT INTO admin(username,`password`) VALUES ('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000'); END $

 

2.调用语法

CALL 存储过程名(实参列表);

 

3.创建带IN模式参数的存储过程

例1:创建存储过程实现 根据女神名,查询对应的男神信息

DELIMITER $ CREATE PROCEDURE myp2(IN beautyName VARCHAR(20)) BEGIN SELECT bo.* FROM boys bo RIGHT JOIN beauty b ON bo.id = b.boyfriend_id WHERE b.name=beautyName; END $

CALL myp2('赵敏');

 

4.创建out模式参数的存储过程

例1:根据输入的女神名,返回对应的男神名

DELIMITER $ CREATE PROCEDURE myp4(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20)) BEGIN SELECT bo.boyname INTO boyname FROM boys bo RIGHT JOIN beauty b ON b.boyfriend_id = bo.id WHERE b.name=beautyName ; END $

# 调用 使用自定义变量接收 CALL myp4('赵敏',@name); SELECT @name;

 

5.创建带inout模式参数的存储过程

例1:传入a和b两个值,最终a和b都翻倍并返回

DROP PROCEDURE IF EXISTS myp5; DELIMITER $ CREATE PROCEDURE myp5(INOUT a INT,INOUT b INT) BEGIN SET a:=a*2; SET b:=b*2; END $

SET @m=10; SET @n=20; CALL myp5(@m,@n); SELECT @m,@n;

 

十六.存储函数

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydfzg.html