create table MYTABLE
{
MY_DATE int NOT NULL AUTO_INCREMENT,
NAME varchar(255) NOT NULL UNIQUE
};
INSERT INTO MYTABLE(NAME)values(jessica);
なぜこのエラーが発生するのですか?
エラー 1364 (HY000): フィールド 'MY_DATE' には既定値がありません
create table MYTABLE
{
MY_DATE int NOT NULL AUTO_INCREMENT,
NAME varchar(255) NOT NULL UNIQUE
};
INSERT INTO MYTABLE(NAME)values(jessica);
なぜこのエラーが発生するのですか?
エラー 1364 (HY000): フィールド 'MY_DATE' には既定値がありません
ドキュメントから:
テーブルごとに存在できる AUTO_INCREMENT カラムは 1 つだけであり、インデックスを作成する必要があり、DEFAULT 値を持つことはできません。
MY_DATE
インデックスを作成していないため、オプションを黙って無視している可能性があることに気付くと思いますAUTO_INCREMENT
(保証はできません。これは単なる仮定ですが、ドキュメントのメモは依然として関連しています)。
私が見ることができるすべてのサンプルには、次のAUTO_INCREMENT
ものがあります(同等のもの):
PRIMARY KEY (MY_DATE)
または、厳密な SQL モードで実行している可能性があります。私が見たすべてのドキュメントは、特定のデフォルトがない場合、挿入内のリストされていない列が null 許容の場合は NULL になり、null 許容でない場合は型のデフォルトになることを示しているようです:
厳密な SQL モードで実行していない場合、値が明示的に指定されていない列は、デフォルト (明示的または暗黙的) 値に設定されます。たとえば、テーブル内のすべての列に名前を付けていない列リストを指定すると、名前のない列はデフォルト値に設定されます。デフォルト値の割り当てについては、セクション10.1.4「データ型のデフォルト値」で説明されています。
整数型の場合、そのデフォルトは 0 です (とにかく自動インクリメントを開始する必要があります)。
ただし、厳密な SQL モードでは (ここから):
トランザクション テーブルでエラーが発生し、ステートメントがロールバックされます。
INSERT ステートメントで MY_DATE の値を指定しておらず、デフォルト値が定義されていません。(そして、paxdiablo が指摘しているように、この状況ではデフォルト値を定義することはできません。)直感的には言えませんが、MY_DATE に値を指定する必要があり、その値がゼロまたは null の場合、MySQL は次の自動インクリメント値を割り当てます。このような:
insert into mytable values(null,'jessica');