在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本文实例讲述了MySql 知识点之事务、索引、锁原理与用法。分享给大家供大家参考,具体如下: 事务
事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎执行一组操作语句,那么久执行所有的操作,如果其中有任何一条崩溃或其他原因无法执行,所有语句将不会执行。也就是说事务内的语句,要么全部执行成功,要么全部执行失败。
索引
索引是存储引擎用户快速找到记录的一种数据结构,举例 SELECT userName FROM user WHERE userId = 1; 如果在userId列上加上索引,则MySQL将使用该索引找到userId的行,也就是说,MySQL先在索引上按值进行查找,然后返回所有包含该值的数据行。
锁在这里我们主要讨论下行级锁
引擎MyISAM,可以理解为锁整张表,可以同时读,不可以同时写。在锁定期间,其它进程无法对该表进行写操作,如果是写锁,则其它进程则不允许读。
引擎INNODB,单独一行记录加锁,可以同时读,不可同时写。行级锁开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
由于InnoDB预设是Row-Level Lock,所以只有[明确]的指定主键,MySQL才会执行Row lock,否则MySQL将会执行Table Lock 例1:(明确指定主键,并且有此记录,Row Lock) SELECT * FROM products WHERE id='3' FOR UPDATE; SELECT * FROM products WHERE id='3' and type=1 FOR UPDATE; 例2: (明确指定主键,若查无此记录,无lock) SELECT * FROM products WHERE id='-1' FOR UPDATE; 例3: (无主键,table lock) SELECT * FROM products WHERE name='Mouse' FOR UPDATE; 例4: (主键不明确,table lock) SELECT * FROM products WHERE id<>'3' FOR UPDATE; 例5: (主键不明确,table lock) SELECT * FROM products WHERE id LIKE '3' FOR UPDATE; 注1: FOR UPDATE仅适用于InnoDB,且必须在交易区块(BEGIN/COMMIT)中才能生效。 更多关于MySQL相关内容感兴趣的读者可查看本站专题:《MySQL索引操作技巧汇总》、《MySQL常用函数大汇总》、《MySQL日志操作技巧大全》、《MySQL事务操作技巧汇总》、《MySQL存储过程技巧大全》及《MySQL数据库锁相关技巧汇总》 希望本文所述对大家MySQL数据库计有所帮助。 |
请发表评论