diff --git "a/data/1.PostgreSQL\345\210\235\351\230\266/2.PostgreSQL\347\232\204\345\256\211\350\243\205/2.\347\231\273\345\275\225PostgreSQL/rds.json" "b/data/1.PostgreSQL\345\210\235\351\230\266/2.PostgreSQL\347\232\204\345\256\211\350\243\205/2.\347\231\273\345\275\225PostgreSQL/rds.json" index ac1452b11db51a1f13e15632e99d103b693d887b..d4a6e008be0be410aeb8bf5cc578b784cec63b0f 100644 --- "a/data/1.PostgreSQL\345\210\235\351\230\266/2.PostgreSQL\347\232\204\345\256\211\350\243\205/2.\347\231\273\345\275\225PostgreSQL/rds.json" +++ "b/data/1.PostgreSQL\345\210\235\351\230\266/2.PostgreSQL\347\232\204\345\256\211\350\243\205/2.\347\231\273\345\275\225PostgreSQL/rds.json" @@ -2,5 +2,6 @@ "type": "code_options", "author": "刘鑫", "source": "rds.md", - "notebook_enable": false + "notebook_enable": false, + "exercise_id": "6b04760cd212469c925eb4a9c4a66757" } \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/config.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/config.json" index 2f7cb8761d3f4f1e27e51943b74537ef065a8719..09539ab59b72ad5769974f3629f016bffdb88b87 100644 --- "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/config.json" +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/config.json" @@ -2,5 +2,5 @@ "node_id": "pg-eeb777ca54434480a06bfe7fc5e7d3ca", "keywords": [], "children": [], - "export": [] + "export": ["primary_key.json","unique.json", "unique_2.json"] } \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/primary_key.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/primary_key.json" new file mode 100644 index 0000000000000000000000000000000000000000..537a5738140430e0a971bb5d310acf294ed9c9b1 --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/primary_key.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "primary_key.md", + "notebook_enable": false, + "exercise_id": "412c89270d24418ab35a1d919a5017e7" +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/primary_key.md" "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/primary_key.md" new file mode 100644 index 0000000000000000000000000000000000000000..72fd10d17199abad5606fa37d93c5177d12a06d3 --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/primary_key.md" @@ -0,0 +1,30 @@ +# 主键 + +关于 PostgreSQL 的主键,哪一项是错误的? + +## 答案 + +主键列只能是自增 id。 + +## 选项 + +### A + +主键隐含了聚集索引和唯一约束 + +### B + +主键可以是一个字段,也可以是多个字段的组合 + +### C + +语法约束上,可以允许无主键的表,但是从工程实践上,应该保持每个表都有正确的主键。 + +### D + +主键或唯一键可以被引用为外键约束 + +### E + +主键应可以唯一的标识数据,并且主键的一部分不应该依赖另一部分。 + diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/unique.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/unique.json" new file mode 100644 index 0000000000000000000000000000000000000000..2ed35b059322d8c1845696e2b193721ce83fb47b --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/unique.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "unique.md", + "notebook_enable": false, + "exercise_id": "482896ba26ec43bc8ddedbf3448d47bb" +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/unique.md" "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/unique.md" new file mode 100644 index 0000000000000000000000000000000000000000..431506fc5c25b11bd2a1e5f255481c06e5997a2c --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/unique.md" @@ -0,0 +1,42 @@ +# 唯一约束 + +现有一个图书登记表: + +```postgresql +create table book( + id serial primary key , + title text, + publish_at date, + isbn text, + meta jsonb default '{}'::jsonb +) +``` + +我们发现有时候客户可能会重复输入同一本书的信息,怎样约束用户不会输入同一本书? + +1. 删除id列,将isbn设置为主键 +2. 在 isbn 列上加唯一约束 +3. 执行 `create index on book(id, title, publish_at, isbn, meta)` +4. 在 id 键上加唯一约束 + +## 答案 + +1 或者 2 + +## 选项 + +### A + +3 + +### B + +4 + +### C + +3 或 4 + +### D + +3 和 4 diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/unique_2.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/unique_2.json" new file mode 100644 index 0000000000000000000000000000000000000000..480f978ab934deb75aa31a8ab873c7fbd3aa0d24 --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/unique_2.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "unique_2.md", + "notebook_enable": false, + "exercise_id": "f1f5779378ef4684a210188e5730b6a1" +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/unique_2.md" "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/unique_2.md" new file mode 100644 index 0000000000000000000000000000000000000000..ab9a1a6b63c945e23c6319e29237e5a40c421e94 --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/unique_2.md" @@ -0,0 +1,46 @@ +# 唯一约束 + +现有一个图书登记表: + +```postgresql +create table book( + id serial primary key , + title text, + publish_at date, + isbn text, + meta jsonb default '{}'::jsonb +) +``` + +我们发现有时候客户可能会重复输入同一本书的信息,*在不修改应用层程序的前提下*,怎样约束用户不会输入同一本书? + +1. 删除id列,将isbn设置为主键 +2. 在 isbn 列上加唯一约束 +3. 执行 `create index on book(id, title, publish_at, isbn, meta)` +4. 在 id 键上加唯一约束 + +## 答案 + +2 + +## 选项 + +### A + +3 + +### B + +4 + +### C + +3 或 4 + +### D + +3 和 4 + +### E + +1 或 2 \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/5. \350\247\246\345\217\221\345\231\250/config.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/5. \350\247\246\345\217\221\345\231\250/config.json" index bc1313247f649387883769577231895700f01f37..eb14148e6ff06fc205b6daec1c3e5e0ddda98ffd 100644 --- "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/5. \350\247\246\345\217\221\345\231\250/config.json" +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/5. \350\247\246\345\217\221\345\231\250/config.json" @@ -2,5 +2,5 @@ "node_id": "pg-a0cb78d68d814f5e935b41922b88e085", "keywords": [], "children": [], - "export": [] + "export": ["trigger.json"] } \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/5. \350\247\246\345\217\221\345\231\250/trigger.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/5. \350\247\246\345\217\221\345\231\250/trigger.json" new file mode 100644 index 0000000000000000000000000000000000000000..6164598d302ff51da9905cb07debd03708dbea2e --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/5. \350\247\246\345\217\221\345\231\250/trigger.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "trigger.md", + "notebook_enable": false, + "exercise_id": "2724dfb0a71c473b8a071e1d2aecc030" +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/5. \350\247\246\345\217\221\345\231\250/trigger.md" "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/5. \350\247\246\345\217\221\345\231\250/trigger.md" new file mode 100644 index 0000000000000000000000000000000000000000..a8cc384d577915c301eb30063a7274fc373c8591 --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/5. \350\247\246\345\217\221\345\231\250/trigger.md" @@ -0,0 +1,39 @@ +# 触发器 + +SmartMarket 公司的OA数据库中包含以下结构: + +```postgresql +create table employee( + id serial primary key , + name text, + dept text, + salary money, + meta jsonb default '{}'::jsonb +); + +create table budget( + id serial primary key , + dept text, + amount money +) +``` + +我们省略了无关的内容。当某个员工的工资发生变动时,我们要修改他所在部门的预算。那么以下哪个选项可以解决问题? + +## 答案 + +在 employee 表添加一个 after 触发器,当员工信息变动时,重算相关部门的预算。 + +## 选项 + +### A + +在 budget 表添加触发器,当员工信息变动时,重算相关部门的预算。 + +### B + +将预算总额字段变成计算列,通过统计员工工资生成。 + +### C + +将员工信息表的工资字段设置为部门预算总额的外键引用字段,并设置级联更新。 \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/6.\346\225\260\346\215\256\345\272\223\346\211\251\345\261\225/extension.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/6.\346\225\260\346\215\256\345\272\223\346\211\251\345\261\225/extension.json" new file mode 100644 index 0000000000000000000000000000000000000000..921b2dfbfbf9e6de1b70f97484a5bf597129af73 --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/6.\346\225\260\346\215\256\345\272\223\346\211\251\345\261\225/extension.json" @@ -0,0 +1,6 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "extension.md", + "notebook_enable": false +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/6.\346\225\260\346\215\256\345\272\223\346\211\251\345\261\225/extension.md" "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/6.\346\225\260\346\215\256\345\272\223\346\211\251\345\261\225/extension.md" new file mode 100644 index 0000000000000000000000000000000000000000..6dc9ad1a66ee3cecc282d5e563a26b9dc987e55c --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/6.\346\225\260\346\215\256\345\272\223\346\211\251\345\261\225/extension.md" @@ -0,0 +1,33 @@ +# 外部扩展 + +下列哪个功能需要通过`create exension`语句安装扩展得到? + +## 答案 + +postgis + +## 选项 + +### A + +全文检索 + +### B + +JSONB + +### C + +GIST 和 GIN 索引 + +### D + +JSON Path 支持 + +### E + +XML 和 XSLT 支持 + +### F + +面向对象语法 diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/6.\346\225\260\346\215\256\345\272\223\346\211\251\345\261\225/language.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/6.\346\225\260\346\215\256\345\272\223\346\211\251\345\261\225/language.json" new file mode 100644 index 0000000000000000000000000000000000000000..68f9e01795b6d8d2470211ce1774da8f2acce8ab --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/6.\346\225\260\346\215\256\345\272\223\346\211\251\345\261\225/language.json" @@ -0,0 +1,6 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "language.md", + "notebook_enable": false +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/6.\346\225\260\346\215\256\345\272\223\346\211\251\345\261\225/language.md" "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/6.\346\225\260\346\215\256\345\272\223\346\211\251\345\261\225/language.md" new file mode 100644 index 0000000000000000000000000000000000000000..2b59cb5b64d2d116a342404c16124178c4b37584 --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/6.\346\225\260\346\215\256\345\272\223\346\211\251\345\261\225/language.md" @@ -0,0 +1,25 @@ +# 过程语言 + +关于 PostgreSQL PL 语言,错误的是: + +## 答案 + +要安装新的扩展语言,需要重新编译 PostgreSQL 内核。 + +## 选项 + +### A + +PG 可以支持 Python、Perl、Lua 等多种 PL 语言编写函数。 + +### B + +通过 create language 可以安装新的 pl 语言支持 + +### C + +实现新的 PL 语言需要遵循 PostgreSQL 的语言扩展规范。 + +### D + +用外部语言实现函数,要考虑跨边界传递数据的开销 \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/1.\350\201\232\345\220\210\345\222\214\345\210\206\347\273\204/salary.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/1.\350\201\232\345\220\210\345\222\214\345\210\206\347\273\204/salary.json" new file mode 100644 index 0000000000000000000000000000000000000000..73f9b2265f9316120dedea9a26c62199666c587e --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/1.\350\201\232\345\220\210\345\222\214\345\210\206\347\273\204/salary.json" @@ -0,0 +1,6 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "salary.md", + "notebook_enable": false +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/1.\350\201\232\345\220\210\345\222\214\345\210\206\347\273\204/salary.md" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/1.\350\201\232\345\220\210\345\222\214\345\210\206\347\273\204/salary.md" new file mode 100644 index 0000000000000000000000000000000000000000..b2af09fe4ae810d34f0c11d66eb6f7051acff1df --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/1.\350\201\232\345\220\210\345\222\214\345\210\206\347\273\204/salary.md" @@ -0,0 +1,55 @@ +# 工资最高的人 + +现有员工信息表如下: + +```postgresql +create table employee +( + id serial primary key, + name text, + dept text, + salary money +); +``` + +下面哪条查询,可以给出每个部门工资最高的员工的 id, name, dept, salary 四项信息? + +## 答案 + +```postgresql +select l.id, l.name, l.dept, l.salary +from employee as l + join (select max(salary) as salary, dept + from employee + group by dept) as r + on l.dept = r.dept and l.salary = r.salary +``` + +## 选项 + +### select 与 group by 不匹配 + +```postgresql +select id, name, dept, max(salary) from employee group by dept; +``` + +### group by 不对 + +```postgresql +select id, name, dept, max(salary) from employee group by dept, id, name; +``` + +### group by 不对 + +```postgresql +select id, name, dept, max(salary) from employee group by dept, id, name having salary = max(salary); +``` + +### 结构错误 + +### group by 不对 + +```postgresql +select id, name, dept, max(salary) from employee where salary=max(salary) group by dept; +``` + diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/3.\345\255\220\346\237\245\350\257\242/config.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/3.\345\255\220\346\237\245\350\257\242/config.json" index ed336ca50a485c1e507bbad01b95435d33c5f73e..d555d928b331d67ffcdaa58de64bfc54acaf748b 100644 --- "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/3.\345\255\220\346\237\245\350\257\242/config.json" +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/3.\345\255\220\346\237\245\350\257\242/config.json" @@ -2,5 +2,5 @@ "node_id": "pg-55fd213f919d411c9b572241c4bb7807", "keywords": [], "children": [], - "export": [] + "export": ["subquery.json"] } \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/3.\345\255\220\346\237\245\350\257\242/subquery.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/3.\345\255\220\346\237\245\350\257\242/subquery.json" new file mode 100644 index 0000000000000000000000000000000000000000..9b14469b05c64a3a724233dcd5393cd717e71fd4 --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/3.\345\255\220\346\237\245\350\257\242/subquery.json" @@ -0,0 +1,6 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "subquery.md", + "notebook_enable": false +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/3.\345\255\220\346\237\245\350\257\242/subquery.md" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/3.\345\255\220\346\237\245\350\257\242/subquery.md" new file mode 100644 index 0000000000000000000000000000000000000000..ff4ab3a9f67380019d7ff19d98da34d92ec0afe2 --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/3.\345\255\220\346\237\245\350\257\242/subquery.md" @@ -0,0 +1,53 @@ +# 子查询 + +现有员工表 + +```postgresql +create table employee( + id serial primary key , + name text, + dept text, + salary money +) +``` + +我们希望找出比销售部(dept 为 sale)工资最高的员工工资更高的那部分人,查询出他们的完整信息,下面哪一项可以满足要求? + +## 答案 + +```postgresql +select id, name, dept, salary +from employee +where salary > (select max(salary) from employee where dept='sale') +``` + +## 选项 + +### A + +```postgresql +select id, name, dept, salary +from employee +where dept = 'sale' +group by dept having salary > max(salary) +``` + +### B + +```postgresql +select l.id, l.name, l.dept, l.salary +from employee as l join employee as r on l.salary > max(r.salary) +where r.dept = 'sale' +group by r.dept +``` + +### C + +```postgresql +select id, name, dept, salary +from employee +having salary > (select max(salary) from employee where dept='sale') +``` + + + diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/config.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/config.json" index f0e7961575ba09bf6a5f085e8d324197b75a6d1b..d793cbd7529b60ce3d6749ed096f9b244b5e7ac6 100644 --- "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/config.json" +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/config.json" @@ -2,5 +2,5 @@ "node_id": "pg-e1cd59819dd74a0bacc707f7863aad53", "keywords": [], "children": [], - "export": [] + "export": ["insert.json", "update.json", "delete.json"] } \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/delete.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/delete.json" new file mode 100644 index 0000000000000000000000000000000000000000..0d9b33f01824c9ef71aa2f0b0c54658fbafbf9eb --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/delete.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "delete.md", + "notebook_enable": false, + "exercise_id": "78e6ca15ba794ef3b2092de4640308b9" +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/delete.md" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/delete.md" new file mode 100644 index 0000000000000000000000000000000000000000..57f50db5d7288e926d8fb3883bbd90221a89325b --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/delete.md" @@ -0,0 +1,89 @@ +# 删除 + +SmartMarket 公司的业务数据库中,有一个 orders 表,其结构主要是以下形态: + +```postgresql +create table orders +( + id serial primary key, + meta jsonb default '{}'::jsonb, + content jsonb default '{}'::jsonb, + created_at timestamp default now(), + deal boolean +) +``` + +有一个业务系统会实时的将已经成交(deal 字段为 true)的订单数据转储,现在我们仅需要一个清理 程序,将已经成 交的数据从 orders 表删除并记录被删除的数据id。下面哪个操作是对的? + +## 答案 + +在一个独立的定时任务中执行 + +```postgresql +delete +from orders +where deal +returning id; +``` + +并记录id + +## 选项 + +### A + +在一个独立的定时任务中执行 + +```postgresql +truncate orders; +``` + +### B + +在一个独立的定时任务中执行 + +```postgresql +delete +from orders; +``` + +### C + +在一个独立的定时任务中执行 + +```postgresql +drop table orders; +create table orders +( + id serial primary key, + meta jsonb default '{}'::jsonb, + content jsonb default '{}'::jsonb, + created_at timestamp default now(), + deal boolean +); +``` + +### D + +建立视图 + +```postgresql +create view order_view as +select id, meta, content, created_at +from orders +where not deal; +``` + +并要求业务系统只能访问这个视图。 + +### E + +在一个独立的定时任务中执行 + +```postgresql +delete +from orders +where deal; +``` + +并记录操作前后表中的最大 id \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/insert.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/insert.json" new file mode 100644 index 0000000000000000000000000000000000000000..9f3d239883717ce0f48abd10b8262662e39abb7e --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/insert.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "insert.md", + "notebook_enable": false, + "exercise_id": "2d562e3ae4a84e648de31452a67ba71f" +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/insert.md" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/insert.md" new file mode 100644 index 0000000000000000000000000000000000000000..60ea20f5d3abd384002c30460a24a4355b164de3 --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/insert.md" @@ -0,0 +1,55 @@ +# 插入 + +现有一个表: + +```postgresql +create table book( + id serial primary key , + title text not null , + meta jsonb default '{}'::jsonb, + price money, + isbn text not null , + publish_at date not null +); +create unique index on book(isbn); +create index on book using gin(meta); +``` + +那么下列哪个选项的代码可以执行成功? + +## 答案 + +```postgresql +insert into book(title, price, isbn, publish_at) select 'a book title', 25.4, 'xx-xxxx-xxxx', '2019-12-1'::date; +insert into book(title, price, isbn, publish_at) select 'a other book title', 25.4, 'yy-yyyy-xxxx', '2019-12-1'::date; +``` + +## 选项 + +### 唯一键冲突 + +```postgresql +insert into book(title, price, isbn, publish_at) select 'a book title', 25.4, 'xx-xxxx-xxxx', '2019-12-1'::date; +insert into book(title, price, isbn, publish_at) select 'a other book title', 35.4, 'xx-xxxx-xxxx', '2019-12-1'::date; +``` + +### 缺少必要的列 + +```postgresql +insert into book(price, isbn, publish_at) select 25.4, 'xx-xxxx-xxxx', '2019-12-1'::date; +insert into book(price, isbn, publish_at) select 35.4, 'yy-yyyy-xxxx', '2019-12-1'::date; +``` + +### 类型错误 + +```postgresql +insert into book(title, price, isbn, publish_at) select 'a book title', 'unknown', 'xx-xxxx-xxxx', '2019-12-1'::date; +insert into book(title, price, isbn, publish_at) select 'a other book title', 'unknown', 'xx-xxxx-xxxx', '2019-12-1'::date; +``` + +### 违反非空约束 + +```postgresql +insert into book(title, price, isbn, publish_at) select null, 'unknown', 'xx-xxxx-xxxx', '2019-12-1'::date; +insert into book(title, price, isbn, publish_at) select null, 'unknown', 'xx-xxxx-xxxx', '2019-12-1'::date; +``` diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/update.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/update.json" new file mode 100644 index 0000000000000000000000000000000000000000..3d5628ed786f0143539d426cfb2c402c0edeeebb --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/update.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "update.md", + "notebook_enable": false, + "exercise_id": "d6f2c270c3cd41a499715e55a2c565ba" +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/update.md" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/update.md" new file mode 100644 index 0000000000000000000000000000000000000000..c4b998f04833a537decef6b71a152cd666991b96 --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/6.DML/update.md" @@ -0,0 +1,49 @@ +# 更新数据 + +现有 employee 表如下: + +```postgresql +create table employee +( + id serial primary key, + name text, + dept text, + salary money +); +``` + +我们希望修改销售部(dept 字段为 sale)员工 Dora Muk 的工资,将其增加 1000,返回她的工号。正确的修改语句是: + +## 答案 + +```postgresql +update employee set salary = salary + 1000 where dept = 'sale' and name = 'Dora Muk' returning id; +``` + +## 选项 + +### 过滤条件不严谨 + +```postgresql +update employee set salary = salary + 1000 where name = 'Dora Muk' returning id; +``` + +### 没有返回员工id + +```postgresql +update employee set salary = salary + 1000 where dept = 'sale' and name = 'Dora Muk'; +``` + + +### 缺少过滤条件 + +```postgresql +update employee set salary = salary + 1000 returning id; +``` + +### 错误的赋值语句 + +```postgresql +update employee set salary += 1000 returning id; +``` + diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/7.\350\277\207\347\250\213\345\214\226\347\274\226\347\250\213/config.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/7.\350\277\207\347\250\213\345\214\226\347\274\226\347\250\213/config.json" index 580cf02065ac3f4e64ba539e876d9504e0068685..4158705eeb68bc8d607426b67357aa6e503ae6e1 100644 --- "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/7.\350\277\207\347\250\213\345\214\226\347\274\226\347\250\213/config.json" +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/7.\350\277\207\347\250\213\345\214\226\347\274\226\347\250\213/config.json" @@ -2,5 +2,5 @@ "node_id": "pg-eb4048b7dfd3469f8049330ba78427b5", "keywords": [], "children": [], - "export": [] + "export": ["loop.json"] } \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/7.\350\277\207\347\250\213\345\214\226\347\274\226\347\250\213/loop.json" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/7.\350\277\207\347\250\213\345\214\226\347\274\226\347\250\213/loop.json" new file mode 100644 index 0000000000000000000000000000000000000000..2cdec7a77920404dd9858003d6b7e692ab4e2e7d --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/7.\350\277\207\347\250\213\345\214\226\347\274\226\347\250\213/loop.json" @@ -0,0 +1,6 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "loop.md", + "notebook_enable": false +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/7.\350\277\207\347\250\213\345\214\226\347\274\226\347\250\213/loop.md" "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/7.\350\277\207\347\250\213\345\214\226\347\274\226\347\250\213/loop.md" new file mode 100644 index 0000000000000000000000000000000000000000..83b52303dff3cc20de0d1f917a2aec1b30eec33d --- /dev/null +++ "b/data/2.PostgreSQL\344\270\255\351\230\266/2.\346\234\215\345\212\241\347\253\257\347\274\226\347\250\213/7.\350\277\207\347\250\213\345\214\226\347\274\226\347\250\213/loop.md" @@ -0,0 +1,66 @@ +# 循环 + +下面哪一项定义的函数可以生成指定范围内的整数数列? + +## 答案 + +```postgresql +create function gen(start integer, stop integer) returns setof integer as $$ +begin + for idx in start .. stop loop + return next idx; + end loop; +end; +$$ language plpgsql; +``` + +## 选项 + +### A + +```postgresql +create function gen(start integer, stop integer) returns integer as $$ +begin + for idx in start .. stop loop + return idx; + end loop; +end; +$$ language plpgsql; +``` + +### B + +```postgresql +create function gen(start integer, stop integer) returns integer as $$ +begin + for idx in start .. stop loop + yield idx; + end loop; +end; +$$ language plpgsql; +``` + +### C + +```postgresql +create function gen(start integer, stop integer) returns setof integer as $$ +begin + for idx in start .. stop loop + return idx; + idx += 1; + end loop; +end; +$$ language plpgsql; +``` + +### D + +```postgresql +create function gen(start integer, stop integer) returns setof integer as $$ +begin + for idx in start .. stop loop + select idx; + end loop ; +end; +$$ language plpgsql; +``` \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/2.\351\200\217\350\247\206\350\241\250 /config.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/2.\351\200\217\350\247\206\350\241\250 /config.json" new file mode 100644 index 0000000000000000000000000000000000000000..43c0829ca558c3b2a4eabb51ef5ab2fe2e86454b --- /dev/null +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/2.\351\200\217\350\247\206\350\241\250 /config.json" @@ -0,0 +1,6 @@ +{ + "node_id": "pg-693a81467f444886a199bac681f238b8", + "keywords": [], + "children": [], + "export": ["pivot.json"] +} \ No newline at end of file diff --git "a/data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/auto_id.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/2.\351\200\217\350\247\206\350\241\250 /pivot.json" similarity index 100% rename from "data/2.PostgreSQL\344\270\255\351\230\266/1.PostgreSQL\346\225\260\346\215\256\345\272\223\347\232\204\345\237\272\346\234\254\347\273\223\346\236\204/4.\347\264\242\345\274\225\345\222\214\347\272\246\346\235\237/auto_id.json" rename to "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/2.\351\200\217\350\247\206\350\241\250 /pivot.json" diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/2.\351\200\217\350\247\206\350\241\250 /pivot.md" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/2.\351\200\217\350\247\206\350\241\250 /pivot.md" new file mode 100644 index 0000000000000000000000000000000000000000..450687cf4f60e41b32e7a6594dee12e375e51113 --- /dev/null +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/2.\351\200\217\350\247\206\350\241\250 /pivot.md" @@ -0,0 +1,90 @@ +# 透视表 + +现有销售记录表 + +```postgresql +create table sales( + id serial primary key , + sku_id integer not null , + amount money, + meta jsonb default '{}'::jsonb, + created_at timestamp default now() +); +create index on sales(created_at); +``` + +现在我们希望对这个表做一个月度的透视汇总,得到2020年每个月每种商品(sku_id)的的销售总额,每个月一列,哪一项可以实现? + +## 答案 + +```postgresql +select sku_id, + sum(case extract(month from created_at) when 1 then amount else 0::money end) as Jan, + sum(case extract(month from created_at) when 2 then amount else 0::money end) as Feb, + sum(case extract(month from created_at) when 3 then amount else 0::money end) as Mar, + sum(case extract(month from created_at) when 4 then amount else 0::money end) as Apr, + sum(case extract(month from created_at) when 5 then amount else 0::money end) as May, + sum(case extract(month from created_at) when 6 then amount else 0::money end) as June, + sum(case extract(month from created_at) when 7 then amount else 0::money end) as July, + sum(case extract(month from created_at) when 8 then amount else 0::money end) as Aug, + sum(case extract(month from created_at) when 9 then amount else 0::money end) as Sept, + sum(case extract(month from created_at) when 10 then amount else 0::money end) as Oct, + sum(case extract(month from created_at) when 11 then amount else 0::money end) as Nov, + sum(case extract(month from created_at) when 12 then amount else 0::money end) as Dec +from sales +where created_at between '2020-01-01'::timestamp and '2021-01-01'::timestamp +group by sku_id; +``` + +## 选项 + +### 格式不相符 + +```postgresql +select sku_id, extract(month from created_at) as month, sum(amount) +from sales +where created_at between '2020-01-01'::timestamp and '2021-01-01'::timestamp +group by 1, 2; +``` + +### 计算逻辑错误 + +```postgresql +select sku_id, + sum(amount) as Jan, + sum(amount) as Feb, + sum(amount) as Mar, + sum(amount) as Apr, + sum(amount) as May, + sum(amount) as June, + sum(amount) as July, + sum(amount) as Aug, + sum(amount) as Sept, + sum(amount) as Oct, + sum(amount) as Nov, + sum(amount) as Dec +from sales +where created_at between '2020-01-01'::timestamp and '2021-01-01'::timestamp +group by sku_id, extract(month from created_at); +``` + +### 计算格式错误 + +```postgresql +select sku_id, + sum(amount having extract(month from created_at) = 1) as Jan, + sum(amount having extract(month from created_at) = 2) as Feb, + sum(amount having extract(month from created_at) = 3) as Mar, + sum(amount having extract(month from created_at) = 4) as Apr, + sum(amount having extract(month from created_at) = 5) as May, + sum(amount having extract(month from created_at) = 6) as June, + sum(amount having extract(month from created_at) = 7) as July, + sum(amount having extract(month from created_at) = 8) as Aug, + sum(amount having extract(month from created_at) = 9) as Sept, + sum(amount having extract(month from created_at) = 10) as Oct, + sum(amount having extract(month from created_at) = 11) as Nov, + sum(amount having extract(month from created_at) = 12) as Dec +from sales +where created_at between '2020-01-01'::timestamp and '2021-01-01'::timestamp +group by sku_id, extract(month from created_at); +``` \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/2.\345\206\231\345\205\245\345\222\214\345\206\262\347\252\201/config.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/3.\345\206\231\345\205\245\345\222\214\345\206\262\347\252\201/config.json" similarity index 76% rename from "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/2.\345\206\231\345\205\245\345\222\214\345\206\262\347\252\201/config.json" rename to "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/3.\345\206\231\345\205\245\345\222\214\345\206\262\347\252\201/config.json" index e490dc9f0168379597c9e5a2345a31bea485cb55..520ac1b170906f7de687a0f355c41e8f77eb2391 100644 --- "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/2.\345\206\231\345\205\245\345\222\214\345\206\262\347\252\201/config.json" +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/3.\345\206\231\345\205\245\345\222\214\345\206\262\347\252\201/config.json" @@ -2,5 +2,5 @@ "node_id": "pg-6ce3520f7a67494a90378e7b194f8720", "keywords": [], "children": [], - "export": [] + "export": ["score.json"] } \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/3.\345\206\231\345\205\245\345\222\214\345\206\262\347\252\201/score.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/3.\345\206\231\345\205\245\345\222\214\345\206\262\347\252\201/score.json" new file mode 100644 index 0000000000000000000000000000000000000000..c322b0d1ec6f003760a96e0650df3415df61f28b --- /dev/null +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/3.\345\206\231\345\205\245\345\222\214\345\206\262\347\252\201/score.json" @@ -0,0 +1,6 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "score.md", + "notebook_enable": false +} \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/3.\345\206\231\345\205\245\345\222\214\345\206\262\347\252\201/score.md" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/3.\345\206\231\345\205\245\345\222\214\345\206\262\347\252\201/score.md" new file mode 100644 index 0000000000000000000000000000000000000000..ee4334131bb195736dc77999cf132e5d87dcf2dd --- /dev/null +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/3.\345\206\231\345\205\245\345\222\214\345\206\262\347\252\201/score.md" @@ -0,0 +1,50 @@ +# 积分累计 + +现有一个表 + +```postgresql +create table book_in( + login integer primary key , + score integer default 0 +); +``` + +用于记录用户行为积分,不同的客户端分布式的异步提交各个login的行为得分,如果一个用户不在表中,我们 +需要插入一条新纪录,如果已经存在,则需要将新提交的score累加到表中,下列哪个查询可以实现此功能? + +## 答案 + +```postgresql +insert into book_in(login, score) values ($1, $2) on conflict do update set score=$2; +``` + +## 选项 + +### A + +```postgresql +try + insert into book_in(login, score) values ($1, $2); +catch + update book_in set score = $2 where login = $1 +finally + commit; +``` + +### B + +```postgresql +insert into book_in(login, score) select $1, $2; +``` + +### C + +```postgresql +replace book_in(login, score) select $1, $2; +``` + +### D + +```postgresql +upsert into book_in(login, score) select $1, $2; +``` diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/3.\344\272\213\345\212\241/config.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\344\272\213\345\212\241/config.json" similarity index 72% rename from "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/3.\344\272\213\345\212\241/config.json" rename to "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\344\272\213\345\212\241/config.json" index e02e9fe7c194c45a986ff240d259a7b4a60fba6f..387e0e361251c7c07eeb1458c77147385dbee5e0 100644 --- "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/3.\344\272\213\345\212\241/config.json" +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\344\272\213\345\212\241/config.json" @@ -2,5 +2,5 @@ "node_id": "pg-2d547e778fc4453b84feb0a0c6341348", "keywords": [], "children": [], - "export": [] + "export": ["transaction.json"] } \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\344\272\213\345\212\241/transaction.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\344\272\213\345\212\241/transaction.json" new file mode 100644 index 0000000000000000000000000000000000000000..7309b3a0e6183dce5c509d90fb7eaa95a31d7c8f --- /dev/null +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\344\272\213\345\212\241/transaction.json" @@ -0,0 +1,6 @@ +{ + "type": "code_options", + "author": "刘鑫", + "source": "transaction.md", + "notebook_enable": false +} \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\344\272\213\345\212\241/transaction.md" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\344\272\213\345\212\241/transaction.md" new file mode 100644 index 0000000000000000000000000000000000000000..eefdd50ff3a67365fd2b972d740b2f8f5781a902 --- /dev/null +++ "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\344\272\213\345\212\241/transaction.md" @@ -0,0 +1,48 @@ +# 事务 + +现有 test1 表如下 + +```postgresql +create table test1(a integer primary key ); +``` + +我们执行下面的语句 + +```postgresql +CREATE PROCEDURE transaction_test1() +LANGUAGE plpgsql +AS $$ +BEGIN + FOR i IN 0..9 LOOP + INSERT INTO test1 (a) VALUES (i); + IF i % 2 = 0 THEN + COMMIT; + ELSE + ROLLBACK; + END IF; + END LOOP; +END; +$$; + +CALL transaction_test1(); +``` + +时,下面哪一项的解释是对的? + +## 答案 + +每当循环迭代到偶数的时候提交插入,最终 test1 表中是`0,2,4,6,8`。 + +## 选项 + +### A + +以最后一次提交为准,最终 test1 表中是 0 到 9 共九个数字。 + +### B + +所有插入都回滚了。test1 表中没有数据。 + +### C + +这个过程执行会报错。 \ No newline at end of file diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/config.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/5.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/config.json" similarity index 100% rename from "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/config.json" rename to "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/5.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/config.json" diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/5.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment.json" similarity index 100% rename from "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment.json" rename to "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/5.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment.json" diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment.md" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/5.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment.md" similarity index 100% rename from "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment.md" rename to "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/5.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment.md" diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment_2.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/5.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment_2.json" similarity index 100% rename from "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment_2.json" rename to "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/5.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment_2.json" diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment_2.md" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/5.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment_2.md" similarity index 100% rename from "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/4.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment_2.md" rename to "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/5.\347\264\242\345\274\225\345\222\214\344\274\230\345\214\226/daily_payment_2.md" diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/5.\350\241\250\345\207\275\346\225\260/config.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/6.\350\241\250\345\207\275\346\225\260/config.json" similarity index 100% rename from "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/5.\350\241\250\345\207\275\346\225\260/config.json" rename to "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/6.\350\241\250\345\207\275\346\225\260/config.json" diff --git "a/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/6.\347\273\223\346\236\234\351\233\206\347\261\273\345\236\213/config.json" "b/data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/7.\347\273\223\346\236\234\351\233\206\347\261\273\345\236\213/config.json" similarity index 100% rename from "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/6.\347\273\223\346\236\234\351\233\206\347\261\273\345\236\213/config.json" rename to "data/3.PostgreSQL\351\253\230\351\230\266/3.SQL\351\253\230\347\272\247\346\212\200\345\267\247/7.\347\273\223\346\236\234\351\233\206\347\261\273\345\236\213/config.json" diff --git a/data/tree.json b/data/tree.json index 7c590d57e86c728fe498dc096ea97723695f11e1..2c531f4c1403f30a1b182d83180db7762052c24a 100644 --- a/data/tree.json +++ b/data/tree.json @@ -313,6 +313,13 @@ "children": [] } }, + { + "透视表 ": { + "node_id": "pg-693a81467f444886a199bac681f238b8", + "keywords": [], + "children": [] + } + }, { "写入和冲突": { "node_id": "pg-6ce3520f7a67494a90378e7b194f8720",