无符号字段更新为最大值
Unsigned field updated to max value
我在执行这个简单的查询时遇到了问题:
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 )
这是股票的结构table:
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 声明不应该阻止这种行为吗??
您需要使用 incoming 值,因此请使用 values()
:
INSERT INTO stock( articles_id, date, in, out )
VALUES ( 106, '2017-08-24', 0, 4 )
ON DUPLICATE KEY UPDATE out = (CASE WHEN VALUES(out) - 4 >= 0
THEN VALUES(out) - 4
ELSE 0
END);
我在执行这个简单的查询时遇到了问题:
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 )
这是股票的结构table:
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 声明不应该阻止这种行为吗??
您需要使用 incoming 值,因此请使用 values()
:
INSERT INTO stock( articles_id, date, in, out )
VALUES ( 106, '2017-08-24', 0, 4 )
ON DUPLICATE KEY UPDATE out = (CASE WHEN VALUES(out) - 4 >= 0
THEN VALUES(out) - 4
ELSE 0
END);