【发布时间】:2023-03-22 15:03:01
【问题描述】:
我在使这个简单的查询工作时遇到了问题:
INSERT INTO stock
( articles_id, date, in, out )
VALUES
( 106, '2017-08-24', 0, 4 )
ON DUPLICATE KEY UPDATE out = IF( out - 4 >= 0, out - 4, 0 )
这是股票表的结构:
CREATE TABLE IF NOT EXISTS `stock` (
`articles_id` mediumint(8) unsigned NOT NULL,
`date` date NOT NULL,
`in` mediumint(8) unsigned NOT NULL COMMENT 'new units in date',
`out` mediumint(8) unsigned NOT NULL COMMENT 'no. of units sold in date'
PRIMARY KEY (`articles_id`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
查询的记录已经存在,并且有这些值:
- articles_id: 106
- 日期:2017-08-24
- 在:0
- 出局:2
查询运行后,out的值为16777215,我猜是因为这个字段是unsigned的(我想要那样),如果我减去一个比原始值更大的值,它就会从最大值开始倒计时。
但是,我的 IF 语句不应该阻止这种行为吗?
【问题讨论】: