4
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' 没有默认值

4

4 回答 4

3

文档

每个表只能有一个 AUTO_INCREMENT 列,它必须被索引,并且不能有 DEFAULT 值。

我想你会发现,因为你没有索引MY_DATE,它可能会默默地忽略这个AUTO_INCREMENT选项(我不能保证,这只是假设,但文档中的注释仍然是相关的)。

我可以在这些AUTO_INCREMENT东西上看到的所有样本都有(相当于):

PRIMARY KEY (MY_DATE)

或者,您可能在严格的 SQL 模式下运行。我见过的所有文档似乎都表明,在没有特定默认值的情况下,插入中的未列出列如果可以为空,则为 NULL,如果不可为空,则为默认类型:

如果您未在严格的 SQL 模式下运行,则任何未显式给定值的列都将设置为其默认值(显式或隐式)。例如,如果您指定的列列表未命名表中的所有列,则未命名的列将设置为其默认值。默认值分配在第 10.1.4 节,“数据类型默认值”中描述。

对于整数类型,默认值为 0(无论如何都应该启动自动增量)。

但是,在严格的 SQL 模式下(从这里):

事务表发生错误,并且该语句被回滚。

于 2011-02-15T06:41:28.960 回答
2

您使用的是哪个版本的 MySQL?

我正在使用 5.1.41 社区和创建表 SQL 给出

SQL 错误 (1075):表定义不正确;只能有一个自动列,并且必须将其定义为键

接下来更正如下

create table MYTABLE
 (
 MY_DATE int NOT NULL AUTO_INCREMENT primary key,
 NAME varchar(255) NOT NULL UNIQUE
 );

插入语句

INSERT INTO MYTABLE(NAME)values(jessica);

结果是

SQL 错误 (1054):“字段列表”中的未知列“杰西卡”

因为它没有被引用。一旦将其更正为以下内容:

INSERT INTO MYTABLE(NAME)values('jessica');

有用。您不必为 auto_increment 主键提供任何值,但您可以.

现在,让我们谈谈 MySQL 的怪癖。您可以选择包含该列,并将值设置为 NULL。你也可以给它一个 SPECIFIC 值,MySQL 会很乐意使用它,即使它被定义为 auto_increment。

INSERT INTO MYTABLE(my_date,NAME)values(41,'jessica2');
INSERT INTO MYTABLE(my_date,NAME)values(null,'jessica3');
INSERT INTO MYTABLE(NAME)values('jessica4');
DELETE FROM MYTABLE where my_date=43;
INSERT INTO MYTABLE(my_date,NAME)values(3,'jessica5');
INSERT INTO MYTABLE(NAME)values('jessica?');
select * from mytable;

当你将数字专门设置为 41 时,下一个数字变为 42,然后是 43。它允许我们专门使用 3,即使在我们使用特定数字 3 之前删除了 43,下一个值仍然是 44。

输出

MY_DATE  NAME
41       jessica2
42       jessica3
3        jessica5
44       jessica?
于 2011-02-15T07:57:57.357 回答
0

您没有在 INSERT 语句中为 MY_DATE 提供值,并且没有定义默认值。(正如 paxdiablo 指出的那样,在这种情况下不能定义默认值。)不直观的是,您确实需要为 MY_DATE 提供一个值,如果该值为零或 null,那么 MySQL 将分配下一个自动增量值。像这样:

insert into mytable values(null,'jessica');
于 2011-02-15T06:52:10.930 回答
0

编辑这个文件 /etc/mysql/mysql.conf.d/mysqld.cnf

在 [mysqld] 下添加以下语句

sql_mode =

这对我来说非常有效。

于 2019-12-14T15:48:21.590 回答