MySQL - INSERT 插入查询
使用 CREATE TABLE 语句在 MySQL 数据库中创建表后,我们将只得到一个空表,其中仅定义了其结构。要向其中填充数据,我们需要使用单独的查询手动添加记录。
MySQL INSERT 语句
要将数据插入 MySQL 表,我们需要使用 MySQL INSERT 语句。我们可以使用"mysql>"提示符或任何客户端程序(例如 PHP、Java 等)将数据插入 MySQL 表。
由于表的结构已经定义,因此 MySQL INSERT 语句仅接受符合表结构的数据。插入表中的数据必须具有相同的数据类型、满足约束条件(如果有)等。如果插入的数据不满足这些条件,INSERT INTO 语句将显示错误。
语法
以下是 MySQL INSERT 语句的语法 -
INSERT INTO TABLE_NAME (column1, column2, column3,...columnN) VALUES (value1, value2, value3,...valueN);
要插入字符串值,需要将所有值括在双引号或单引号中。例如 "value"。
从命令提示符插入数据
要从命令提示符插入数据,我们将使用 SQL INSERT INTO 语句将数据插入 MySQL 表。
示例
首先,我们使用以下查询创建一个名为 CUSTOMERS 的表 -
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
现在,我们将在上面创建的表中插入一条记录 -
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );
我们还可以使用以下查询同时插入多条记录 -
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 ), (3, 'Kaushik', 23, 'Kota', 2000.00 ), (4, 'Chaitali', 25, 'Mumbai', 6500.00 ), (5, 'Hardik', 27, 'Bhopal', 8500.00 );
即使您未指定列名,如果查询中逗号分隔的值与相应列的属性匹配,也可以将记录插入数据库,如下所示 -
INSERT INTO CUSTOMERS VALUES (6, 'Komal', 22, 'Hyderabad', 4500.00 ), (7, 'Muffy', 24, 'Indore', 10000.00 );
验证
我们可以使用此语句验证数据是否已插入,如下所示 -
SELECT * FROM CUSTOMERS;
生成的 CUSTOMERS 表如下所示 -
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
使用另一个表将数据插入一个表
有时,我们只需要将数据从数据库中一个现有表复制到同一数据库中的另一个表。有多种方法可以做到这一点 -
- 使用 INSERT...SELECT
- 使用 INSERT...TABLE
INSERT...SELECT 语句
我们可以通过 select 语句将数据填充到另一个表中;假设另一个表包含一组字段,这些字段是填充第一个表所必需的。
语法如下 -
INSERT INTO table_name1 [(column1, column2, ... columnN)] SELECT column1, column2, ...columnN FROM table_name2 [WHERE condition];
示例
在以下查询中,我们将创建另一个表 CUSTOMERS_Copy,其结构与 CUSTOMERS 表相同 -
CREATE TABLE CUSTOMERS_Copy ( ID INT AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
现在,我们使用 INSERT...INTO 语句将 CUSTOMERS 表中的记录插入到 CUSTOMERS_Copy 表中。
INSERT INTO CUSTOMERS_Copy SELECT * from CUSTOMERS;
输出
这将生成以下输出 -
Query OK, 7 rows affected (0.01 sec) Records: 7 Duplicates: 0 Warnings: 0
验证
执行以下查询,验证记录是否从 CUSTOMERS 表插入 -
SELECT * FROM CUSTOMERS_Copy;
得到的 CUSTOMERS_Copy 表如下所示 -
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
INSERT...TABLE 语句
另一方面,我们可以使用 INSERT...TABLE 语句将一个表中的内容插入另一个表中,而不是选择特定的列。
以下是执行此操作的语法 -
INSERT INTO table1 TABLE table2;
示例
在此示例中,我们使用上一个示例中创建的相同 CUSTOMERS 表,并将其内容复制到另一个表 CUSTOMERS_dummy。
为此,首先,我们将创建与 CUSTOMERS 表具有相同结构的表 CUSTOMERS_dummy -
CREATE TABLE CUSTOMERS_dummy ( ID INT AUTO_INCREMENT, NAME VARCHAR(20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
使用 CUSTOMERS 表,我们将所有值插入到 CUSTOMERS_dummy 表中 -
INSERT INTO CUSTOMERS_dummy TABLE CUSTOMERS;
输出
此查询将生成以下输出 -
Query OK, 7 rows affected (0.01 sec) Records: 7 Duplicates: 0 Warnings: 0
验证
我们可以使用 SELECT 语句检索表的内容。您可以使用该语句验证数据是否已插入,如下所示 -
SELECT * FROM CUSTOMERS_dummy;
获取的 CUSTOMERS_dummy 表如下所示 -
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
INSERT ... SET
您可以使用 INSERT...SET 语句将值设置为选定的列来插入记录。此语句的语法如下:
INSERT INTO table_name SET column_name1 = value1, column_name2=value2,......;
其中,table_name 是需要插入记录的表名,column_name1 = value1, column_name2 = value2 ...... 是选定的列名及其对应的值。
如果您使用 INSERT ... SET 语句向表中插入值,并且仅为某些列提供值,则其余列的值将为 NULL。
示例
以下查询使用 INSERT ... SET 语句向 CUSTOMERS 表中插入一条记录。这里,我们仅向 ID、NAME 和 AGE 列传递值(其余值将为 NULL)-
INSERT INTO CUSTOMERS SET ID = 8, NAME = 'Sarmista', AGE = 35;
验证
如果使用 SELECT 语句检索 CUSTOMERS 表的内容,您可以观察到插入的行,如下所示
SELECT * FROM CUSTOMERS WHERE ID=8;
输出
以下是上述程序的输出 -
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
8 | Sarmista | 35 | NULL | NULL |
使用客户端程序插入数据
除了使用 MySQL 查询将数据插入 MySQL 数据库的表中之外,我们还可以使用客户端程序执行 INSERT 操作。
语法
以下是此操作在各种编程语言中的语法 -
要通过 PHP 程序将数据插入 MySQL 表,我们需要使用 mysqli 函数 query() 执行 INSERT 语句,如下所示:-
$sql = "INSERT INTO tutorials_tbl VALUES(1,'Learn MySQL','Mahesh', NOW())"; $mysqli->query($sql);
要通过 Node.js 程序将数据插入 MySQL 表,我们需要使用 mysql2 库的 query 函数执行 INSERT 语句,如下所示:-
sql = "INSERT INTO tutorials_tbl VALUES(1, 'Learn PHP', 'John Paul', NOW())"; con.query(sql)
要通过 Java 程序将数据插入 MySQL 表,我们需要使用 JDBC 函数 executeUpdate() 执行 INSERT 语句,如下所示:-
String sql = "INSERT INTO tutorials_tbl VALUES (1, 'Learn PHP', 'John Paul', NOW());"; st.executeUpdate(sql);
要通过 Python 程序将数据插入 MySQL 表,我们需要使用 MySQL Connector/Python 的 execute() 函数执行 INSERT 语句,如下所示:-
sql = "INSERT INTO tutorials_tbl VALUES (1, 'Learn PHP', 'John Paul', '2023-3-28')" cursorObj.execute(sql)
示例
以下是程序 -
$dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $dbname = 'TUTORIALS'; $mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname); if($mysqli->connect_errno ) { printf("Connect failed: %s
", $mysqli->connect_error); exit(); } $sql = "INSERT INTO tutorials_tbl VALUES(1,'Learn MySQL','Mahesh', NOW())"; if($result = $mysqli->query($sql)){ printf("Data inserted successfully..!"); } if($mysqli->error){ printf("Failed..!" , $mysqli->error); } $mysqli->close();
输出
获得的输出如下 -
Data inserted successfully..!
var mysql = require('mysql2'); var con = mysql.createConnection({ host: "localhost", user: "root", password: "Nr5a0204@123" }); //连接到 MySQL con.connect(function (err) { if (err) throw err; console.log("Connected!"); //创建数据库 sql = "CREATE DATABASE IF NOT EXISTS TUTORIALS" con.query(sql); //选择数据库 sql = "USE TUTORIALS" con.query(sql); //创建一个表 sql = "CREATE TABLE IF NOT EXISTS tutorials_tbl(tutorial_id INT NOT NULL PRIMARY KEY, tutorial_title VARCHAR(100) NOT NULL, tutorial_author VARCHAR(40) NOT NULL, submission_date DATE)"; con.query(sql); //将记录插入表中 sql = "INSERT INTO tutorials_tbl(tutorial_id, tutorial_title, tutorial_author, submission_date) VALUES(1, 'Learn PHP', 'John Paul', NOW()), (2, 'Learn MySQL', 'Abdul S', NOW()), (3, 'JAVA Tutorial', 'Sanjay', '2007-05-06'), (4, 'Python Tutorial', 'Sasha Lee', '2016-09-04'), (5, 'Hadoop Tutorial', 'Chris Welsh', NOW())"; con.query(sql, function (err, result) { if (err) throw err; console.log(result); }); });
输出
生成的输出如下 -
Connected! ----------------------------------- ResultSetHeader { fieldCount: 0, affectedRows: 5, insertId: 0, info: 'Records: 5 Duplicates: 0 Warnings: 3', serverStatus: 2, warningStatus: 3, changedRows: 0 }
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class InsertQuery { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/TUTORIALS"; String user = "root"; String password = "password"; ResultSet rs; try { Class.forName("com.mysql.cj.jdbc.Driver"); Connection con = DriverManager.getConnection(url, user, password); Statement st = con.createStatement(); //System.out.println("Database connected successfully...!"); String sql = "INSERT INTO tutorials_tbl (tutorial_id, tutorial_title, tutorial_author, submission_date) VALUES (1, 'Learn PHP', 'John Paul', NOW());"; st.executeUpdate(sql); System.out.println("Record insered successfully...!"); System.out.println("Table records: "); String sql1 = "SELECT * FROM tutorials_tbl"; rs = st.executeQuery(sql1); while(rs.next()) { String tutorial_id = rs.getString("tutorial_id"); String tutorial_title = rs.getString("tutorial_title"); String tutorial_author = rs.getString("tutorial_author"); String submission_date = rs.getString("submission_date"); System.out.println("Id: " + tutorial_id + ", Title: " + tutorial_title + ", Author: " + tutorial_author + ", Submission_date: " + submission_date); } }catch(Exception e) { e.printStackTrace(); } } }
输出
获得的输出如下所示 -
Record insered successfully...! Table records: Id: 1, Title: Learn PHP, Author: John Paul, Submission_date: 2023-08-08
import mysql.connector import datetime #建立连接 connection = mysql.connector.connect( host='localhost', user='root', password='password', database='tut' ) table_name = 'tutorials_tbl' new_tutorial_data = [ (2, 'Learn MySQL', 'Abdul S', '2023-03-28'), (3, 'JAVA Tutorial', 'Sanjay', '2007-05-06'), (4, 'Python Tutorial', 'Sasha Lee', '2016-09-04'), (5, 'Hadoop Tutorial', 'Chris Welsh', '2023-03-28'), (6, 'R Tutorial', 'Vaishnav', '2011-11-04') ] #创建游标对象 cursorObj = connection.cursor() cursorObj.execute("truncate table tutorials_tbl") sql = "INSERT INTO tutorials_tbl VALUES (1, 'Learn PHP', 'John Paul', '2023-3-28')" cursorObj.execute(sql) insert_query = f'INSERT INTO {table_name} (tutorial_id, tutorial_title, tutorial_author, submission_date) VALUES (%s, %s, %s, %s)' cursorObj.executemany(insert_query, new_tutorial_data) connection.commit() print("Row inserted successfully.") cursorObj.close() connection.close()
输出
以下是上述代码的输出 -
Row inserted successfully.