0

MySQL 5.1 を使用する CentOS 6.4 で、次のコードを使用して 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    |       |
+-------+-------------+------+-----+---------+-------+

ではなく と表示DEFAULTされています。NULLNOT NULL

しかし、結果は同じです。

この後、挿入する場合

INSERT INTO test VALUES ()

挿入は成功しましたが、NULL 値を指定し、t1 の値が 0 であるため、そうすべきではありません。値が NULL であるため、挿入は失敗するはずです。

後続の挿入では、重複するキー句が原因でエラーが発生します。どこが間違っているのか教えてください。

Ubuntu 13.04 上の MySQL 5.5 を搭載した別のマシンでこれを試しました。

| 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つのフィールドがありますが、それらのデフォルト値を指定していません。(3 番目の列の出力 - 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 に答える