如何在MySQL中插入值

2024年03月30日 如何在MySQL中插入值 极客笔记

如何在MySQL中插入值

在MySQL中,用户可以通过使用INSERT语句将值添加到数据库表中。它是一种数据操纵语言命令,因为它使用户能够对数据进行更改。用户可以使用INSERT查询在表中添加单行或多行数据。

INSERT查询的语法

以下是在MySQL中实施INSERT语句的语法:

INSERT INTO table_name (col1, col2, col3….coln)
VALUES (val1, val2, val3….valn);

语法说明:

用户需要使用INSERT INTO关键字开始。然后用户必须提到要添加值的表的名称。之后,使用括号指定要添加数据值的列的列表。逗号将列表中的列分隔开。

在第二部分,使用VALUES关键字指定表中的值。用户可以在括号中指定要插入的数据。这些值应与上一步中提到的列对应。

假设用户想要使用一个语句在表中添加多个数据值。插入多个值的语法稍有不同,因为在特定的VALUES子句中,用户必须指定要添加到数据库表中的逗号分隔的行列表。当插入多行时,每个元素表示表中的不同行。列值和行都用逗号分隔。括号中的值表示单独的一行。

添加多行数据的语法如下:

INSERT INTO table_name (col1, col2,col3?.coln)
VALUES
(val1, val2, val3?valn),
(val1, val2, val3?valn),
(val1, val2, val3?valn);

注意:用户需要确保列的数量与插入行中插入的值的数量完全相同。用户不需要包含表的标识列或带有默认约束的任何列。

实现INSERT命令

在使用MySQL中的INSERT命令之前,用户需要在数据库中创建一张表。可以通过使用数据定义语言命令来创建表。下面是在数据库中创建student_table的查询。查询包含了student_table的定义。

CREATE TABLE student_table
(
Student_id int auto_increment primary key,
fname varchar(100) NOT NULL,
lname varchar(100) NOT NULL,
Address varchar(100),
Mail varchar (100),
Dept_id int default 10,
Doj date
);

在上述定义的表上,我们将讨论用户可以在MySQL中实现INSERT语句以添加数据值的情景。这些情景包括:

  • 使用INSERT查询将值插入表中。
  • 使用INSERT查询在表中添加多行数据值。
  • 执行带有SELECT子句的INSERT命令。它使用户能够在SELECT查询返回的输出中添加值。
  • 使用INSERT IGNORE子句忽略在执行语句期间出现的错误。

在INSERT查询中添加单行值

假设用户想要将学生的名字和姓氏添加到表中。那么用户可以在MySQL中实现这个简单的查询:

INSERT INTO student_table (fname, lname) VALUES ('Rohit','Sharma');

一旦用户实施了上述查询,数据值将被添加到表中。如果用户想要查看更改内容,则必须执行SELECT语句来验证表中的修改。

SELECT * FROM student_table;

输出:

一旦实现了SELECT查询,用户可以检查数据行的值是否已成功添加到表中。您还可以检查值是否插入到相应的列中。这意味着值按正确的列顺序添加。在上面的INSERT语句中,我已经提到了fname和lname列的值。

在定义表时,我们为Dept_id列声明了默认值。如果用户没有明确为特定列分配不同的值,MySQL将自动分配其默认值。类似地,对于Student_id列,我们使用了auto_increment。它将自动为下一条记录分配比上一个值多一的值。MySQL将同时分配Student_id和Dept_id。

使用INSERT语句添加日期值

假设用户想要为学生分配一个特定的日期。在这种情况下,加入日期将被添加到student_table的Doj列中。添加日期的查询如下所示:

NSERT INTO student_table (fname, lname, Doj) VALUES ('Rahul',' Sharma', '2023-05-25');

完成此查询后,可以实现下面的查询。

SELECT * FROM student_table;

通过单个INSERT语句添加多行

假设用户想要在表格中添加几个学生的详细信息。那么用户可以使用以下SQL查询来添加学生表中的数据。

INSERT INTO student_table (fname, lname, Doj) VALUES ('Rahul',' Sharma', '2023-05-25'), 
('Rohit,''Verma,' '2023-05-25'),
('Harsh',' Jain', '2023-05-25'),
('Harshit',' Sharma', '2023-05-25');

执行上述查询成功后,您可以使用SELECT语句查看更新后的表。

SELECT * FROM student_table;

输出:

注意:在MySQL中,一个配置参数负责限制数据包大小。最大数据包大小为1GB。如果用户尝试输入超过最大数据包大小的数据,查询将返回一个错误,指示数据包太大。它将立即关闭连接。如果您想检查该参数,可以执行下面的命令:

SHOW VARIABLES LIKE 'max_allowed_packet';

输出:

您可以通过实现下面的SQL命令来更改最大允许的数据包大小。

SET GLOBAL max_allowed_packet=changed_size;

插入选择查询

假设用户想要将由不同SELECT语句产生的结果集添加到表中。用户可以使用INSERT INTO SELECT查询来实现。语法如下:

INSERT INTO table_name (col1, col2)
SELECT
col1, col2
FROM src_table
WHERE condn;

如从语法中可以明确看出,用户可以使用SELECT查询代替实现VALUES子句。SELECT查询用于从不同的表中收集数据或合并不同的表。当用户需要为特定表创建备份时,通常会使用这个查询。

让我们以一个实例来实现INSERT INTO SELECT查询。在这个例子中,我们将使用一个名为stud_table的表。现在我们将创建另一个表来创建stud_table的备份。stud_table和stud_backup应该具有完全相同的结构。用户可以在备份表中删除外键和其他限制。

用户可以使用下面的查询来定义stud_backup。

CREATE TABLE stud_backup (
    Stud_id INT,
    fname varchar(45) NOT NULL,
    lname varchar(45) NOT NULL);

现在,用户必须将stud_table中的数据添加到stud_backup表中。用户可以使用以下查询来创建stud_backup中的数据副本。

INSERT INTO stud_backup 
SELECT Stud_id, fname, lname
FROM stud_table;

用户可以通过实现SELECT查询来显示stud_backup中的数据,以确保备份表成功创建。

SELECT* FROM stud_backup;

在使用INSERT语句或INSERT INTO SELECT查询插入多个数据值到表中时,有各种情况可能导致插入查询失败,进而导致整个INSERT查询失败。

考虑这样一种情况,用户在表中插入了数千个数据值,然后在插入记录时发生错误。那么整个INSERT查询将失败,用户必须重新开始实现完整的查询。如果用户想要避免这种问题,可以使用INSERT IGNORE语句。

假设用户使用INSERT IGNORE查询来添加多个数据值到表中,即使在实现查询过程中发生错误,也能防止整个INSERT语句失败。

让我们使用一个例子来演示用户如何使用INSERT IGNORE。在这种情况下,创建一个employeetbl表。实现下面提到的查询来定义员工。

CREATE TABLE employeetbl
(emp_id INT PRIMARY KEY,
emp_name varchar(10));

这里将emp_id分配为主键。它限制了emp_id列,用户不能在表中插入重复记录。使用INSERT IGNORE实现下面的查询在表中添加数据:

INSERT IGNORE INTO employeetbl (emp_id, emp_name)
VALUES (1, 'Rohit'), (1, 'Rahul'), (2, 'Aman');

当你实现上述查询时,它会返回一个警告。

因此,在这种特殊情况下,我们使用了INSERT IGNORE语句;因此,整个INSERT语句不会失败。它将被实现两次,确保其他两条记录将被添加到表中。为了检查输入的数据值,请实现给定的SELECT查询:

SELECT * FROM employeetbl;

输出:

现在您可以看到只有两个值会添加到表中,而不是三个。

当用户使用INSERT INTO IGNORE语句时,执行不会失败,而是MySQL会发出一个警告。它将数据值添加到相应的表列中。为了更好地理解这个概念,在employees中添加另一行。emp_name的长度设置为十个字符。让我们尝试在emp_name中添加一个超过列中可以添加的值的最大大小的值。使用INSERT IGNORE INTO实现提供的查询。

INSERT IGNORE INTO employeetbl (emp_id, emp_name) VALUES (1, AKANKSHA VERMA);

MySQL将再次返回一个警告,但它将添加表中的值。实施以下SQL查询以显示已插入的记录。

SELECT * FROM employeetbl;

它将返回以下输出:

你可以看到该行已添加到表中,但MySQL会减少emp_name列的值。

摘要

在本教程中,我们讨论了用户如何通过实现INSERT语句在MySQL表中添加一个或多个行。我们还讨论了用户如何在另一个语句生成的结果集中的表中添加值。此外,我们还讨论了如何使用INSERT IGNORE语句忽略在执行INSERT查询时生成的错误。

本文链接:http://so.lmcjl.com/news/733/

展开阅读全文