笨办法学 Python · 续 练习 43:SQL 管理

练习 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语句。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容