字段'id'没有默认值?

Tom*_*son 43 mysql insert create-table

我是这个SQL的新手; 我已经看到类似的问题与更大的程序,我目前无法理解.我正在为我的主页上使用的卡片游戏创建一个数据库.

我在Windows上使用MySQL Workbench.我得到的错误是:

错误代码:1364.字段'id'没有默认值

CREATE TABLE card_games
(
nafnleiks varchar(50), 
leiklysing varchar(3000), 
prentadi varchar(1500), 
notkunarheimildir varchar(1000), 
upplysingar varchar(1000), 
ymislegt varchar(500), 
id int(11) PK
);

insert into card_games (nafnleiks, leiklysing, prentadi, notkunarheimildir, upplysingar, ymislegt)

values('Svartipétur',
'Leiklýsingu vantar',
'Er prentað í: Þórarinn Guðmundsson (2010). Spilabókin - Allir helstu spilaleikir og spil.',
'Heimildir um notkun: Árni Sigurðsson (1951). Hátíðir og skemmtanir fyrir hundrað árum',
'Aðrar upplýsingar',
'ekkert hér sem stendur'
);

values('Handkurra',
'Leiklýsingu vantar',
'Er prentað í: Þórarinn Guðmundsson (2010). Spilabókin - Allir helstu spilaleikir og spil.',
'Heimildir um notkun', 
'Aðrar upplýsingar',
'ekkert her sem stendur'
);

values('Veiðimaður',
'Leiklýsingu vantar',
'Þórarinn Guðmundsson (2010). Spilabókin - Allir helstu spilaleikir og spil. Reykjavík: Bókafélagið. Bls. 19-20.',
'vantar',
'vantar',
'vantar'
);
Run Code Online (Sandbox Code Playgroud)

小智 35

下面提到了两种解决方案:

解决方案1

MySQL最有可能处于STRICT SQL模式.尝试执行SQL查询SET GLOBAL sql_mode=''或编辑my.cnf/my.ini以确保您没有设置STRICT_ALL_TABLES和/或STRICT_TRANS_TABLES.

解决方案2

如果Solution-1不工作,请尝试解决方案-2,如下面的步骤所示:

  1. 管理员身份运行MySQL Administrator工具.
  2. 然后转到启动变量.
  3. 然后转到"高级"选项卡.
  4. 找到SQL模式并删除STRICT_ALL_TABLES和/或STRICT_TRANS_TABLES然后单击"应用更改".
  5. 重启MySQL服务器.
  6. 完成.

注意:我在MySQL Server 5.7中测试了这些解决方案

  • 删除严格模式 - 不是解决方案。真是日后搬起石头砸自己的脚的好办法。这种模式可以防止错误,就像防止不良做法和错误解决方案一样,您只需将其删除即可。 (6认同)
  • 解决方案1为我工作.非常感谢! (3认同)

fed*_*qui 33

作为id主键,您不能使用具有相同值的不同行.尝试更改表格,使其id自动递增:

id int NOT NULL AUTO_INCREMENT
Run Code Online (Sandbox Code Playgroud)

然后按如下方式设置主键:

PRIMARY KEY (id)
Run Code Online (Sandbox Code Playgroud)

全部一起:

CREATE TABLE card_games (
   id int(11) NOT NULL AUTO_INCREMENT,
   nafnleiks varchar(50),
   leiklysing varchar(3000), 
   prentadi varchar(1500), 
   notkunarheimildir varchar(1000),
   upplysingar varchar(1000),
   ymislegt varchar(500),
   PRIMARY KEY (id));
Run Code Online (Sandbox Code Playgroud)

否则,您可以id在每次插入时指明,每次都要注意设置不同的值:

insert into card_games (id, nafnleiks, leiklysing, prentadi, notkunarheimildir, upplysingar, ymislegt)

values(1, 'Svartipétur', 'Leiklýsingu vantar', 'Er prentað í: Þórarinn Guðmundsson (2010). Spilabókin - Allir helstu spilaleikir og spil.', 'Heimildir um notkun: Árni Sigurðsson (1951). Hátíðir og skemmtanir fyrir hundrað árum', 'Aðrar upplýsingar', 'ekkert hér sem stendur' );
Run Code Online (Sandbox Code Playgroud)


Joh*_*Joe 19

id应该设置为auto-increment.

要将现有id列修改为自动递增,只需添加它

ALTER TABLE card_games MODIFY id int NOT NULL AUTO_INCREMENT;
Run Code Online (Sandbox Code Playgroud)


小智 10

通过将 AutoIncrement 添加到我的表的主键来解决 ExecuteNonQuery() 时出现错误。在您的情况下,如果您不想添加主键,那么我们必须为主键分配值。

ALTER TABLE `t1` 
CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT ;
Run Code Online (Sandbox Code Playgroud)


小智 5

从 mysql 5.6 开始,有一个新的默认值可确保您显式插入表定义中未设置默认值的每个字段。

要禁用并测试此功能:请参阅此处的答案:mysql error 1364 Field does not have a default values

我建议您在没有它的情况下进行测试,然后重新启用它并确保所有表都具有未在每个 INSERT 查询中显式传递的字段的默认值。

如果第三方 mysql 查看器出现此错误,您可能只能修复该链接中的问题。


jos*_*tgv 5

这是由于 MySQL 设置了严格模式,该模式不允许使用空字段执行 INSERT 或 UPDATE 命令,而模式没有设置默认值。

\n\n

有几个修复程序可以解决此问题。

\n\n

首先 \xe2\x80\x98fix\xe2\x80\x99 是为您的架构分配默认值。这可以通过一个简单的 ALTER 命令来完成:

\n\n
ALTER TABLE `details` CHANGE COLUMN `delivery_address_id` `delivery_address_id` INT(11) NOT NULL DEFAULT 0 ;\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,这可能需要对数据库模式中的许多表执行此操作,这很快就会变得乏味。第二个修复是删除 mysql 服务器上的 sql_mode STRICT_TRANS_TABLES。

\n\n

如果您使用的是brew安装的MySQL,您应该编辑MySQL目录中的my.cnf文件。更改底部的 sql_mode:

\n\n
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES\nsql_mode=NO_ENGINE_SUBSTITUTION\n
Run Code Online (Sandbox Code Playgroud)\n\n

保存文件并重新启动Mysql。

\n\n

来源:https ://www.euperia.com/development/mysql-fix-field-doesnt-default-value/1509

\n