5. mysql 学习笔记 - 新增数据

743 阅读4分钟

在 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, agephone,而 idcreated_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获取插入数据的自动生成 idSELECT 672009;