摘要:在上一章,我们像建筑师一样,用 CREATE TABLE 命令搭建好了 friends 表的“骨架”。现在,这个骨架是空的,没有灵魂。
在上一章,我们像建筑师一样,用 CREATE TABLE 命令搭建好了 friends 表的“骨架”。现在,这个骨架是空的,没有灵魂。
是时候扮演“造物主”的角色,向表里注入生命了!这一章,我们的核心任务就是学习 INSERT 命令,把实实在在的数据填充到我们的表中。
准备好迎接你的第一批“数据朋友”了吗?
如果你在上一章结尾尝试了 DROP TABLE 命令,那么 friends 表可能已经不在了。别担心,我们再把它建起来。
确保你已经连接到了 my_first_db 数据库 (\c my_first_db),然后执行:
CREATE TABLE friends ( id INT, name VARCHAR(50), birthday DATE, years_known INT);好,我们的空房子又回来了!
INSERT 的最基本用法,就是一次往表里添加一行数据。
语法结构 非常直观:
INSERT INTO table_name (column1, column2, ...)VALUES (value1, value2, ...);INSERT INTO table_name: 指定要向哪张表里插入数据。(column1, column2, ...): 列出你要为哪些列提供值。VALUES (value1, value2, ...): 提供与前面列一一对应的具体值。动手时间! 让我们来添加第一个朋友,“老王”。
INSERT INTO friends (id, name, birthday, years_known)VALUES (1, '老王', '1990-05-20', 5);代码解读 :
我们向 friends 表插入数据。指定了要填充的 id, name, birthday, years_known 四个列。对应地,提供了值 1, '老王', '1990-05-20', 5。注意 ⚠️:
文本(VARCHAR)和日期(DATE)类型的值,需要用单引号' ' 括起来。数字(INT)类型的值,直接写数字即可。列的顺序和值的顺序必须严格对应!执行这条 SQL!如果成功,你会看到 INSERT 0 1 这样的返回信息,意思是成功插入了 1 行。
怎么验证?
我们暂时用一个简单的 SELECT 语句来查看表里的所有内容(SELECT 是下一章的主角,这里先偷看一下):
你应该能看到老王的信息已经被成功记录在案了!
id | name | birthday | years_known----+------++ 1 | 老王 | 1990-05-20 | 5(1 row)一次只加一个朋友太慢了!INSERT 命令也支持一次性插入多行数据,效率更高。
只需要在 VALUES 后面,用逗号 , 分隔开每一行的数据即可。
动手时间! 我们再把“小李”和“张三”也加进来。
INSERT INTO friends (id, name, birthday, years_known)VALUES (2, '小李', '1992-08-15', 3), (3, '张三', '1988-01-30', 10);执行它!返回的信息应该是 INSERT 0 2。
再次用 SELECT * FROM friends; 查看,你会发现,现在你的朋友列表热闹起来了!
id | name | birthday | years_known----+------++ 1 | 老王 | 1990-05-20 | 5 2 | 小李 | 1992-08-15 | 3 3 | 张三 | 1988-01-30 | 10(3 rows)这个技巧现在可能用不上,但非常有用,先了解一下。
想象一下,你还有一张 old_friends 表,你想把里面的所有朋友都迁移到新的 friends 表里。你不需要先把数据查出来再一行行 INSERT,可以直接用 INSERT ... SELECT ... 语句。
语法结构:
INSERT INTO target_table (column1, column2)SELECT column_a, column_b FROM source_tableWHERE some_condition;这个命令会执行 SELECT 查询,然后把查询出的结果直接插入到 target_table 中。这在数据迁移和ETL(数据抽取、转换、加载)工作中是家常便饭。
如果你插入数据时,提供的值的顺序和数量与 CREATE TABLE 时定义的列的顺序和数量完全一致,那么你可以省略掉列名列表。
比如,下面这两种写法是等价的:
-- 标准写法 (推荐 )INSERT INTO friends (id, name, birthday, years_known)VALUES (4, '赵四', '1978-11-11', 15);-- 简写 (不推荐 )INSERT INTO friendsVALUES (4, '赵四', '1978-11-11', 15);为什么不推荐简写?
因为这种写法高度依赖表的物理列顺序。如果将来有人修改了表的结构(比如在中间加了一列),那么这条简写的 INSERT 语句就会立刻出错,或者更糟糕——把数据插到错误的列里面去!
所以,始终明确地写出列名,是一个非常好的编程习惯! ✨
本章小结
恭喜你,你已经掌握了 INSERT 命令,学会了如何为你的数据表注入灵魂!
我们学会了单行插入和多行插入。我们知道了文本和日期要用单引号。我们还养成了一个好习惯:总是写明列名。现在,我们的 friends 表里已经有了一些数据。但是,我们如何才能按照我们的意愿,只查看我们想看的数据呢?比如,只看“老王”的信息,或者找出我们认识超过5年的朋友?
这就是下一章——SELECT 查询——要教给我们的核心技能。准备好从你的数据宝库中“探宝”了吗?我们下一章见!
来源:linux运维菜