我有一些MySQL代码:
CREATE TABLE test_table (
id int(11) NOT NULL AUTO_INCREMENT,
count int(10) unsigned DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;
insert into test_table (count) values (1);
update test_table set count = IF( count -1 < 0, 0 , count -1 );
update test_table set count = IF( count -1 < 0, 0 , count -1 );
如果(count -1) < 0
,则应将计数设置为零。
我收到错误:
Error Code: 1264 Out of range value for column 'count' at row 1` instead.
这是因为count是unsigned int。如果我使用signed int就行了。
这是MySQL中的错误吗?我正在使用:mysql Ver 14.14 Distrib 5.1.46sp1, for Win32 (ia32)
答案 0 :(得分:5)
我认为你应该这样做:
UPDATE test_table
SET count = IF( count < 1, 0 , count -1 )
当count - 1
为零时,count
的值会下溢。
SELECT count, count - 1 FROM test_table; +-------+----------------------+ | count | count - 1 | +-------+----------------------+ | 0 | 18446744073709551615 | | 1 | 0 | | 2 | 1 | +-------+----------------------+
当我尝试你的查询时,它不起作用......但它不会像你看到的那样失败。
答案 1 :(得分:1)
如果count是无符号的,并且其值为零,则从中减去1会得到一个超出unsigned int范围的值。所以正确的错误信息并没有错误,我想