一.存储引擎
针对不同的数据应该有对应的不同的处理机制来存储,存储引擎就是不同的处理机制。
1.Mysql主要的存储引擎
- Innodb:
Mysql5.5及之后默认的存储引擎,支持事务,行锁,外键。
优点:
存储数据更加安全,但比Myisam慢。 - Myisam:
Mysql5.5之前默认存储引擎。
优点:速度比Innodb快。 - Memory:
内存引擎,数据全部存储到内存中,断电数据丢失。 - Black:
无论存储什么数据,都立刻消失,像黑洞一样。
2.四大存储引擎的异同点
create table t1(id int) engine = innodb;
- 产生两个文件:
t1.frm 表结构
t1.ibd 表数据
create table t2(id int) engine = myisam;
- 产生三个文件:
t2.frm 表结构
t2.myd 表数据
t2.myi 索引(index) 帮助快速查询数据。
create table t3(id int) engine = memory;
- 产生一个文件:
t3.frm 表结构
create table t4(id int) engine = blackhole;
- 产生一个文件:
t4.frm 表结构
3.查看所有的存储引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
二.严格模式
1.何为严格模式
严格模式简单来说就是MySQL自身对数据进行严格的校验(格式、长度、类型等),比如一个整型字段我们写入一个字符串类型的数据,在非严格模式下MySQL不会报错,同样的如果定义了char或varchar类型的字段,当写入或更新的数据超过了定义的长度也不会报错而是会自动截取,Mysql5.6默认没有开启严格模式,Mysql5.7及以上默认开启了严格模式。
2.严格模式到底开不开?
- 使用数据库的准则:
尽量少地让数据库干活,不要给数据库带来额外的压力,所以我认为应该开启严格模式。
3.查看严格模式
mysql> show variables like '%mode';
+----------------------------+------------------------+
| Variable_name | Value |
+----------------------------+------------------------+
| binlogging_impossible_mode | IGNORE_ERROR |
| block_encryption_mode | aes-128-ecb |
| gtid_mode | OFF |
| innodb_autoinc_lock_mode | 1 |
| innodb_strict_mode | OFF |
| pseudo_slave_mode | OFF |
| slave_exec_mode | STRICT |
| sql_mode | NO_ENGINE_SUBSTITUTION |
+----------------------------+------------------------+
8 rows in set (0.00 sec)
sql_mode严格模式,默认未开启。
4.修改严格模式
set global sql_mode = 'STRICT_TRANS_TABLES';
修改后重新进入客户端生效
注:一旦服务器重启,仍然不是严格模式。