mysql - 为什么 "NOT NULL"在 MySQL 客户端中不起作用

标签 mysql linux dml

我使用的是5.5版本的MySQL客户端。今天我尝试使用“NOT NULL”来设置属性,但在测试过程中发现它不起作用。有人帮忙解释一下这个吗?

    //Create Table
    CREATE TABLE state(
           state_cd  char(2) NOT NULL,
           state_name varchar(30)
           );

    //Insert an "Invalid" Record
    INSERT INTO state(state_name)
           values('Massachusetts');

    //DB Operation succeeds!!!
    Query OK, 1 row affected, 1 warning (0.09 sec)

    //Check the table
    mysql> select * from state;
    +----------+---------------+
    | state_cd | state_name    |
    +----------+---------------+
    |          | Massachusetts |
    +----------+---------------+
    1 row in set (0.00 sec)


    mysql> describe state;
    +------------+-------------+------+-----+---------+-------+
    | Field      | Type        | Null | Key | Default | Extra |
    +------------+-------------+------+-----+---------+-------+
    | state_cd   | char(2)     | NO   |     | NULL    |       |
    | state_name | varchar(30) | YES  |     | NULL    |       |
    +------------+-------------+------+-----+---------+-------+
    2 rows in set (0.00 sec)

最佳答案

如果您尝试将 NOT NULL 列插入或更新为 NULL,MySQL 会将其设置为默认值(在这种情况下,事实上的默认值是空的)字符串)。 MySQL 还会发出一条警告,您可以通过 SHOW WARNINGS 看到该警告,该警告应该说明有关不正确的列值的信息。它不会阻止您尝试插入空值,但它不会接受该值。

您可能想要指定一个明确的默认值

state_cd char(2) NOT NULL DEFAULT '--'

如果您希望查询在尝试时失败,您可以在应用程序级别处理此问题,或者查看 MySQL server modes ,您可以将其设置为TRADITIONAL,这样在尝试添加不正确的值时INSERT/UPDATE将会失败。

关于mysql - 为什么 "NOT NULL"在 MySQL 客户端中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20729951/

相关文章:

php - 忽略值 $request == null

mysql - 将 Mysql Location 条目拆分为 2 列?

linux - 监控服务器上的带宽

c - 有没有办法测试 fd_set 是否为 "nonzero"?

mysql - 如何更新实际上在其父级中具有唯一 id 重复项的外键字段?

mysql - 索引和删除语句

sql - Oracle - Oracle 如何管理特定于事务的 DML 语句

MySQL : Optimize performance of search on varchar column

MySQL - 查找制表位

linux - 在 bash 中复制整个驱动器上的所有照片?