mysql - 意外行为 INT NOT NULL DEFAULT -1

标签 mysql

我很少与负数打交道(个人财务除外),所以也许这就是我的知识存在差距的原因......

考虑以下内容,由对 SO ( How to achieve default value if column value is NULL? ) 中另一个用户提出的问题的回答提示:

-- Mysql Version 5.5.16
-- sql_mode = ''

DROP TABLE prices;

CREATE TABLE prices (price_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,price INT SIGNED NOT NULL DEFAULT -1);

INSERT INTO prices (price) VALUES (' '),(''),(NULL);
INSERT INTO prices (price_id) VALUES (NULL);

SELECT * FROM prices;

Expected output:
+----------+-------+
| price_id | price |
+----------+-------+
|        1 |    -1 | 
|        2 |    -1 | 
|        3 |    -1 |
|        4 |    -1 |
+----------+-------+

Actual output:
+----------+-------+
| price_id | price |
+----------+-------+
|        1 |     0 |
|        2 |     0 |
|        3 |     0 |
|        4 |    -1 |
+----------+-------+

为什么?

中间答案:简而言之,如果您想确保插入默认值(当未设置 sql_mode 时),或者从 INSERT 中省略列 或者 显式插入默认值,即:INSERT INTO prices (price) VALUES(DEFAULT); 对我来说,这违背了默认值的精神!?!?

最佳答案

看起来像:

a.) 如果您为非空数字字段(非自动递增)提供 NULL 值,则默认值为零。

b.) 如果您不提供值(如最后一行),则使用给定的默认值 (-1)

http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

关于mysql - 意外行为 INT NOT NULL DEFAULT -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20702177/

相关文章:

python - 改进 Django 查询

mysql - 如何使用mysql缩小搜索结果范围

mysql - 使用复合主键的 RIGHT JOIN 不检索所有数据

php - MySQL - 如何插入可能为空的值

php - Preg_replace动态

mysql - 如何将 1 到 1000 之间的数字插入到我在过程中创建的表中?

php - 单一页面中的多语言大学html

php - 调用占线时 Asterisk AMI 上的 CDR 目标错误

php - 如何从 Laravel 中的第一个表访问第三个表

javascript - 无法发布表单 - ExpressJS