在 MySQL 中,向表中插入数据通常使用 INSERT 语句。这里汇总了 MySQL 中常用的新增(插入)数据的方法,并提供了相应的示例。你将学习如何插入单条记录、多条记录以及通过其他方式插入数据
1. 基础的 INSERT INTO 语法
INSERT INTO 是 MySQL 中用于插入新数据的标准语法。你可以使用以下基本格式来插入数据。
语法:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
-
table_name:表的名称。 -
column1, column2, ...:要插入数据的列名,可以省略,但必须按表的列顺序插入。 -
value1, value2, ...:对应列的值。
假设有一个名为 userTable 的表,结构如下:
CREATE TABLE userTable (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
sex ENUM('male', 'female', 'other'),
age INT,
phone VARCHAR(20),
email VARCHAR(100),
birthday DATE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
1. 插入单条记录:
INSERT INTO userTable (name, sex, age, phone, email, birthday)
VALUES ('Alice Brown', 'female', 22, '1234567890', 'alice@example.com', '2002-01-01');
2. 插入多条记录
你可以使用单个 INSERT INTO 语句一次插入多条记录。只需用逗号分隔每一组值。
INSERT INTO userTable (name, sex, age, phone, email, birthday)
VALUES
('Bob White', 'male', 25, '5551234567', 'bob@example.com', '1998-02-15'),
('John Doe', 'male', 30, '1234567890', 'john@example.com', '1994-05-15'),
('Jane Smith', 'female', 28, '9876543210', 'jane@example.com', '1996-04-20');
3. 插入数据时省略列名
如果你不想指定列名,必须确保提供的值与表中列的顺序完全匹配。如果表中有自增字段或默认值字段,可以省略这些字段。
假设你只想插入 name, sex, age 和 phone,而 id 和 created_at 自动填充。
INSERT INTO userTable
VALUES (NULL, 'Alice Green', 'female', 24, '5559876543', 'alicegreen@example.com', '1999-05-10', NULL);
NULL表示id会自动递增(自增字段)。NULL表示created_at会自动填充为当前时间戳。
4. 使用 INSERT IGNORE 插入数据
INSERT IGNORE 会忽略那些违反约束的行(如主键冲突、唯一性约束等)。这意味着如果插入的数据与表中的现有数据冲突(如重复的主键或唯一键),MySQL 会跳过这条插入操作而不会报错。
INSERT IGNORE INTO userTable (name, sex, age, phone, email, birthday)
VALUES ('John Doe', 'male', 30, '1234567890', 'john@example.com', '1994-05-15');
5. 使用 REPLACE INTO 替代现有数据
REPLACE INTO 会首先检查主键或唯一键是否存在,如果存在,它会删除已有记录并插入新数据。如果不存在,则直接插入新记录。
REPLACE INTO userTable (id, name, sex, age, phone, email, birthday)
VALUES (1, 'John Updated', 'male', 30, '9998887777', 'john_updated@example.com', '1994-05-15');
- 如果
id = 1的记录存在,它会删除旧记录,并插入新的数据。 - 如果
id = 1的记录不存在,它将插入新的数据。
6. 插入数据并返回自动生成的 ID
如果你想在插入数据后返回自动生成的 id(自增字段),可以使用 672009 或在应用程序中获取插入的 id。
INSERT INTO userTable (name, sex, age, phone, email, birthday)
VALUES ('Emily Davis', 'female', 26, '5553216547', 'emily@example.com', '1997-08-15');
SELECT 672009;
获取最后插入的自动生成的 id
或者,如果你在应用程序代码中(例如使用 Node.js 或 PHP),你可以获取最后插入的 id。
7. 使用 ON DUPLICATE KEY UPDATE 更新重复数据
ON DUPLICATE KEY UPDATE 是 MySQL 的一个特性,当插入数据时,如果主键或唯一索引冲突,则更新现有记录,而不是插入新记录。
INSERT INTO userTable (name, sex, age, phone, email, birthday)
VALUES ('Alice Green', 'female', 24, '5559876543', 'alicegreen@example.com', '1999-05-10')
ON DUPLICATE KEY UPDATE name = VALUES(name), age = VALUES(age), phone = VALUES(phone);
-
如果
email已经存在于表中,name,age,phone将被更新为新的值。 -
如果
email不存在,则会插入新的记录。
通过 SELECT 插入数据
可以通过从其他表中选择数据并插入到当前表中。这个方法常用于复制数据或从一个表迁移数据到另一个表。
INSERT INTO userTable (name, sex, age, phone, email, birthday)
SELECT name, sex, age, phone, email, birthday
FROM oldUserTable
WHERE age > 30;
2. 总结
| 方法 | 说明 | 示例 |
|---|---|---|
| INSERT INTO | 标准插入方法 | INSERT INTO userTable (name, sex, age) VALUES ('Alice', 'female', 30); |
| INSERT INTO ... VALUES ... | 一次插入多条记录 | INSERT INTO userTable (name, age) VALUES ('Bob', 25), ('Charlie', 28); |
| INSERT IGNORE INTO | 忽略主键冲突或唯一约束冲突的插入操作 | INSERT IGNORE INTO userTable ... |
| REPLACE INTO | 如果主键或唯一键存在,则删除并替换数据 | REPLACE INTO userTable (id, name) VALUES (1, 'Updated Name'); |
| ON DUPLICATE KEY UPDATE | 在主键冲突时更新现有数据 | INSERT INTO userTable ... ON DUPLICATE KEY UPDATE ... |
| INSERT INTO ... SELECT ... | 从另一个表中插入数据 | INSERT INTO userTable SELECT * FROM oldUserTable; |
| 672009 | 获取插入数据的自动生成 id | SELECT 672009; |