在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;
答案 0 :(得分:4)
我猜你想要的是这个:
`id` int(11) NOT NULL AUTO_INCREMENT
如果没有这个,您需要在表格中插入新数据时给出特定值,否则它将采用默认值(此处为0
)
答案 1 :(得分:4)
NOT NULL
int字段的默认值为0. id
是主键,因此NOT NULL
是这样或那样的。
根据您的预期行为,您可以:
AUTO_INCREMENT
id
声明中加入INSERT
值。答案 2 :(得分:3)
对于数字类型,默认值为0,但对于使用AUTO_INCREMENT属性声明的整数或浮点类型,默认值是序列中的下一个值。