1

mysqlデータベースには、次のテーブルがあります。

CREATE TABLE `actualities` (
  `id` int(11) NOT NULL,
  `title` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `body` text COLLATE utf8_unicode_ci,
  `project_id` int(11) DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`),
  KEY `project_id` (`project_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

このテーブルに新しいエントリを作成しようとすると、IDは次のように0に設定されます。

mysql> insert into actualities (title) VALUES ('title');
Query OK, 1 row affected, 1 warning (0.13 sec)

mysql> select * from actualities order by created_at desc limit 1;
+----+-------+------+------------+---------------------+---------------------+
| id | title | body | project_id | created_at          | updated_at          |
+----+-------+------+------------+---------------------+---------------------+
|  0 | title | NULL |       NULL | 2012-12-15 20:14:20 | 0000-00-00 00:00:00 |
+----+-------+------+------------+---------------------+---------------------+

理由がわかりません。解決策はありますか?

解決

ALTER TABLE actualities MODIFY id INT AUTO_INCREMENT;
4

3 に答える 3

4

あなたが望むのはこれだと思います:

`id` int(11) NOT NULL AUTO_INCREMENT

これがないと、テーブルに新しいデータを挿入するときに特定の値を指定する必要があります。指定しないと、デフォルト値が使用されます (こちら0) 。

AUTO_INCREMENTに関する MySQL のドキュメントの詳細

于 2012-12-15T20:22:15.363 に答える
4

NOT NULLint フィールドのデフォルト値は 0idです。 は主キーであるため、何らかのNOT NULL方法で指定できます。

予想される動作に応じて、次のことができます。

  1. オンにするAUTO_INCREMENT
  2. ステートメントにid値を含めます。INSERT
于 2012-12-15T20:22:18.687 に答える
3

数値型の場合、デフォルトは 0 ですが、AUTO_INCREMENT 属性で宣言された整数型または浮動小数点型の場合は例外で、デフォルトはシーケンス内の次の値です。

MySQL 5.0 リファレンス マニュアル

于 2012-12-15T20:23:44.677 に答える