我开始通过在线课程学习MySQL,我的老师说,首先创建所有的表,然后修改表,插入主键/外键是很好的做法。我正在做这样的练习,尽管老师自己已经给出了答案,他把主键写在表格里,只修改外键。我遇到的问题是当插入数据时,一个错误显示“列X不能为空”。这是我的第一篇专栏"idcliente",我将其修改为auto_increment的主键,现在假设它不会在插入数据时自动增加数字。我在网上查看了身份(还没有学到,所以这对我来说并不理想),值不能为null (在此之前,当主键在表代码中并且工作时,我已经插入了数据)。我不知道我做错了什么。感谢你的回答。谢谢!
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‘不能为null“
发布于 2018-01-02 07:06:42
我测试了您的代码,然后查看了表定义:
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似乎忽略了索引类型。在主键和列列表之间键入的任何内容都将被忽略。
AUTO_INCREMENT选项的语法与列一致,而不是约束。
mysql> ALTER TABLE CLIENTE
MODIFY COLUMN IDCLIENTE INT AUTO_INCREMENT,
ADD PRIMARY KEY (IDCLIENTE);发布于 2018-01-02 06:45:28
INSERT INTO CLIENTE VALUES (NULL,'JOAO','M');不要提供NULL:
INSERT INTO CLIENTE (NOME, SEXO) VALUES ('JOAO','M');发布于 2018-01-02 06:49:57
由于您的列IDCLIENTE设置为自动增量,所以在执行插入时不需要提供它。MySQL会自动为您插入它。
使用insert语句作为
INSERT INTO CLIENTE VALUES ('JOAO','M');https://stackoverflow.com/questions/48056622
复制相似问题