有人可以告诉我这方面的技术原因吗?
CREATE TABLE test (
id varchar(3) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO test VALUES ('0'), ('1'), ('2'), ('ab'), ('bb');
select * from test;
DELETE FROM test WHERE id=0;
Which Deletes 3 rows from table test.
答案 0 :(得分:6)
因为:
SELECT 0 = 'ab';
+----------+
| 0 = 'ab' |
+----------+
| 1 |
+----------+
要使用BINARY运算符删除确切的行,它将强制逐字节比较 -
DELETE FROM test WHERE id = BINARY 0;
答案 1 :(得分:5)
将数字与字符串进行比较时,会将它们作为浮点数进行比较。任何不以数字开头的字符串都会隐式转换为数字0。
答案 2 :(得分:0)
字符'0'和整数0之间存在差异。当你将Char与整数比较时,Char字符串(如果不是整数)返回false值(i,e)A 0因此使条件为真并删除你的表中的第一行,第四行和第五行......要删除你需要检查条件的特定行......
从id ='0'的测试中删除; (字符0不是整数0)
答案 3 :(得分:0)
请尝试比较相同类型的值,例如
DELETE FROM test WHERE id = CAST(0 AS VARCHAR(3));
答案 4 :(得分:0)
当我看到这个时,我首先感到困惑,但现在我明白了 当你在跑步时
select * from test;
DELETE FROM test WHERE id=0;
此查询将每一行比较为整数而不是字符串, 所以当MySQL来到ab& bb so MySQL将其作为0并删除它 如果你用1ab这样的任何数字启动它,那么MySQL将1ab作为1当你触发查询删除1而不是0时它将删除1ab
尝试
select * from test;
DELETE FROM test WHERE id='0';
此代码将行比较为字符串,因此当他得到精确的“0”时,MySQL将其删除。