mysql dml锁ddl锁_MySQL之DDL、DML、读锁,写锁、显示锁、事务、隔离级别详解

本文深入探讨了MySQL中的DDL(如CREATE, ALTER, DROP等)和DML(INSERT, REPLACE, UPDATE, DELETE)操作,并详细介绍了读锁、写锁以及显式锁定(如LOCK TABLES, UNLOCK TABLES)。此外,还讨论了事务、隔离级别以及InnoDB存储引擎的行级锁,包括SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE。通过实例展示了事务的回滚、提交以及保存点操作。" 113196420,8738823,YOLOV5数据加载与增强详解,"['深度学习', '目标检测', 'YOLO', '数据预处理']
摘要由CSDN通过智能技术生成

MySQL之DDL、DML、读锁,写锁、显示锁、事务、隔离级别详解

mysql> help insert;

DDL:

DATABASE

TABLE

VIEW

DML:

SELECT

INSERT/REPLACE

UPDATE

DELETE

INSERT INTO:

第一种:

INSERT INTO tb_name [(col1, col2,...)] {VALUES|VALUE} (val1, val2,...)[,(val21,val22,...),...]

第二种:

INSERT INTO tb_name SET col1=val1, col2=val2, ...

第三种:

INSERT INTO tb_name SELECT clause

REPLACE的工作机制:与INSERT相同,除了在新插入的数据与表中的主键或惟一索引定义的数据相同会替换老的行;

UPDATE:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference

SET col_name1=val1 [, col_name2=val2] ...

[WHERE where_condition]

[ORDER BY ...]

[LIMIT row_count]

UPDATE通常情况下,必须要使用WHERE子句,或者使用LIMIT限制要修改的行数;

--safe-updates

DELETE:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name

[WHERE where_condition]

[ORDER BY ...]

[LIMIT row_count]

TRUNCATE tb_name

explain

MySQL锁:

执行操作时施加的锁模式

读锁:共享锁

写锁:独占锁,排它锁

锁粒度:

表锁:table lock

锁定了整张表

行锁:row lock

锁定了需要的行

粒度越小,开销越大,但并发性越好;

粒度越大,开销越小,但并发性越差;

锁的实现位置:

MySQL锁:可以使用显式锁

存储引擎锁:自动进行的(隐式锁);

显式锁(表级锁):

LOCK TABLES

UNLOCK TABLES

LOCK TABLES

tbl_name lock_type

[, tbl_name lock_type] ...

锁类型:READ|WRITE

【读锁】 以后备份时可以使用这个锁[root@pc0003 ~]# mysql -p

mysql> use hellodb;

Database changed

mysql> lock tables classes read;

Query OK, 0 rows affected (0.00 sec)

【再启动一个终端2 mysql】mysql> use hellodb;

Database changed

mysql> select * from classes;

+---------+----------------+----------+

| ClassID | Class          | NumOfStu |

+---------+----------------+----------+

|       1 | Shaolin Pai    |       10 |

|       2 | Emei Pai       |        7 |

|       3 | QingCheng Pai  |       11 |

|       4 | Wudang Pai     |       12 |

|       5 | Riyue Shenjiao |       31 |

|       6 | Lianshan Pai   |       27 |

|       7 | Ming Jiao      |       27 |

|       8 | Xiaoyao Pai    |       15 |

|       9 | Liangshan      |       22 |

+---------+----------------+----------+

9 rows in set (0.00 sec)

【尝试插入数据,被阻塞】mysql> insert into classes value (10,'TaoYuan',23);

【直到对方释放锁,终端2 mysql才能被执行】mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

【对方释放锁,终端2 mysql才能被执行看阻塞时间】mysql> insert into classes value (10,'TaoYuan',23);

Query OK, 1 row affected (2 min 13.29 sec)

【写锁,排他锁】mysql> lock tables classes write;

Query OK, 0 rows affected (0.00 sec)

【终端2 mysql不可读不可写】mysql> select * from classes;

【释放锁】mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

【终端2 返回数据】mysql> select * from classes;

+---------+----------------+----------+

| ClassID | Class          | NumOfStu |

+---------+----------------+----------+

|       1 | Shaolin Pai    |       10 |

|       2 | Emei Pai       |        7 |

|  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值