MySQL事务和隔离级别
2016-10-06 23:36
981 查看
广义查询:
delete:
insert into:
update:
insert into TB_NAME (COL1, COL2,...)values (VAL1,VAL2,...)[,(VAL1,VAL2,...),...]
字符型:单引号
数值型:不需要引号
日期时间型:不需要引号
空值:NULL,需要单引号
mysql> help insert
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
Or:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
Or:
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
insert into tutors (tname,gender,age) value ('tom','f',30);
insert into tutors set tname='tom', gender='f',age=30;
insert into tutors (tname.gender,age) select name,gender,age from students where age > 20;
查看表里的最后一个数据,先降序排序,然后只显示第一个
select * from tutors order by TID desc limit 1;
select last_insert_id(); 此函数为表的计数函数,即把表清空后再插入也是从之前的行数+1开始插入
replace 插入的时候判断数据是否存在,如果存在则不插入
mysql> help replace
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
Or:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
Or:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
SELECT ...
delete: mysql> help delete
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
truncate TB_NAME 清楚表里的数据并重置计数器
update:
mysql> help update
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Multiple-table syntax:
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
update TB_NAME set COL1=...,COL2=... where
连接管理器:
接受请求
创建线程
认证用户
建立安全连接
并发控制:
多版本并发控制:MVCC。通过快照和时间点来管理
锁:
读锁:共享锁
写锁:独占锁
mysql> help lock
Name: 'LOCK'
LOCK TABLES
tbl_name [[AS] alias] lock_type
[, tbl_name [[AS] alias] lock_type] ...
lock_type:
READ [LOCAL]
| [LOW_PRIORITY] WRITE
UNLOCK TABLES
lock tables TBNAME {read|write};
unlock tables 解锁锁
锁粒度:从大到小,mysql服务器仅支持表级锁,行锁需要由存储引擎完成:
表锁:
行锁:
页锁:
多事务同时执行:彼此之间互不影响的方式进行;
事务之间交互:
通过数据集
事务:
RDBMS:
ACID
Automicity:原子性,
Consistency:一致性,
Isolation隔离性,
事务调度:事务之间影响最小
MVCC:多版本并发控制
Durability:持久性,一旦事务成功完成,系统必须保证任何故障都不会引起事务表现出不一致性
1.事务提交之前就已经写出数据至持久性存储
2.结合事务日志完成:
事务日志:顺序IO
数据文件:随机IO
事务的状态:
活动的active
部分提交的: 最后一条语句执行后
失败的:
中止的:
提交的:
事务:并发执行
1。提高吞吐量和资源利用率
2。减少等待时间
事务调度
可恢复调度
无级联调度
MyISAM
Innodb
隔离性:
隔离级别:
READ UNCOMMITTED 读未提交
READ COMMITTED 读提交
REPATABLEREAD 可重读
SERIABLIZABLE 可串行
并发控制依赖的技术手段
锁
事件戳
多版本和快照隔离
饿死:
死锁:
mysql> show global variables like '%iso%'; 默认的隔离级别
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)
修改: set {session|global} var_name='';
mysql> set tx_isolation ='read-uncommitted';
mysql> show variables like '%iso%';
+---------------+------------------+
| Variable_name | Value |
+---------------+------------------+
| tx_isolation | READ-UNCOMMITTED |
+---------------+------------------+
select @@tx_isolation
set tx_isolation ='READ-UNCOMMITTED';
SQL,ODBC
START TANSACTION:启动
SQL
SQL
COMMIT:提交
ROLLBACK:回滚
mysql> start transaction; 启动事务
mysql> rollback;回滚事务
mysql> commit 提交事务
select @@autocommit; 查看是否开启自动提交1代表开启,开启后只要没手动系统事务就直接提交,无法撤回
set @@autocommit 0; 手动设置
savepoint NAME; 保存点
savepoint to NAME; 回滚到保存点
delete:
insert into:
update:
insert into TB_NAME (COL1, COL2,...)values (VAL1,VAL2,...)[,(VAL1,VAL2,...),...]
字符型:单引号
数值型:不需要引号
日期时间型:不需要引号
空值:NULL,需要单引号
mysql> help insert
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
Or:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
Or:
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]
insert into tutors (tname,gender,age) value ('tom','f',30);
insert into tutors set tname='tom', gender='f',age=30;
insert into tutors (tname.gender,age) select name,gender,age from students where age > 20;
查看表里的最后一个数据,先降序排序,然后只显示第一个
select * from tutors order by TID desc limit 1;
select last_insert_id(); 此函数为表的计数函数,即把表清空后再插入也是从之前的行数+1开始插入
replace 插入的时候判断数据是否存在,如果存在则不插入
mysql> help replace
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
Or:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, ...
Or:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
SELECT ...
delete: mysql> help delete
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
truncate TB_NAME 清楚表里的数据并重置计数器
update:
mysql> help update
UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Multiple-table syntax:
UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
update TB_NAME set COL1=...,COL2=... where
连接管理器:
接受请求
创建线程
认证用户
建立安全连接
并发控制:
多版本并发控制:MVCC。通过快照和时间点来管理
锁:
读锁:共享锁
写锁:独占锁
mysql> help lock
Name: 'LOCK'
LOCK TABLES
tbl_name [[AS] alias] lock_type
[, tbl_name [[AS] alias] lock_type] ...
lock_type:
READ [LOCAL]
| [LOW_PRIORITY] WRITE
UNLOCK TABLES
lock tables TBNAME {read|write};
unlock tables 解锁锁
锁粒度:从大到小,mysql服务器仅支持表级锁,行锁需要由存储引擎完成:
表锁:
行锁:
页锁:
多事务同时执行:彼此之间互不影响的方式进行;
事务之间交互:
通过数据集
事务:
RDBMS:
ACID
Automicity:原子性,
Consistency:一致性,
Isolation隔离性,
事务调度:事务之间影响最小
MVCC:多版本并发控制
Durability:持久性,一旦事务成功完成,系统必须保证任何故障都不会引起事务表现出不一致性
1.事务提交之前就已经写出数据至持久性存储
2.结合事务日志完成:
事务日志:顺序IO
数据文件:随机IO
事务的状态:
活动的active
部分提交的: 最后一条语句执行后
失败的:
中止的:
提交的:
事务:并发执行
1。提高吞吐量和资源利用率
2。减少等待时间
事务调度
可恢复调度
无级联调度
MyISAM
Innodb
隔离性:
隔离级别:
READ UNCOMMITTED 读未提交
READ COMMITTED 读提交
REPATABLEREAD 可重读
SERIABLIZABLE 可串行
并发控制依赖的技术手段
锁
事件戳
多版本和快照隔离
饿死:
死锁:
mysql> show global variables like '%iso%'; 默认的隔离级别
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)
修改: set {session|global} var_name='';
mysql> set tx_isolation ='read-uncommitted';
mysql> show variables like '%iso%';
+---------------+------------------+
| Variable_name | Value |
+---------------+------------------+
| tx_isolation | READ-UNCOMMITTED |
+---------------+------------------+
select @@tx_isolation
set tx_isolation ='READ-UNCOMMITTED';
SQL,ODBC
START TANSACTION:启动
SQL
SQL
COMMIT:提交
ROLLBACK:回滚
mysql> start transaction; 启动事务
mysql> rollback;回滚事务
mysql> commit 提交事务
select @@autocommit; 查看是否开启自动提交1代表开启,开启后只要没手动系统事务就直接提交,无法撤回
set @@autocommit 0; 手动设置
savepoint NAME; 保存点
savepoint to NAME; 回滚到保存点
相关文章推荐
- MySQL事务学习-->隔离级别
- [转]MySQL事务学习-->隔离级别
- MySQL之事务隔离级别--转载
- MySQL 事务的隔离级别与锁
- SQL事务的四种隔离级别和MySQL多版本并发控制
- 解读MySQL事务的隔离级别和日志登记模式选择技巧
- 关于MySQL的事务处理及隔离级别
- 事务的隔离级别及mysql对应操作
- MySQL事务隔离级别详解
- MySQL的事务处理及隔离级别
- 事务的隔离级别及mysql中相关的设置
- mysql事务的隔离级别
- Mysql事务的隔离级别
- 关于MySQL的事务处理及隔离级别
- mysql锁--事务及隔离级别--存储引擎
- 解读MySQL事务的隔离级别和日志登记模式选择技巧
- mysql读事务的隔离级别
- 测试你对MySQL事务与隔离级别的理解的一道题
- 关于MySQL的事务处理及隔离级别
- MySQL事务和隔离级别