网站图片优化大小,网站建设广告平台推广,营销型企业网站的建设步骤,网站的汉化包怎么做存储引擎#xff1a; 数据库管理系统#xff08;DBMS#xff09;使用数据存储引擎进行创建、查询、更新和删除数据。 MySQL5.5之前默认的存储引擎是MyISAM#xff0c;5.5及之后版本默认的存储引擎是InnoDB。(my.ini中指定的) MyISAM#xff1a;不支持事务#xff0c;不支…存储引擎 数据库管理系统DBMS使用数据存储引擎进行创建、查询、更新和删除数据。 MySQL5.5之前默认的存储引擎是MyISAM5.5及之后版本默认的存储引擎是InnoDB。(my.ini中指定的) MyISAM不支持事务不支持外键InnoDB支持事务支持外键存储引擎是针对表来说的可以通过alter改变表的存储引擎InnoDB与MyISAM的最大区别是两点InnoDB支持事务、支持行级锁 事务 事务可以保证成批的SQL要么全部执行要么全部不执行。 MySQL中只有InnoDB存储引擎才支持事务。 MySQL中默认是自动提交事务的因此使用事务时要先禁止自动提交。 --禁止自动提交
set autocommit0
--开启自动提交
set autocommit1--开启事务(可以使用begin或者start transaction)
begin
--执行多个SQL语句
update account set money money-200 where id 1
update account set money money200 where id 2
--提交事务
commit--回滚事务
rollback事务的特性ACID
原子性Atomicity 事务是一个整体要么全部成功要么全部失败。一致性Consistency 事务之前和事务之后的状态都是“正确”的满足业务合理性隔离性Isolation 并发执行的两个事务之间相互隔离互不影响即使操作同一条数据也不应该互相影响持久性Durability 事务一旦被成功完成数据被永久存储不能回滚
事务的隔离级别越向下隔离级别越高
脏读 A事务读取到B事务没有提交的数据不可重复读 A事务提交之前读取的同一个数据值发生变化B事务提交导致幻读 A事务提交之前和提交之后同一个数据值发生变化A事务提交之前读到的数据值不会变化提交之后才能读到B事务提交修改的数据
事务隔离级别解释脏读不可重复读幻读读未提交read-uncommitted一个事务可以读取另一个事务未提交的数据是是是读已提交read-committedOracle默认一个事务要等另一个事务提交后才能读取数据否是是可重复读repeatable-readMySQL默认事务开启后不再允许修改操作但可以读取数据否否是串行化serializable各事务串行化顺序执行互不影响效率很低一般不用否否否
隔离级别的设置
-- 查看隔离级别
show variables like %isolation%;
-- 设置隔离级别
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed;
set session transaction isolation level repeatable read;
set session transaction isolation level serializable;锁
按数据操作粒度划分 表锁锁定整个表 行锁锁定当前操作行按数据操作类型划分 读锁共享锁多个读操作可以同时进行互不影响同一个表读锁可以加多个加了读锁后只能读自己和其他人均不能修改 写锁排他锁当前操作没完成前其他人既不能写也不能读同一个表写锁只能加一个
存储引擎表级锁行级锁MyISAM支持不支持InnoDB支持支持
加表锁 MyISAM存储引擎使用表锁。 在查询语句SELECT前自动给涉及的所有表加读锁。 在更新语句UPDATE、DELETE、INSERT前自动给涉及的表加写锁。 一般不需要使用lock table命令给MyISAM表显式加锁。
-- 显式加表级读锁共享锁
lock table table_name read;
-- 显式加表级写锁排他锁
lock table table_name write;
-- 解锁
unlock tables;加行锁 InnoDB默认使用行锁。 对于查询语句SELECT不会加任何锁。 对于更新语句UPDATE、DELETE、INSERT自动加排他锁其他事务不能再修改该行数据只有等当前事务commit后释放排他锁其他事务才能修改该行数据。
-- 显式加行级读锁共享锁
select * from table_name where ... lock in share mode;
-- 显式加行级写锁排他锁
select * from table_name where ... for update 日志
错误日志 记录MySQL发生错误的信息默认开启
-- 查看错误日志存放目录
show variables like log_error%;二进制日志 记录了所有的DDLData Definition Language语句和DMLData Manipulation Language语句可以用于灾难时的数据恢复。MySQL8.0默认开启低版本使用配置文件my.ini开启。
# 配置开启binlog日志日志的文件前缀为mysqlbin
log_bin mysqlbin
# 配置二进制日志的格式
binlog_format STATEMENT-- 查看是否开启binlog日志
show variables like log_bin;
-- 查看binlog日志格式
show variables like binlog_format;二进制日志的格式特点STATEMENT记录的都是SQL语句ROWMySQL8.0默认记录每一行数据的变更MIXED混合了STATEMENT和ROW
查询日志 记录了所有操作语句相比二进制日志多了查询语句默认不开启
# 配置开启查询日志0关闭1开启
general_log 1
# 配置日志的文件名
general_log_file file_name-- 查看是否开启查询日志
show variables like general_log;慢查询日志 记录执行时间超过参数long_query_time默认10s且扫描记录数不小于min_examined_row_limit默认0的所有SQL语句
# 配置开启慢查询日志0关闭1开启
slow_query_log 1
# 配置慢查询日志的文件名
slow_query_log_file slow_query.log
# 设置long_query_time时间
long_query_time 10