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

时间:2013-12-22 13:28:28

标签: 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)

1 个答案:

答案 0 :(得分:3)

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

您可能想要指定显式默认值

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

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