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

int 字段的默认值为NOT NULL0。id是主键,因此它是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 回答