MyISAM 和 MEMORY 存储引擎支持表级锁定(table-level locking)
,InnoDB 存储引擎支持行级锁定(row-level locking)
,BDB 存储引擎支持页级锁定(page-level locking)
。
锁定语句
MySQL 的锁定语句主要有两个 Lock
和 unLock
,Lock Tables 可用于锁定当前线程的表,就跟 Java 语法中的 Lock 锁的用法是一样的,如果表锁定,意味着其他线程不能再操作表,直到锁定被释放为止。
========》lock table cxuan005 read;--------------》我们锁定了 cxuan005 的 read 锁
解锁语句
unlock tables;
事务控制
事务(Transaction)
是访问和更新数据库的基本执行单元,一个事务中可能会包含多个 SQL 语句,事务中的这些 SQL 语句要么都执行,要么都不执行,而 MySQL 它是一个关系型数据库,它自然也是支持事务的。事务同时也是区分关系型数据库和非关系型数据库的一个重要的方面。
在 MySQL 事务中,主要涉及的语法包含 SET AUTOCOMMIT、START TRANSACTION、COMMIT 和 ROLLBACK 等。
====》闭自动提交-----------------》set autocommit = 0;
注:
在 MySQL 中,存在一些特殊的命令,如果在事务中执行了这些命令,会马上强制执行 commit 提交事务;比如 DDL 语句(create table/drop table/alter/table)、lock tables 语句等等。
不过,常用的 select、insert、update 和 delete命令,都不会强制提交事务
手动提交
如果需要手动 commit 和 rollback 的话,就需要明确的事务控制语句
start transaction;
... # 一条或者多条语句
commit;
commit and chain
命令,这个命令会提交当前事务并且重新开启一个新的事务
start transaction; # 开启一个新的事务
insert into cxuan005(id,info) values (555,'cxuan005'); # 插入一条数据
commit and chain; # 提交当前事务并重新开启一个事务
rollback===》
start transaction;
delete from cxuan005 where id = 555;
rollback;
SQL 安全问题
SQL 注入
SQL 注入就是利用某些数据库的外部接口将用户数据插入到实际的 SQL 中,从而达到入侵数据库
的目的。
SQL Mode
SQL Mode 解决问题
SQL Mode 可以解决下面这几种问题
- 通过设置 SQL Mode,可以完成不同严格程度的数据校验,有效保障数据的准确性。
- 设置 SQL Mode 为
ANSI
模式,来保证大多数 SQL 符合标准的 SQL 语法,这样应用在不同数据库的迁移中,不需要对 SQL 进行较大的改变 - 数据在不同数据库的迁移中,通过改变 SQL Mode 能够更方便的进行迁移。