今天在群里看到一个比较有意思的问题,我也在测试库测试了一下,发现SQL 语法错误导致,下面我们来看看问题:
mysql> create table t2(id varchar(10),name varchar(10));
Query OK, 0 rows affected (0.08 sec)
mysql> insert into t2 values('1','test1');
Query OK, 1 row affected (0.01 sec)
mysql> select * From t2;
+------+-------+
| id | name |
+------+-------+
| 1 | test1 |
+------+-------+
1 row in set (0.01 sec)
mysql> update t2 set id='2' and name='test2' where id='1' and name='test1';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * From t2;
+------+-------+
| id | name |
+------+-------+
| 0 | test1 |
+------+-------+
1 row in set (0.00 sec)
改一下写法,你就明白是什么意思了
update t2 set id=('2' and name='test2') where id='1' and name='test1';
id=('2' and name='test2')变成了一个表达式,判断条件为真或者为假,这里为假,结果就是0所以id 就变成0 了
第二道题目是在杨建荣的笔记里面看到的,说的是 自增主键的问题,题目是
一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把MySQL重启,再Insert一条记录,这条记录的ID是18还是15.
答案是:
在MySQL 8.0之前:
1)如果是MyISAM表,则数据库重启后,ID值为18
2)如果是InnoDB表,则数据库重启后,ID值为15
在MySQL 8.0开始,
1)如果是MyISAM表,则数据库重启后,ID值为18
2)如果是InnoDB表,则数据库重启后,ID值为18