请帮助我DEFAULT不组数据工作
CREATE TABLE RET (anim SET('dog','pig','voon') DEFAULT 'pig');
插入:
INSERT INTO RET VALUES('root') //empty string! Why? DEFAULT doesn't work!
感谢。
请帮助我DEFAULT不组数据工作
CREATE TABLE RET (anim SET('dog','pig','voon') DEFAULT 'pig');
插入:
INSERT INTO RET VALUES('root') //empty string! Why? DEFAULT doesn't work!
感谢。
DEFAULT
不会替换无效值,它只是定义了默认值,如果在插入没有指定的使用。
它的工作原理应该如此。 更改您的架构是这样,例如
CREATE TABLE RET (id int, anim SET('dog','pig','voon') DEFAULT 'pig');
然后省略anim
列在您的插入
INSERT INTO ret (id) VALUES(1);
或者使用DEFAULT
关键字
INSERT INTO ret (id, anim) VALUES(2, DEFAULT);
输出:
| ID | ANIM | ------------- | 1 | pig | | 2 | pig |
这里是SQLFiddle演示
+1到@ peterm的答案,但FWIW这里有一些其他的方法可以说明行为:
INSERT INTO ret (anim) VALUES (DEFAULT);
INSERT INTO ret() VALUES();
之所以插入,而不是一个空字符串值“根”的结果默认值是默认值在您指定值时未启动。
值'root'不是SET定义中的有效条目之一,但在默认行为下,MySQL“截断”无效值并插入一个空集。它在截断无效值时会生成警告,但不会阻止INSERT的发生。
您可以设置严格模式以禁用自动截断。这将警告转化为错误,并且INSERT将失败。
mysql> SET SQL_MODE=STRICT_ALL_TABLES;
mysql> INSERT INTO RET VALUES('root');
ERROR 1265 (01000): Data truncated for column 'anim' at row 1
好评:“MySQL”截断“无效值,并插入一个空集。”坦克为你提供帮助。 –
完美答案。谢谢 –
如果在插入中指定为NULL,该怎么办? NULL值是否被替换为默认值? – Jorrit
@Jorrit'null'是一个值,所以它将被用来代替默认值。小提琴在这里:http://sqlfiddle.com/#!9/ea8037/1 – Joe