MySQL 非负 INT 列

标签 mysql

我想做以下查询:

UPDATE `users` SET balance = (balance - 10) WHERE id=1

但如果余额将变为负数,我希望返回一个错误。关于这是否可能的任何想法?

最佳答案

如果你这样做

UPDATE `users` SET balance = (balance - 10) WHERE id=1 and balance >=10

您应该能够检测到一行未被修改。

请注意,虽然另一个答案建议使用 unsigned int 列,但这可能行不通:

创建测试表

create table foo(val int unsigned default '0');
insert into foo(val) values(5);

现在我们尝试从测试行中减去 10:

update foo set val=val-10;
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

mysql> select * from foo;
+------------+
| val        |
+------------+
| 4294967295 |
+------------+

这是在 mysql 5.0.38 上

关于MySQL 非负 INT 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/420964/

相关文章:

mysql - 连接两列以查找重复项,然后选择最新日期

php - 如果 WHERE 子句为空则忽略条件

MySQL Proc 调用 - 设置奇怪的行为

php - 如何在查询中正确使用 CONCAT

mysql - 简单的插入查询不起作用

javascript - Jquery Ajax 向数据库中插入数据

mysql - 将事件记录列名称覆盖为大写

c# - 尝试使用 root 以外的用户访问 MySQL 数据库时,ASP.NET Web 应用程序抛出异常

mysql - 无法通过 '127.0.0.1' 连接到 Sequel Pro,但可以通过终端通过 'localhost' 连接

mysql - 为什么这 2 个 MySQL 查询返回不同的结果