错误:列不能为空(我使用了自动递增的主键)

ccgok5k5  于 2021-06-21  发布在  Mysql
关注(0)|答案(4)|浏览(405)

我开始通过一门在线课程学习mysql,我的老师说首先创建所有表,然后修改表并插入主键/外键是一种很好的做法。我是这样做的,尽管老师自己给出了答案,他在表中写了主键,只修改了外键。我遇到的问题是,当插入数据时,一个错误显示“x列不能为空”。这是我的第一列“idcliente”,我将它改为具有自动递增功能的主键,现在我假设它在插入数据时不会自动递增数字。我在网上查过,看到了identity(还没学会,所以对我来说不太理想),值不能为null(我以前就用这种方法插入过数据,当主键在表代码中时,它可以工作)。我不知道我做错了什么。谢谢你的回答。谢谢您!

  1. CREATE TABLE CLIENTE (
  2. IDCLIENTE INT,
  3. NOME VARCHAR(30) NOT NULL,
  4. SEXO ENUM('M','F') NOT NULL
  5. );
  6. CREATE TABLE TELEFONE (
  7. IDTELEFONE INT,
  8. TIPO ENUM('RES','COM','CEL'),
  9. NUMERO VARCHAR(11),
  10. ID_CLIENTE INT
  11. );
  12. ALTER TABLE CLIENTE
  13. ADD CONSTRAINT PK_CLIENTE
  14. PRIMARY KEY AUTO_INCREMENT (IDCLIENTE);
  15. ALTER TABLE TELEFONE
  16. ADD CONSTRAINT PK_TELEFONE
  17. PRIMARY KEY AUTO_INCREMENT (IDTELEFONE);
  18. ALTER TABLE TELEFONE
  19. ADD CONSTRAINT FK_CLIENTE_TELEFONE
  20. FOREIGN KEY (ID_CLIENTE)
  21. REFERENCES CLIENTE(IDCLIENTE);
  22. INSERT INTO CLIENTE VALUES (NULL,'JOAO','M');

“错误1048(23000):列'idcliente'不能为空”

r1zhe5dt

r1zhe5dt1#

自动递增将在尝试在表中插入记录时自动创建唯一的数字。
所以不要在查询中使用null,请尝试以下操作:
插入客户(nome,sexo)值('joao','m');
使用此查询:从数据库名称显示表名称中的列;它将向您描述有关表结构的详细信息。

bpsygsoo

bpsygsoo2#

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

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

您没有将pk定义为自动增量。
这就是问题所在:

  1. ALTER TABLE CLIENTE
  2. ADD CONSTRAINT PK_CLIENTE
  3. PRIMARY KEY AUTO_INCREMENT (IDCLIENTE);

这不是定义自动增量列的正确语法。根据中记录的语法,可能是定义可选索引类型的语法https://dev.mysql.com/doc/refman/5.7/en/alter-table.html. 但是索引类型似乎被innodb忽略了。在主键和列列表之间键入的任何内容都将被忽略。
auto\u increment选项的语法与列一起使用,而不是与约束一起使用。

  1. mysql> ALTER TABLE CLIENTE
  2. MODIFY COLUMN IDCLIENTE INT AUTO_INCREMENT,
  3. ADD PRIMARY KEY (IDCLIENTE);
展开查看全部
6g8kf2rb

6g8kf2rb3#

从你的专栏开始 IDCLIENTE 设置为自动递增,则在执行插入时不需要提供它。mysql会自动为您插入它。
使用insert语句作为

  1. INSERT INTO CLIENTE VALUES ('JOAO','M');
bz4sfanl

bz4sfanl4#

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

不提供空值:

  1. INSERT INTO CLIENTE (NOME, SEXO) VALUES ('JOAO','M');

相关问题