我发现了Mysql的一个BUG大家注意
update requisition set layer=1 and block=1 and number='01'
无意中写了一个这样的SQL语句,竟然执行了。
不知道这个是什么意思 ,如果有谁知道的,告诉我一下。
layer、block都是数值型 的,在phpmyadmin中说影响到列数了。再次用同样的命令的时候,影响的列数是0,就是没有更新的,但开始的确是影响了列数,但我还没有找出到底是改了我什么东西。受不了 了。呵呵。
不过insert into table set fields1='',fields2=''的形式我试过是可以使用的。你们还遇到过其它什么SQL执行方面的问题吗?
问题点数:100、回复次数:5Top
1 楼shuixin13(犬犬(心帆))回复于 2004-12-01 12:23:11 得分 50
update requisition set layer=1 and block=1 and number='01'
它等价于
update requisition set layer = (1 and block=1 and number='01')
更新完成 layer 将会被更新为 0 或 1
INSERT [INTO] tbl_name
SET col_name=(expression | DEFAULT), ...
这个句法在 MySQL 3.22.10 及以后的版本中得到支持。
Top
2 楼ropriest(馆主)回复于 2004-12-01 12:27:48 得分 10
一个正常的update语句阿,更新完以后再执行就没有更新数据了,所以影响的列为0的Top
3 楼shuixin13(犬犬(心帆))回复于 2004-12-01 12:29:19 得分 10
呵呵.
忘了说.
为什么第一次执行时有影响的行数.
而第二次执行时.没有受影响的记录行了
这是因为.
第一次执行时.
产生了记录更新.
所以在 PHP 返回受影响的记录数,
而第二次执行时,
由于更新值与原值是一样的,
所以 MySQL 就把这笔更新忽略了.
所以返回受影响的记录数将为 0
在 mysql.exe 字符客户端里执行可能会有更友好的显示结果
示例如下:
mysql> use test;
Database changed
mysql> update `t` set `qty` = 1 and `price` =1;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 3 Changed: 0 Warnings: 0
有看到 Rows matched 这一个提示信息了吧.
说明符合更新条件的记录数是 3, 而实际受影响而更新的记录数为 0
Top
4 楼classjava(原始野人)回复于 2004-12-01 20:52:04 得分 10
^_^,学习Top
5 楼freeheart1977(逍遥的心)回复于 2004-12-01 21:00:11 得分 20
汗,正常的UPDATE而已Top




