我很少用負數工作(除個人理財),或許這就是爲什麼有在我這裏的知識差距...意外行爲INT NOT NULL DEFAULT -1
考慮以下,通過向響應提示由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);
對我來說,這違背了默認值的精神!?!?
你測試過哪個版本?無法使用http://sqlfiddle.com進行驗證,無論是5.5還是5.6。您的第一個插入語句對所有3個值都失敗。 – fancyPants
5.5.16,sql_mode ='',不是strict_all_tables。這不符合我對該手冊的解釋(http://dev.mysql.com/doc/refman/5.5/en/constraint-invalid-data.html) – Strawberry
所以阿齊茲和阿爾夫布拉沃,你們都對此表示滿意IS預期的行爲? – Strawberry