一.存储引擎

针对不同的数据应该有对应的不同的处理机制来存储,存储引擎就是不同的处理机制

1.Mysql主要的存储引擎

  1. Innodb:
    Mysql5.5及之后默认的存储引擎,支持事务,行锁,外键
    优点:
    存储数据更加安全,但比Myisam慢。
  2. Myisam:
    Mysql5.5之前默认存储引擎。
    优点:速度比Innodb快。
  3. Memory:
    内存引擎,数据全部存储到内存中,断电数据丢失
  4. 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';

修改后重新进入客户端生效
注:一旦服务器重启,仍然不是严格模式