Maison  >  Article  >  base de données  >  Cours MySQL 4 : Déclaration de contrôle des transactions TCL

Cours MySQL 4 : Déclaration de contrôle des transactions TCL

coldplay.xixi
coldplay.xixiavant
2021-02-25 09:19:451963parcourir

Cours MySQL 4 : Déclaration de contrôle des transactions TCL

Recommandation d'apprentissage gratuite : Tutoriel vidéo MySQL

Répertoire d'articles

  • 1. Introduction et utilisation des transactions
  • 2. Problèmes et solutions de concurrence des transactions
  • 3. Introduction et utilisation des transactions

Vous pouvez visualiser les moteurs de stockage pris en charge par MySQL via

, parmi lesquels prend en charge les transactions, tandis que ,

, etc. ne prennent pas en charge transactions.

show engines;Transaction : Une ou un groupe d'instructions SQL forment une unité SQL, cette unité d'exécution innodb. myisammemoryLes transactions ont

quatre attributs

Atomicité La transaction est une unité divisée non transactionnelle de work
要么全部都执行,要么全部都不执行Cohérence

Les transactions doivent faire passer la base de données d'un état de cohérence à un autre état de cohérenceACID

Isolement
原子性(Atomicity) 事务是一个不可分割的工作单位
一致性(Consistency) 事务必须使数据库从一个一致性状态变换到另一个一致性状态
隔离性(Isolation) 事务的执行不能被其他事务干扰,并发执行的各个事务之间不能互相干扰
持久性(Durability) 事务一旦被提交,对数据库中数据的改变就是永久性的

L'exécution d'une transaction ne peut être interférée par d'autres transactions, et les transactions exécutées simultanément ne peuvent pas interférer les unes avec les autres

Durabilité (Durabilité)

Une fois la transaction terminée validées, les modifications apportées aux données dans la base de données sont permanentes

Transaction implicite

 : les transactions n'ont pas de début ni de fin évidents marques, telles que les instructions d'insertion, de suppression et de mise à jour.

Transaction explicite : La transaction présente des marques d'ouverture et de fermeture évidentes. La condition préalable à l'utilisation est que la fonction de validation automatique doit d'abord être désactivée.

Une fois l'instruction DELETE annulée, elle peut toujours être restaurée ; une fois l'instruction TRUNCATE annulée, elle ne peut pas être restaurée.

【演示事务的使用步骤 】DROP TABLE IF EXISTS account;CREATE TABLE account(
	id INT PRIMARY KEY AUTO_INCREMENT,
	username VARCHAR(20),
	balance DOUBLE);INSERT INTO account(username,balance)VALUES('张无忌',1000),('赵敏',1000);# 第一步:关闭自动提交SET autocommit=0;START TRANSACTION;# 可以省略# 第二步:编写一组事务UPDATE account SET balance=balance+500 WHERE username='张无忌';UPDATE account SET balance=balance-500 WHERE username='赵敏';# 第三步:结束事务#commit;# 提交ROLLBACK; # 回滚SELECT * FROM account;【演示savepoint的使用】SET autocommit=0;START TRANSACTION;DELETE FROM account WHERE id=1;SAVEPOINT a;# 设置保存点DELETE FROM account WHERE id=2;ROLLBACK TO a; # 回滚到保存点

2. Problèmes et solutions de concurrence des transactions 脏读更新但没有提交Pour plusieurs transactions exécutées en même temps, lorsque ces transactions accèdent aux mêmes données dans la base de données, si aucune étape nécessaire sont prises Le mécanisme d'isolement entraînera divers problèmes de concurrence.

不可重复读 : Une transaction lit les données d'autres choses .

幻读插入但没有提交 : Une transaction est lue plusieurs fois et les résultats sont différents.

 : Une transaction lit les données d'autres transactions

.

@@tx_isolation

La solution aux problèmes de concurrence des transactions est d'éviter les problèmes de concurrence en définissant le niveau d'isolement des transactions. select @@tx_isolation;

事务的隔离级别 脏读 不可重复读 幻读
read uncommitted 读未提交 未解决 未解决 未解决
read committed 读已提交(Oracle默认) 解决√ 未解决 未解决
repeatable read 可重复度(Mysql默认) 解决√ 解决√ 未解决
serializable 串行化 解决√ 解决√ 解决√
Chaque fois que vous démarrez un programme MySQL, vous obtiendrez une connexion à la base de données distincte. Chaque connexion à la base de données a une variable globale

, indiquant le niveau d'isolation actuel des transactions. read committedAfficher le niveau d'isolement actuel :

sérialisable sérialisable
Niveau d'isolement de la transaction Lecture sale th> Lecture non répétable Lecture fantôme
lecture non validée lecture non validéeglobalNon résolu Non résolu Non résolu
lecture validée lecture validée (Oracle Default) Résolu√ Non résolu Non résolu

répétabilité de lecture répétable (Mysql par défaut)

Résolu√ Résolu√ Non résolu
Résolu√ Résolu√ Résolu√

Définir l'isolation niveau de la connexion mysql actuelle :

définir le niveau d'isolement des transactions

;

    Définir le niveau d'isolement global du système de base de données :
  • définir
  • le niveau d'isolement des transactions en lecture validée ;
视图和表的对比 创建语法的关键字 占用的物理空间 使用
视图 create view 只是保存了sql逻辑 可以增删改查,但一般只支持查询
create table 保存了数据 支持增删改查
3. VueLe sens de vue : une nouvelle fonctionnalité apparue après la version mysql5.1, une table virtuelle, Les données des lignes et des colonnes proviennent de la table utilisés dans la requête de la vue personnalisée et sont générés dynamiquement lors de l'utilisation de la vue. Seule la logique SQL est enregistrée et les résultats de la requête ne sont pas enregistrés. Scénarios d'application : Les mêmes résultats de requête sont utilisés à plusieurs endroits. L'instruction SQL utilisée dans ce résultat de requête est relativement complexe.

视图创建语法:

create view 视图名
as(查询语句);

视图修改语法:
方式一:
create or replace view 视图名
as (新的查询语句);

方式二:
alter view 视图名
as(新的查询语句);’

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

视图的更新:

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

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

视图的优点:

  • 重用sql语句。
  • 简化复杂的sql操作,不必知道查询细节。
  • 保护数据,提供安全性。
【视图的创建】# 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%';# 2.查询各部门的平均工资级别CREATE VIEW myv2 # 各部门平均工资和部门idAS(
	SELECT AVG(Salary) ag,department_id	FROM employees	GROUP BY department_id);SELECT myv2.ag,grade_levelFROM myv2JOIN job_grades jON myv2.ag BETWEEN j.lowest_sal AND j.highest_sal;# 3.查询平均工资最低的部门id和平均工资SELECT * FROM myv2 ORDER BY ag LIMIT 1;# 4.查询平均工资最低的部门名和工资CREATE VIEW myv3 
AS(
	SELECT * FROM myv2 ORDER BY ag LIMIT 1);SELECT department_name,agFROM departmentsJOIN myv3ON myv3.department_id=departments.department_id;------------------------------------------------------------------------------------------【视图的修改】# 方式一:CREATE OR REPLACE VIEW myv3AS(
	SELECT AVG(Salary),job_id	FROM employees	GROUP BY job_id);# 方式二:ALTER VIEW myv3AS(SELECT * FROM employees);SELECT * FROM myv3;------------------------------------------------------------------------------------------【视图的删除】DESC myv1;# 查看视图SHOW CREATE VIEW myv1;# 查看视图DROP VIEW myv1,myv2,myv3; # 删除视图------------------------------------------------------------------------------------------【视图的更新】CREATE OR REPLACE VIEW myv4AS(
	SELECT Last_name,email	FROM employees);# 1.插入INSERT INTO myv4 VALUES('花花','huahua@163.com');SELECT * FROM myv4;SELECT * FROM employees;# 2.修改UPDATE myv4 SET Last_name='Hudie' WHERE Last_name='花花';# 3.删除DELETE FROM myv4 WHERE Last_name='Hudie';

学习了MySQL的视图,尝试完成下列习题
Cours MySQL 4 : Déclaration de contrôle des transactions TCL
答案:
一、
CREATE OR REPLACE VIEW emp_v1
AS(
SELECT Last_name,Salary,email
FROM employees
WHERE phone_number LIKE ‘011%’
);
SELECT * FROM emp_v1;
二、
ALTER VIEW emp_v1
AS(
SELECT Last_name,Salary,email
FROM employees
WHERE phone_number LIKE ‘011%’ AND email LIKE ‘%e%’
);
三、
CREATE OR REPLACE VIEW emp_v2 # 部门最高工资高于12000的部门id、部门最高工资
AS(
SELECT MAX(Salary) mx,department_id
FROM employees
GROUP BY department_id
HAVING MAX(Salary)>12000
);
SELECT d.*,m.mx
FROM departments d
JOIN emp_v2 m
ON m.department_id=d.department_id;
四、
CREATE TABLE Book(
bid INT PRIMARY KEY,
bname VARCHAR(20) UNIQUE NOT NULL,
price FLOAT DEFAULT 10,
btypeId INT,
FOREIGN KEY(byteId) REFERENCES bookType(id)
);
五、
SET autocommit=0;
INSERT INTO book(bid,bname,price.btypeId) VALUES(1,‘大败局’,100,1);
COMMIT;
六、
CREATE VIEW myv1
AS(
SELECT bname,NAME
FROM book b
JOIN bookType t
ON b.btypeid=t.id
WHERE price>100
);
七、
CREATE OR REPLACE VIEW myv1(
SELECT bname,price
FROM book
WHERE price BETWEEN 90 AND 120
);
八、
DROP VIEW myv1;

更多相关免费学习推荐:mysql教程(视频)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer