为啥我不能将这些值插入到我添加到此数据库的表中?

Posted

技术标签:

【中文标题】为啥我不能将这些值插入到我添加到此数据库的表中?【英文标题】:Why can't I insert these values into the table I added to this database?为什么我不能将这些值插入到我添加到此数据库的表中? 【发布时间】:2021-12-16 13:30:52 【问题描述】:

我是 SQL 新手,正在学习它的基本功能,我被指示创建一个表并将其添加到我的数据库中,同时将适当的值添加到表中的每个字段。但是我一直在该行中收到语法错误:

INSERT into Weather_db.client_data

到目前为止,这是我的代码。让我知道我应该改变什么:

Q1.) 使用 CREATE TABLE 语句,创建一个名为 client_data 的表,其中包含字段

CREATE TABLE Weather_db.client_data (
ID int PRIMARY KEY,
First_name varchar(40) NOT NULL, 
Last_name varchar(40),
Nationality varchar(40), 
Age Float Check (age>18))

Q2.) 使用 INSERT 语句在数据库中插入以下记录

INSERT into Weather_db.client_data 
VALUES ('John', 'S',
'British', 'null'), 
('Peter', 'Jackson', 'null', '20'), 
('Tom', 'W', 'null', '20'), 
('Jack', 'Patrick', 'American', '30');

【问题讨论】:

首先您要声明 5 列并插入 4 个值。如果您想使用插入值并且不想包含列,您必须更改为:insert into Weather_db.client_data (First_name ,Last_name ,Nationality ,Age ) .... 第二个Age Float Check (age>18) 将因null 而失败,ID int PRIMARY KEY 没有默认值 @ErgestBasha CHECK 约束由 UNKNOWN 的结果满足,因此它们有效地忽略列为 NULL 的情况。 @BillKarwin 是的,你是对的,它给了我第 1 行截断的错误数据,但我猜是因为 ID 【参考方案1】:
ID int PRIMARY KEY,

此列定义是合法的,但它没有任何自动生成唯一值的行为。因此,您必须自己在 INSERT 语句中提供一个值,并由您确保该值是唯一的,即它尚未用于此表中的任何现有行。

mysql 为整数主键提供了一个选项来自动生成新的唯一值:

ID int AUTO_INCREMENT PRIMARY KEY,

通过使用它,您不必在 INSERT 语句中指定值。

您可能想阅读此手册页以获取更多信息:https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html

【讨论】:

【参考方案2】:

您的语句存在一些语法问题。

首先,您没有为所有定义的列提供值。

始终在插入语句中专门列出列也是一种好习惯。

您不应引用数值或空值。

您可能应该将 ID 定义为 auto_increment,这意味着数据库将提供默认值。

查看working example

CREATE TABLE client_data (
ID int PRIMARY key auto_increment,
First_name varchar(40) NOT NULL, 
Last_name varchar(40),
Nationality varchar(40), 
Age Float Check (age>18));

INSERT into client_data (first_name, last_name, Nationality, Age)
VALUES ('John', 'S','British', null), 
('Peter', 'Jackson', null, 20), 
('Tom', 'W', null, 20), 
('Jack', 'Patrick', 'American', 30);

【讨论】:

谢谢,我已经更改了我的代码。但我仍然不断收到错误 1136,即“列计数与第 1 行的值计数不匹配。如何确保 ID 列被填充?我认为将 PRIMARY 键指示为 auto_increment 会自行工作吗?

以上是关于为啥我不能将这些值插入到我添加到此数据库的表中?的主要内容,如果未能解决你的问题,请参考以下文章

如何将具有自动递增值的列添加到 mySql 数据库的表中?

使用单个 INSERT 语句将多行插入到表中

为啥我的查询不能从一个表中选择然后插入到另一个表中?

为啥 SQL 服务器在我的表中插入 0 值而不是使用函数的正确值

mysql将值插入表中?

我可以在存储过程中使用 if 语句将值插入到表中吗?