南京网站开发选南京乐识赞,第一ppt免费模板网,android开发工具有哪些,php网站开发毕业设计事务的四大特性
#xff08;1#xff09;原子性#xff1a;事务执行的最小单位#xff0c;不可被分割#xff0c;事务的原子性保证事务中的一连串动作要么都执行#xff0c;要么都不执行。 #xff08;2#xff09;一致性#xff1a;执行事务前后的数据保持一致…事务的四大特性
1原子性事务执行的最小单位不可被分割事务的原子性保证事务中的一连串动作要么都执行要么都不执行。 2一致性执行事务前后的数据保持一致多个事务对同一个数据的读取结果是一样的。 3隔离性并发访问数据库时一个事务不会被其他事务所干扰各个并发事务之间是独立的。 4持久性一个事务提交之后它对数据库的改变是持久的即使数据库发生故障也不会有任何影响。
什么是脏读、幻读、不可重复读
脏读某个事务已经更新了一份数据另一个事务在此期间读取了这个数据由于某些原因前一个事务执行了回滚操作则此时后一个事务读取的数据是不正确的。 不可重复读同一个事务两次查询之间数据不一致这可能是两次查询之中插入了一个事务更新了原有的数据。 幻读同一个事务两次查询到的数据数目不一致两次查询间有另一个事务插入或者删除了几条数据。
数据库的四种隔离级别
读取未提交最低的隔离级别允许读取尚未提交的数据变更会导致脏读读取到回滚数据、不可重复读两次读取间有更新、幻读两次读取间有新增或者删除。 读取已提交允许读取并发事务已经提交的数据可以防止脏读。 可重复读对同一字段的多次读取结果都是一致的除非数据是被本身事务所修改可以阻止脏读和不可重复读。 可串行化最高的隔离级别所有事务依次执行这样事务之间完全不会被干扰。
隔离级别和锁的关系
1在读未提交的级别下读取数据不需要加共享锁。 2在读已提交的级别下读取数据需要增加共享锁但会在语句执行完后释放共享锁。 3在重复读的隔离级别下读操作需要加共享锁但在事务提交不会释放共享锁也就是必须等待事务执行完毕后才可以释放共享锁。 4在序列化的级别下该级别锁住整个表的数据并且一直持有锁知道事务完成。
从锁的类别上区分MySql都有哪些锁
共享锁又叫做读锁当用户需要进行数据的读取时对数据加上共享锁共享锁可以同时加上多个。 排他锁又叫做写锁当用户需要进行数据的写入时对数据加上排他锁排他锁只可以加一个它和其他的排他锁、共享锁都互斥。
SQL约束有哪几种
Not Null用于控制字段的内容一定不能为空(NULL) UNIQUE控制字段不能重复一个表允许有多个UNIQUE约束 PRIMARY KEY用于控制字段不能重复不能为空且一个表中只能有一个 FOREIGN KEY用于预防破坏表之间的连接的动作也能防止非法数据插入外键列因为它必须是它指向的那个表中的值。
varchar和char的区别
charchar表示长字符串长度是固定的如果插入数据的长度小于char的固定长度时则会用空格填充因为长度固定所以char的存取速度比varchar要快很多甚至可以快50%但是因为其长度固定所以会占据很多多余的空间是空间换时间的做法。 varchar表示可变长字符串长度是可变的插入的数据多长就按照多长来存储存取方面比char慢因为长度不确定但因此不占用多余空间是时间换空间的做法。
FLOAT和DOUBLE的区别是什么
Float类型数据最多存储8位十进制数并且在内存中占有4字节。 Double类型数据最多存储18位十进制数并且在内存中占8字节。
drop、delete和truncate
delete可回滚删除后表结构还在可以删除表的全部或者一部分数据删除速度慢需要逐行删除。 trancate不可回滚表结构还在删除表中的所有数据删除速度快 drop不可回滚从数据库中删除表所有的数据行索引和权限也会被删除删除速度快。
UNION与UNIONALL的区别
如果使用UNION ALL不会合并重复的记录行 UNION效率高于UNION ALL
SQL的生命周期
1应用服务器与数据库服务器建立一个连接 2数据库进程拿到请求sql 3解析并生成执行计划执行 4读取数据到内存中并且进行逻辑处理 5经过步骤一的连接发送结果到客户端 6关掉连接释放资源
优化查询过程中的数据访问
访问数据太多导致查询性能下降确定应用程序是否在检索大量超过需要的数据可能是太多行或者列确认MySQL服务器是否在分析大量不必要的数据行避免犯如下SQL语句错误 1查询不需要的数据解决办法使用limit解决 2多表关联返回全部列解决办法指定列名 3总是返回全部列解决办法避免使用select * 重复查询相同的数据。解决办法可以缓存数据下次直接读取缓存。 4是否存在扫描额外的记录解决办法使用explain进行分析如果发现查询需要扫描大量的数据但只返回少数的行可以通过如下技巧去优化 使用索引覆盖扫描把所有的列都放到索引中这样存储引擎不需要回表获取对应行就可以返回结果。
某个表有近千万数据CRUD比较慢如何优化
1限定数据的范围务必禁止不带任何限制数据范围条件的查询语句。 比如在查用户订单历史的时候可以控制在一个月的范围内。 2读/写分离经典的数据库拆分方案主库负责写从库负责读。 3缓存使用MySQL的缓存另外对重量级、更新少的数据可以考虑使用应用级别的缓存。