mysql update 更新列使用and 导致更新逻辑错误

今天在群里看到一个比较有意思的问题,我也在测试库测试了一下,发现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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值