MySQL 索引与事务 mysql索引(index) 索引快速入门 说起提高数据库性能,索引是最物美价廉的东西了。不用加内存,不用改程序,不用调sql,查询速度就可能提高百倍干倍。 没有建立索引的字段,查询起来依旧很慢 索引的原理
没有索引为什么会慢?因为全表扫描. 使用索引为什么会快?形成一个索引的数据结构,比如二叉树 索引的代价磁盘占用 对dml(update delete insert)语句的效率影响, 索引的类型
索引使用
查询索引(三种方式) show index(ex) from table_name;
show keys from table_name;
desc table_Name;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 CREATE TABLE t25( id INT , `name` VARCHAR (32 )); SHOW INDEXES FROM t25;CREATE UNIQUE INDEX id_index ON t25(id);CREATE INDEX id_index ON t25(id);ALTER TABLE t25 ADD INDEX id_index(id)CREATE TABLE t26( id INT , `name` VARCHAR (32 ));ALTER TABLE t26 ADD PRIMARY KEY(id)SELECT * FROM t26SELECT * FROM t25DROP INDEX id_index ON t25ALTER TABLE t26 DROP PRIMARY KEYSHOW INDEX FROM t25SHOW INDEXES FROM t25SHOW KEYS FROM t25DESC t25CREATE TABLE ORDER ( id INT PRIMARY KEY, `goods_name` VARCHAR (32 ), person VARCHAR (32 ), num INT ); ALTER TABLE ORDER ADD PRIMARY KEY(id) CREATE TABLE menu( id INT , `name` VARCHAR (32 ), 厨师 VARCHAR (32 ), 身份证 CHAR (18 ) UNIQUE , price DOUBLE ); CREATE UNIQUE INDEX 身份证 ON menu (身份证)SHOW INDEX FROM menuCREATE TABLE sportman( id INT PRIMARY KEY, `name` VARCHAR (32 ), hobby VARCHAR (32 )); CREATE INDEX name_index ON sportman(NAME) ALTER TABLE sportman ADD INDEX name_index(NAME)
小结:哪些列上适合使用索引
mysql事务
什么是事务 事务用于保证数据的一致性,它由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败。如:转账就要用事务来处理,用以保证数据的一致性。
事务和锁
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 CREATE TABLE t27( id INT , `name` VARCHAR (32 ));START TRANSACTIONSAVEPOINT aINSERT INTO t27 VALUES (100 ,'tom' );SELECT * FROM t27;SAVEPOINT bINSERT INTO t27 VALUES (200 ,'jack' );ROLLBACK TO bROLLBACK TO aROLLBACK COMMIT
回退事务 在介绍回退事务前,先介绍一下保存点(savepoint).保存点是事务中的点.用于取消部分事务,当结束事务时(commit),会自动的删除该事务所定义的所有保存点.当执行回退事务时,通过指定保存点可以回退到指定的点。
提交事务 使用commit语句可以提交事务.当执行了commit语句子后,会确认事务的变化、结金事除徨专野放锁数据生效。当使用commit语句结束事务子后,其它会话[其他连接]将可以查着到事务变化后的新数据[所有数据就正式生效.]
事务细节讨论
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 INSERT INTO t27 VALUES (300 ,'milan' ); SELECT * FROM t27START TRANSACTIONINSERT INTO t27 VALUES (400 ,'king' );INSERT INTO t27 VALUES (500 ,'scott' )ROLLBACK
mysql 事务隔离级别 事务隔离级别介绍 多个连接开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据时的准确性。 (通俗解释)如果不考虑隔离性,可能会引发如下问题: 查看事务隔离级别
事务隔离级别 概念:Mysql隔离级别定义了事务与事务之间的隔离程度。
读未提交(Read uncommited) √ √ √ 不加锁 读已提交(Read commited) × √ √ 不加锁 可重复读(Repeatable) × × √ 不加锁 可串行化(Serializable) × × × 加锁
说明:√可能出现 ×不会出现
设置事务隔离级别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 SELECT @@tx _isolation;SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDCREATE TABLE `account`( id INT , `name` VARCHAR (32 ), money INT ); SELECT @@tx _isolation;SELECT @@ global.tx_isplationSET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDSET GLOBAL TRANSACTION ISOLATION LEVEL [设置你想设置的级别]
左边的事务没有提交,但是右边可以看到左边添加的100用户信息,这就是脏读
左边的事务经过修改和添加,但是提交了,右边依然可以看到修改和添加的信息,这就是不可重复度和幻读,因为左边的提交已经直接影响到了右边的操作。
mysql 事务 ACID 事务的 acid 特性 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 一致性(Consistency) 事务必须使数据库从一个一致性状态变换到另外一个一致性状态 隔离性(lsolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。 持久性(Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响