0

我在 CentOS 6.4 和 MySQL 5.1 上使用以下代码在 MySQL 中创建了一个表

CREATE TABLE test (
  t1 int(10) NOT NULL,
  t2 varchar(12) NOT NULL,
  PRIMARY KEY (t1),
  UNIQUE KEY t2 (t2)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

但是在查询成功执行之后。的输出desc test

+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| t1    | int(10)     | NO   | PRI | NULL    |       |
| t2    | varchar(12) | NO   | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+

它显示DEFAULTNULL而不是NOT NULL.

但结果是一样的。

在此之后如果给出一个插入

INSERT INTO test VALUES ()

插入是成功的,但它不应该是因为我给出了 NULL 值并且 t1 有 0 作为值。插入应该失败,因为该值为 NULL。

由于重复键子句,后续插入会产生错误。请告诉我哪里出错了。

我在另一台机器上用 MySQL 5.5 在 Ubuntu 13.04 上试过这个。

| Variable_name           | Value                   |
+-------------------------+-------------------------+
| innodb_version          | 5.5.32                  |
| protocol_version        | 10                      |
| slave_type_conversions  |                         |
| version                 | 5.5.32-0ubuntu0.13.04.1 |
| version_comment         | (Ubuntu)                |
| version_compile_machine | x86_64                  |
| version_compile_os      | debian-linux-gnu        |
+-------------------------+-------------------------+
4

1 回答 1

0

你已经写了,你的表有 2 个不可为空的字段,但你没有为它们指定默认值。(在你的第三列输出 - NULL - 你读 NO)

我已经用默认值重写了你的脚本

CREATE TABLE test (
    t1 int(10) NOT NULL DEFAULT 0,
    t2 varchar(12) NOT NULL DEFAULT '',
    PRIMARY KEY (t1),
    UNIQUE KEY t2 (t2)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
于 2013-08-26T12:33:53.280 回答