作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
假设我有这个:
ALTER TABLE asdf ADD field ENUM('Y', 'N') DEFAULT 'N';
是否必须在末尾加上 NOT NULL,因为它只能是 Y 和 N?
EDT:根据评论,如果我知道软件总是将其设置为“N”或“Y”并且是硬编码的,那么是否可以将其关闭,或者它仍然可能以某种方式变为 null。
最佳答案
如果您没有在列定义中指定 NOT NULL
,MySQL 将允许该值为 NULL。
这是一个快速测试:
mysql> create table test (id serial, field ENUM('Y','N') DEFAULT 'N');
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO test (field) VALUES ('Y');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO test (field) VALUES ('N');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO test () VALUES ();
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO test (field) VALUES (NULL);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO test (field) VALUES ('Invalid');
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> show warnings;
+---------+------+--------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------+
| Warning | 1265 | Data truncated for column 'field' at row 1 |
+---------+------+--------------------------------------------+
1 row in set (0.00 sec)
mysql> select * from test;
+----+-------+
| id | field |
+----+-------+
| 1 | Y |
| 2 | N |
| 3 | N |
| 4 | NULL |
| 5 | |
+----+-------+
5 rows in set (0.00 sec)
所以 MySQL 确实尊重默认值,但也允许 NULL。 (有趣的是,它会截断无效值并允许空白字符串,但这是一个不同的问题)
关于mysql - MySQL 中的枚举是否需要为 NOT NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2058954/
我是一名优秀的程序员,十分优秀!