gpt4 book ai didi

mysql - 错误 : Column cannot be null (I have used primary key with auto_increment)

转载 作者:行者123 更新时间:2023-11-29 01:50:05 25 4
gpt4 key购买 nike

我开始通过在线类(class)学习 MySQL,我的老师说最好先创建所有表,然后更改表并插入主键/外键。我正在以这种方式进行练习,即使老师本人已经提供了他在表中写主键的地方的答案,并且只更改了外键。我遇到的问题是在插入数据时,错误显示“X 列不能为空”。这是我的第一列“idcliente”,我将其更改为带有 auto_increment 的主键,现在我假设它在我插入数据时不会自动递增数字。我已经在线检查并看到有关身份的信息(尚未了解,所以它对我来说并不理想),值不能为空(我之前已经通过这种方式插入了数据,当主键在表代码中时,它可以工作).我不确定我做错了什么。感谢任何答案。谢谢!

   CREATE TABLE CLIENTE (
IDCLIENTE INT,
NOME VARCHAR(30) NOT NULL,
SEXO ENUM('M','F') NOT NULL
);

CREATE TABLE TELEFONE (
IDTELEFONE INT,
TIPO ENUM('RES','COM','CEL'),
NUMERO VARCHAR(11),
ID_CLIENTE INT
);

ALTER TABLE CLIENTE
ADD CONSTRAINT PK_CLIENTE
PRIMARY KEY AUTO_INCREMENT (IDCLIENTE);

ALTER TABLE TELEFONE
ADD CONSTRAINT PK_TELEFONE
PRIMARY KEY AUTO_INCREMENT (IDTELEFONE);

ALTER TABLE TELEFONE
ADD CONSTRAINT FK_CLIENTE_TELEFONE
FOREIGN KEY (ID_CLIENTE)
REFERENCES CLIENTE(IDCLIENTE);

INSERT INTO CLIENTE VALUES (NULL,'JOAO','M');

“错误 1048 (23000):列‘IDCLIENTE’不能为空”

最佳答案

我测试了你的代码,然后查看了表定义:

mysql> show create table CLIENTE\G
*************************** 1. row ***************************
Table: CLIENTE
Create Table: CREATE TABLE `CLIENTE` (
`IDCLIENTE` int(11) NOT NULL,
`NOME` varchar(30) NOT NULL,
`SEXO` enum('M','F') NOT NULL,
PRIMARY KEY (`IDCLIENTE`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

您没有将 PK 定义为 AUTO_INCREMENT。

问题是:

ALTER TABLE CLIENTE
ADD CONSTRAINT PK_CLIENTE
PRIMARY KEY AUTO_INCREMENT (IDCLIENTE);

这不是定义 AUTO_INCREMENT 列的正确语法。根据 https://dev.mysql.com/doc/refman/5.7/en/alter-table.html 中记录的语法,它可能是定义可选索引类型的语法。 .但是索引类型似乎被 InnoDB 忽略了。无论您在 PRIMARY KEY 和列列表之间键入什么,都将被忽略。

AUTO_INCREMENT 选项的语法与列一起使用,而不与约束一起使用。

mysql> ALTER TABLE CLIENTE 
MODIFY COLUMN IDCLIENTE INT AUTO_INCREMENT,
ADD PRIMARY KEY (IDCLIENTE);

关于mysql - 错误 : Column cannot be null (I have used primary key with auto_increment),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48056622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com