如何在 SQL 中向表中添加行:SQL INSERT INTO 语句
SQL 训练与示例:如何编写 SQL 命令以将数据添加到表中?
我用简单的话语解释如何将数据插入数据库表,没有任何废话。INSERT INTO 命令很简单!它适用于 MySQL、PostgresQL、MS SQL、SQLite、Oracle、MariaDB 和其他 SQL 数据库管理系统。
SQL 中的 INSERT 命令用于向表中添加新行:
INSERT INTO tableName
(field1, field2, field3)
VALUES
(value1, value2, value3);
这字面意思是:“插入到表 名称(通过逗号列出字段)值(通过逗号列出值)”。
注意值必须与字段的顺序相同,以便值能被记录到正确的字段中。同时,字段数量和值的数量必须匹配,否则将会出现错误。
例如,如果我们有一个联系人表,我们想要添加一个包含字段 name、website 和 telegram 的新记录,我的命令将如下所示:
INSERT INTO contacts
(name, website, telegram)
VALUES
('Rick', 'fullstack-freelancer.ru', '@fullstackfreelancer');
如何通过一个 INSERT 命令将多个行插入 SQL 表中?
SQL 允许你使用一个 INSERT 命令将多个记录添加到表中。这在你需要快速加载大量数据条目时特别有用。语法如下:
INSERT INTO tableName
(field1, field2, field3)
VALUES
(value1a, value2a, value3a),
(value1b, value2b, value3b),
(value1c, value2c, value3c);
也就是说,我们保持字段不变,并在 VALUES 后列出我们想要添加的记录数量,为其指定我们在 INSERT INTO 后指定的字段的值。
如果在查询中没有指定在表中存在的所有字段,则在添加的记录中,这些字段将包含默认值(在创建表时设置)。如果这些未指定的字段中有任何一个是必填的,则 SQL 查询将会出现错误。
如何在 SQL 中插入 NULL 值以添加记录?
在向表中添加数据时,如果你想要留下某个字段为空,可以使用 NULL 值来表示该字段。例如,如果 website 字段可以留空,命令将如下所示:
INSERT INTO contacts
(name, website, telegram)
VALUES
('Rick', NULL, '@fullstackfreelancer');
注意,如果该字段有“NOT NULL”标记(在创建表时设置),则 SQL 查询将会出现错误。
如何在 SQL 中从另一张表插入数据?
INSERT 命令可以与 SELECT 结合使用,将数据从一张表添加到另一张表。这使得你可以在不需要深入了解其内容的情况下移动或复制数据。从一张表到另一张表插入数据的 SQL 查询示例如下:
INSERT INTO targetTableName
(field1, field2)
SELECT
sourceTableField1, sourceTableField2
FROM
sourceTableName
WHERE
conditions;
例如,如果我们有一个 old_users 表,而我们想要将所有年龄超过 30 岁的用户复制到一个 new_users 表中,命令将如下所示:
INSERT INTO new_users
(name, email)
SELECT
name, email
FROM
old_users
WHERE
age > 30;
这在数据库归档和处理大量信息时特别有用。
在 SQL 中插入数据时的错误处理
SQL 提供了多种方法来处理你试图插入具有其他记录中唯一(UNIQUE)字段值的情况。
SQL INSERT OR IGNORE - 忽略添加具有重复唯一值的记录
如果已存在相同唯一值的记录,SQL 将忽略此操作以避免错误。这在你想插入数据但又不希望由于重复值而发生错误时非常有用。
假设我们想要插入一个新用户,但如果该值已经为标记为唯一(UNIQUE - 在创建表时设置)的字段添加了 - 假设在我们的示例中是 email,我们只希望跳过插入。
使用 SQL 查询 INSERT OR IGNORE INTO 的示例:
INSERT OR IGNORE INTO users
(name, email)
VALUES
('Rick', 'contact@fullstack-freelancer.com');
在这种情况下,如果与 email contact@fullstack-freelancer.com 关联的用户已经在表中存在,INSERT OR IGNORE 命令将忽略此插入尝试,并不会引发错误。但是,如果没有与指定 email 关联的用户,他们将成功添加到 users 表中。
如何在 SQL 中添加新记录或编辑现有记录? INSERT ON DUPLICATE KEY UPDATE
在前面的示例中,我们看到如何忽略添加包含在其他记录中唯一字段中已经存在的值的记录。
SQL 甚至允许我们在找到匹配的唯一值时编辑该记录!
使用 SQL 查询 INSERT ON DUPLICATE KEY UPDATE 的示例:
INSERT INTO users (
id,
name,
email
) VALUES (
1,
'Rick',
'contact@fullstack-freelancer.com'
) ON DUPLICATE KEY UPDATE
name = 'Rick',
email = 'contact@fullstack-freelancer.com';
这段代码 添加 新用户,如果 ID 1 不存在,或 更新 名称和 email,如果该 ID 的用户已经存在。