练习 43:SQL 管理

原文:Exercise 43: SQL Administration

译者:飞龙

协议:CC BY-NC-SA 4.0

自豪地采用谷歌翻译

“管理”一词在数据库中重载了。它的意思是“确保 PostgreSQL 服务器保持运行”,或者是“为新软件的部署更改和迁移表”。在本练习中,我只介绍如何更改和迁移简单的纲要。管理完整数据库服务器不在本书的范围之内。

销毁和更改表

您已经遇到了DROP TABLE作为删除表的方式。我将向您展示另一种使用方式,以及如何使用ALTER TABLE在表中添加或删除列。

/* Only drop table if it exists. */
DROP TABLE IF EXISTS person;/* Create again to work with it. */
CREATE TABLE person (id INTEGER PRIMARY KEY,first_name TEXT,last_name TEXT,age INTEGER
);/* Rename the table to peoples. */
ALTER TABLE person RENAME TO peoples;/* Add a hatred column to peoples. */
ALTER TABLE peoples ADD COLUMN hatred INTEGER;/* Rename peoples back to person. */
ALTER TABLE peoples RENAME TO person;.schema person/* We don't need that. */
DROP TABLE person;

我正在对表进行一些虚假更改,来演示这些命令,但使用ALTER TABLEDROP TABLE语句,这是你可以在 SQLite3 中执行的一切事情。我会讲解它,让你了解发生了什么:

ex21.sql:2

使用IF EXISTS修饰符,仅当表已经存在时,才会丢弃。当你在没有表的新的数据库上运行你的.sql脚本时,这抑制了错误。

ex21.sql:5

仅仅重新创建表来处理它。

ex21.sql:13

使用ALTER TABLE来将其重命名为peoples

ex21.sql:16

向新命名的表peoples中添加新的一列hatred,它是个INTEGER

ex21.sql:19

peoples重命名回到person,因为这对于表来说是个愚蠢的名称。

ex21.sql:21

转储person的纲要,所以你可以看到,它拥有新的hatred列。

ex21.sql:24

在这个练习之后,丢弃这个表来打扫干净。

迁移和演化数据

我们来应用您学到的一些技巧。我会让你选取你的数据库,并将纲要“演进”成不同的形式。你需要确保你很好地了解了以前的练习,并且让你的code.sql正常工作。如果你没有完成每一个这些东西,那么回去把所有东西都弄清楚。

为了确保你在正确的状态中尝试这个练习,当你运行你的code.sql,你应该可以运行.schema,像这样:

$ sqlite3 ex13.db < code.sql
$ sqlite3 ex13.db .schema
CREATE TABLE person (id INTEGER PRIMARY KEY,first_name TEXT,last_name TEXT,age INTEGER
);
CREATE TABLE person_pet (person_id INTEGER,pet_id INTEGER
);
CREATE TABLE pet (id INTEGER PRIMARY KEY,name TEXT,breed TEXT,age INTEGER,dead INTEGER,dob DATETIME
);

确保你的表像我的表。并且如果不是,返回去并且移除任何命令,它们在上一个练习之后执行ALTER TABLE或者任何东西。

挑战性练习

您所要完成的任务是数据库更改的以下列表:

  • person添加dead列,就像pets中那样。
  • person添加phone_number列。
  • person添加salary列,它是float
  • personpet添加dob列,它是DATETIME
  • person_pet添加purchased_on列,它是DATETIME
  • pet添加parent列,它是INTEGER,并且持有它父母的id
  • 使用UPDATE语句,使用新的列数据更新现有的数据库记录。不要忘记person_pet关系表中的purchased_on列,来表明这个人什么时候购买这个宠物。
  • 再增加四个人和五个宠物,并为它们分配从属关系,以及哪个宠物是父母。在最后一部分,请记住,您获取父母的 ID,然后将其设置在parent列中。
  • 写一个查询,寻找 2004 年以后购买的所有宠物及其所有者的名字。关键是基于purchased_on列将person_pet映射到petparent
  • 写一个查询,寻找给定宠物的父母。再次查看pet.parent来实现它。实际上很简单,所以不要小题大做。
  • 更新你的code.sql文件,你已经把所有的代码放了进去,让它使用DROP TABLE IF EXISTS语法。
  • 使用ALTER TABLE,向person添加heightweight列,并将其放在你的code.sql文件中。
  • 运行新的code.sql脚本来重置数据库,你应该没有错误。

您应该通过编写一个ex13.sql文件来实现,文件里面是这些新的东西。然后通过使用code.sql重置数据库来测试它,然后运行ex13.sql来更改数据库,并执行SELECT查询来确认您进行了正确的更改。

深入学习

继续阅读DROP TABLEALTER TABLE的文档,然后访问 SQLite3 语言页面,并且阅读文档的其余CREATEDROP语句。

笨办法学 Python · 续 练习 43:SQL 管理相关推荐

  1. 笨办法学 Python · 续 中文版

    笨办法学 Python · 续 中文版 原书:Learn More Python 3 The Hard Way 译者:飞龙 自豪地采用谷歌翻译 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓 ...

  2. 笨办法学 Python · 续 练习 33:解析器

    练习 33:解析器 原文:Exercise 33: Parsers 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 想象一下,你将获得一个巨大的数字列表,你必须将其输入到电子表格 ...

  3. 笨办法学 Python · 续 练习 0:起步

    练习 0:起步 原文:Exercise 0: The Setup 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你需要设置和配置一些工具来学习此书.有可能你已经有了很多这些东西 ...

  4. 笨办法学 Python · 续 第二部分:简单的黑魔法

    第二部分:简单的黑魔法 原文:Part II: Quick Hacks 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 你有最好的想法,你会打动世界!你会成为一个亿万富豪!你的大 ...

  5. 笨办法学 Python · 续 练习 52:`moreweb`

    练习 52:moreweb 原文:Exercise 52: moreweb 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 现在,你已经使用 Python http.server ...

  6. 笨办法学 Python · 续 练习 24:URL 快速路由

    练习 24:URL 快速路由 原文:Exercise 24: Fast URL Search 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 我们将结束数据结构和算法的部分,并将 ...

  7. 笨办法学 Python · 续 练习 45:创建 ORM

    练习 45:创建 ORM 原文:Exercise 45: Creating an ORM 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 这本书的 SQL 部分的最后一个练习是一 ...

  8. 笨办法学 Python · 续 练习 40:SQL 读取

    练习 40:SQL 读取 原文:Exercise 40: Reading with SQL 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在 CRUD 矩阵中,你只知道&quo ...

  9. 笨办法学 Python · 续 第六部分:SQL 和对象关系映射

    第六部分:SQL 和对象关系映射 原文:Part VI: SQL and Object Relational Mapping 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 在本 ...

最新文章

  1. 正确设置语言,加速WP应用提交
  2. LeetCode Nim Game
  3. oracledb_npm包的使用
  4. Java 连接池的工作原理
  5. IntelliJ IDEA 2019 激活码 | 全产品 | 跨平台 | Goland | PhpStorm | Rider | CentOS | Windows
  6. cpu不支持虚拟装linux,linux 查看cpu是不是支持虚拟化
  7. 维护win10注册表
  8. 2020蓝桥杯省赛---java---A---4(七段码)
  9. 开源java性能分析工具_Java性能监控:您应该知道的5个开源工具
  10. 浅谈项目管理中的四要素
  11. 惊喜!想要高清背景壁纸图片素材,看这里
  12. frobenius范数_非负矩阵之Perron-Frobenius定理
  13. 第四季-专题21-USB驱动程序设计
  14. 总结之使用lowagie.text添加PDF水印
  15. flash小黄油安卓_安卓10 Root教程+一加官方字体优化包
  16. flog和flag_立个flag是什么意思什么梗? 不懂这操作你就out了!
  17. Niushop 商品分类、规格和类型之间的关系
  18. 未来无生经超级计算机,第三十二章 有些鸡肋的未来无生经
  19. 国仁网络资讯:抖音都有哪些运营技巧;抖音算法机制是什么?
  20. 2020年前端学习的新路径

热门文章

  1. (78)FPGA时钟激励(forever)
  2. keil MDK编译器警告和错误详解(不定期更新)
  3. 我的第一个MPI程序:利用矩形规则计算pi
  4. UDP与TCP对比,TCP保证可靠性传输的详细说明
  5. 我的世界java什么时候打折_十周年特别纪念!微软《我的世界》游戏全平台最高折扣50% - IT之家...
  6. 文本删除空行_Word的空行、空格、页眉线删不了?8秒一次性处理,教你删掉它们...
  7. 学计算机不会重装系统正常吗,系统重装不了的原因是什么 重装不了系统的解决方法【图文】...
  8. 用Java编辑实现warshall算法_warshall算法 java实现
  9. js java传参乱码_【技术贴】解决前台js传参中文乱码
  10. 使用代理_工具的使用|MSF搭建socks代理