如何在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查询时生成的错误。