背景

本学期在北京大学选修了《数据库概论》的实验班课程,由于 SQL 语法并不是特别理论的内容,因此课上暂时也没有特别展开。出于探索数据库领域的兴趣,使用国内普遍使用的数据库软件 MySQL 实践《数据库系统概念》中若干 SQL 语句主题;出于方便描述考虑,主要使用命令行界面操作。

MySQL 的安装

在 Mac OS X 下使用 brew install mysql 简单的安装 MySQL,其他的安装方式不作介绍。

大学模式的导入

首先打开 MySQL 的 Server 服务。

  1. $ mysql.server start
  2. Starting MySQL
  3. . SUCCESS!

接着使用命令 mysqladmin -uroot create db-book 创建数据库 db-book 作为我们的试验场,这里 -uroot 根据具体的 MySQL 账号密码可能有所区别,默认情况下如此。

然后使用命令 mysql -uroot 接入 MySQL 命令行界面,输入 show databases; 看到输出的数据库列表中存在 db-book 确认数据库创建成功,输入 use db-book 切换到 db-book 数据库。

从 db-book.com 网站找到 MySQL 建表和插入小规模数据的 SQL 文件,输入下面命令执行。也可将末尾附录代码按照注释标记的文件名保存到当前目录的对应文件中。

  1. mysql> \. DDL-MySQL+drop.sql
  2. mysql> \. smallRelationsInsertFile.sql

最后按照下面方式测试,确认数据导入成功。

  1. mysql> show tables;
  2. +-------------------+
  3. | Tables_in_db-book |
  4. +-------------------+
  5. | advisor |
  6. | classroom |
  7. | course |
  8. | department |
  9. | instructor |
  10. | prereq |
  11. | section |
  12. | student |
  13. | takes |
  14. | teaches |
  15. | time_slot |
  16. +-------------------+
  17. 11 rows in set (0.00 sec)
  18. mysql> select * from advisor;
  19. +-------+-------+
  20. | s_ID | i_ID |
  21. +-------+-------+
  22. | 12345 | 10101 |
  23. | 44553 | 22222 |
  24. | 45678 | 22222 |
  25. | 00128 | 45565 |
  26. | 76543 | 45565 |
  27. | 23121 | 76543 |
  28. | 98988 | 76766 |
  29. | 76653 | 98345 |
  30. | 98765 | 98345 |
  31. +-------+-------+
  32. 9 rows in set (0.01 sec)

附录

把下面文件保存为 DDL-MySQL+drop.sql,执行时可能会因为 drop 命令报警告,这是因为新数据库没有表,不用太在意,忽略即可。

  1. drop table prereq;
  2. drop table time_slot;
  3. drop table advisor;
  4. drop table takes;
  5. drop table student;
  6. drop table teaches;
  7. drop table section;
  8. drop table instructor;
  9. drop table course;
  10. drop table department;
  11. drop table classroom;
  12. create table classroom
  13. (building varchar(15),
  14. room_number varchar(7),
  15. capacity numeric(4,0),
  16. primary key (building, room_number)
  17. );
  18. create table department
  19. (dept_name varchar(20),
  20. building varchar(15),
  21. budget numeric(12,2) check (budget > 0),
  22. primary key (dept_name)
  23. );
  24. create table course
  25. (course_id varchar(8),
  26. title varchar(50),
  27. dept_name varchar(20),
  28. credits numeric(2,0) check (credits > 0),
  29. primary key (course_id),
  30. foreign key (dept_name) references department(dept_name)
  31. on delete set null
  32. );
  33. create table instructor
  34. (ID varchar(5),
  35. name varchar(20) not null,
  36. dept_name varchar(20),
  37. salary numeric(8,2) check (salary > 29000),
  38. primary key (ID),
  39. foreign key (dept_name) references department(dept_name)
  40. on delete set null
  41. );
  42. create table section
  43. (course_id varchar(8),
  44. sec_id varchar(8),
  45. semester varchar(6)
  46. check (semester in ('Fall', 'Winter', 'Spring', 'Summer')),
  47. year numeric(4,0) check (year > 1701 and year < 2100),
  48. building varchar(15),
  49. room_number varchar(7),
  50. time_slot_id varchar(4),
  51. primary key (course_id, sec_id, semester, year),
  52. foreign key (course_id) references course(course_id)
  53. on delete cascade,
  54. foreign key (building, room_number) references classroom(building, room_number)
  55. on delete set null
  56. );
  57. create table teaches
  58. (ID varchar(5),
  59. course_id varchar(8),
  60. sec_id varchar(8),
  61. semester varchar(6),
  62. year numeric(4,0),
  63. primary key (ID, course_id, sec_id, semester, year),
  64. foreign key (course_id,sec_id, semester, year) references section(course_id,sec_id, semester, year)
  65. on delete cascade,
  66. foreign key (ID) references instructor(ID)
  67. on delete cascade
  68. );
  69. create table student
  70. (ID varchar(5),
  71. name varchar(20) not null,
  72. dept_name varchar(20),
  73. tot_cred numeric(3,0) check (tot_cred >= 0),
  74. primary key (ID),
  75. foreign key (dept_name) references department(dept_name)
  76. on delete set null
  77. );
  78. create table takes
  79. (ID varchar(5),
  80. course_id varchar(8),
  81. sec_id varchar(8),
  82. semester varchar(6),
  83. year numeric(4,0),
  84. grade varchar(2),
  85. primary key (ID, course_id, sec_id, semester, year),
  86. foreign key (course_id,sec_id, semester, year) references section(course_id,sec_id, semester, year)
  87. on delete cascade,
  88. foreign key (ID) references student(ID)
  89. on delete cascade
  90. );
  91. create table advisor
  92. (s_ID varchar(5),
  93. i_ID varchar(5),
  94. primary key (s_ID),
  95. foreign key (i_ID) references instructor (ID)
  96. on delete set null,
  97. foreign key (s_ID) references student (ID)
  98. on delete cascade
  99. );
  100. create table time_slot
  101. (time_slot_id varchar(4),
  102. day varchar(1),
  103. start_hr numeric(2) check (start_hr >= 0 and start_hr < 24),
  104. start_min numeric(2) check (start_min >= 0 and start_min < 60),
  105. end_hr numeric(2) check (end_hr >= 0 and end_hr < 24),
  106. end_min numeric(2) check (end_min >= 0 and end_min < 60),
  107. primary key (time_slot_id, day, start_hr, start_min)
  108. );
  109. create table prereq
  110. (course_id varchar(8),
  111. prereq_id varchar(8),
  112. primary key (course_id, prereq_id),
  113. foreign key (course_id) references course(course_id)
  114. on delete cascade,
  115. foreign key (prereq_id) references course(course_id)
  116. )

把下面的文件保存为 smallRelationsInsertFile.sql

  1. delete from prereq;
  2. delete from time_slot;
  3. delete from advisor;
  4. delete from takes;
  5. delete from student;
  6. delete from teaches;
  7. delete from section;
  8. delete from instructor;
  9. delete from course;
  10. delete from department;
  11. delete from classroom;
  12. insert into classroom values ('Packard', '101', '500');
  13. insert into classroom values ('Painter', '514', '10');
  14. insert into classroom values ('Taylor', '3128', '70');
  15. insert into classroom values ('Watson', '100', '30');
  16. insert into classroom values ('Watson', '120', '50');
  17. insert into department values ('Biology', 'Watson', '90000');
  18. insert into department values ('Comp. Sci.', 'Taylor', '100000');
  19. insert into department values ('Elec. Eng.', 'Taylor', '85000');
  20. insert into department values ('Finance', 'Painter', '120000');
  21. insert into department values ('History', 'Painter', '50000');
  22. insert into department values ('Music', 'Packard', '80000');
  23. insert into department values ('Physics', 'Watson', '70000');
  24. insert into course values ('BIO-101', 'Intro. to Biology', 'Biology', '4');
  25. insert into course values ('BIO-301', 'Genetics', 'Biology', '4');
  26. insert into course values ('BIO-399', 'Computational Biology', 'Biology', '3');
  27. insert into course values ('CS-101', 'Intro. to Computer Science', 'Comp. Sci.', '4');
  28. insert into course values ('CS-190', 'Game Design', 'Comp. Sci.', '4');
  29. insert into course values ('CS-315', 'Robotics', 'Comp. Sci.', '3');
  30. insert into course values ('CS-319', 'Image Processing', 'Comp. Sci.', '3');
  31. insert into course values ('CS-347', 'Database System Concepts', 'Comp. Sci.', '3');
  32. insert into course values ('EE-181', 'Intro. to Digital Systems', 'Elec. Eng.', '3');
  33. insert into course values ('FIN-201', 'Investment Banking', 'Finance', '3');
  34. insert into course values ('HIS-351', 'World History', 'History', '3');
  35. insert into course values ('MU-199', 'Music Video Production', 'Music', '3');
  36. insert into course values ('PHY-101', 'Physical Principles', 'Physics', '4');
  37. insert into instructor values ('10101', 'Srinivasan', 'Comp. Sci.', '65000');
  38. insert into instructor values ('12121', 'Wu', 'Finance', '90000');
  39. insert into instructor values ('15151', 'Mozart', 'Music', '40000');
  40. insert into instructor values ('22222', 'Einstein', 'Physics', '95000');
  41. insert into instructor values ('32343', 'El Said', 'History', '60000');
  42. insert into instructor values ('33456', 'Gold', 'Physics', '87000');
  43. insert into instructor values ('45565', 'Katz', 'Comp. Sci.', '75000');
  44. insert into instructor values ('58583', 'Califieri', 'History', '62000');
  45. insert into instructor values ('76543', 'Singh', 'Finance', '80000');
  46. insert into instructor values ('76766', 'Crick', 'Biology', '72000');
  47. insert into instructor values ('83821', 'Brandt', 'Comp. Sci.', '92000');
  48. insert into instructor values ('98345', 'Kim', 'Elec. Eng.', '80000');
  49. insert into section values ('BIO-101', '1', 'Summer', '2009', 'Painter', '514', 'B');
  50. insert into section values ('BIO-301', '1', 'Summer', '2010', 'Painter', '514', 'A');
  51. insert into section values ('CS-101', '1', 'Fall', '2009', 'Packard', '101', 'H');
  52. insert into section values ('CS-101', '1', 'Spring', '2010', 'Packard', '101', 'F');
  53. insert into section values ('CS-190', '1', 'Spring', '2009', 'Taylor', '3128', 'E');
  54. insert into section values ('CS-190', '2', 'Spring', '2009', 'Taylor', '3128', 'A');
  55. insert into section values ('CS-315', '1', 'Spring', '2010', 'Watson', '120', 'D');
  56. insert into section values ('CS-319', '1', 'Spring', '2010', 'Watson', '100', 'B');
  57. insert into section values ('CS-319', '2', 'Spring', '2010', 'Taylor', '3128', 'C');
  58. insert into section values ('CS-347', '1', 'Fall', '2009', 'Taylor', '3128', 'A');
  59. insert into section values ('EE-181', '1', 'Spring', '2009', 'Taylor', '3128', 'C');
  60. insert into section values ('FIN-201', '1', 'Spring', '2010', 'Packard', '101', 'B');
  61. insert into section values ('HIS-351', '1', 'Spring', '2010', 'Painter', '514', 'C');
  62. insert into section values ('MU-199', '1', 'Spring', '2010', 'Packard', '101', 'D');
  63. insert into section values ('PHY-101', '1', 'Fall', '2009', 'Watson', '100', 'A');
  64. insert into teaches values ('10101', 'CS-101', '1', 'Fall', '2009');
  65. insert into teaches values ('10101', 'CS-315', '1', 'Spring', '2010');
  66. insert into teaches values ('10101', 'CS-347', '1', 'Fall', '2009');
  67. insert into teaches values ('12121', 'FIN-201', '1', 'Spring', '2010');
  68. insert into teaches values ('15151', 'MU-199', '1', 'Spring', '2010');
  69. insert into teaches values ('22222', 'PHY-101', '1', 'Fall', '2009');
  70. insert into teaches values ('32343', 'HIS-351', '1', 'Spring', '2010');
  71. insert into teaches values ('45565', 'CS-101', '1', 'Spring', '2010');
  72. insert into teaches values ('45565', 'CS-319', '1', 'Spring', '2010');
  73. insert into teaches values ('76766', 'BIO-101', '1', 'Summer', '2009');
  74. insert into teaches values ('76766', 'BIO-301', '1', 'Summer', '2010');
  75. insert into teaches values ('83821', 'CS-190', '1', 'Spring', '2009');
  76. insert into teaches values ('83821', 'CS-190', '2', 'Spring', '2009');
  77. insert into teaches values ('83821', 'CS-319', '2', 'Spring', '2010');
  78. insert into teaches values ('98345', 'EE-181', '1', 'Spring', '2009');
  79. insert into student values ('00128', 'Zhang', 'Comp. Sci.', '102');
  80. insert into student values ('12345', 'Shankar', 'Comp. Sci.', '32');
  81. insert into student values ('19991', 'Brandt', 'History', '80');
  82. insert into student values ('23121', 'Chavez', 'Finance', '110');
  83. insert into student values ('44553', 'Peltier', 'Physics', '56');
  84. insert into student values ('45678', 'Levy', 'Physics', '46');
  85. insert into student values ('54321', 'Williams', 'Comp. Sci.', '54');
  86. insert into student values ('55739', 'Sanchez', 'Music', '38');
  87. insert into student values ('70557', 'Snow', 'Physics', '0');
  88. insert into student values ('76543', 'Brown', 'Comp. Sci.', '58');
  89. insert into student values ('76653', 'Aoi', 'Elec. Eng.', '60');
  90. insert into student values ('98765', 'Bourikas', 'Elec. Eng.', '98');
  91. insert into student values ('98988', 'Tanaka', 'Biology', '120');
  92. insert into takes values ('00128', 'CS-101', '1', 'Fall', '2009', 'A');
  93. insert into takes values ('00128', 'CS-347', '1', 'Fall', '2009', 'A-');
  94. insert into takes values ('12345', 'CS-101', '1', 'Fall', '2009', 'C');
  95. insert into takes values ('12345', 'CS-190', '2', 'Spring', '2009', 'A');
  96. insert into takes values ('12345', 'CS-315', '1', 'Spring', '2010', 'A');
  97. insert into takes values ('12345', 'CS-347', '1', 'Fall', '2009', 'A');
  98. insert into takes values ('19991', 'HIS-351', '1', 'Spring', '2010', 'B');
  99. insert into takes values ('23121', 'FIN-201', '1', 'Spring', '2010', 'C+');
  100. insert into takes values ('44553', 'PHY-101', '1', 'Fall', '2009', 'B-');
  101. insert into takes values ('45678', 'CS-101', '1', 'Fall', '2009', 'F');
  102. insert into takes values ('45678', 'CS-101', '1', 'Spring', '2010', 'B+');
  103. insert into takes values ('45678', 'CS-319', '1', 'Spring', '2010', 'B');
  104. insert into takes values ('54321', 'CS-101', '1', 'Fall', '2009', 'A-');
  105. insert into takes values ('54321', 'CS-190', '2', 'Spring', '2009', 'B+');
  106. insert into takes values ('55739', 'MU-199', '1', 'Spring', '2010', 'A-');
  107. insert into takes values ('76543', 'CS-101', '1', 'Fall', '2009', 'A');
  108. insert into takes values ('76543', 'CS-319', '2', 'Spring', '2010', 'A');
  109. insert into takes values ('76653', 'EE-181', '1', 'Spring', '2009', 'C');
  110. insert into takes values ('98765', 'CS-101', '1', 'Fall', '2009', 'C-');
  111. insert into takes values ('98765', 'CS-315', '1', 'Spring', '2010', 'B');
  112. insert into takes values ('98988', 'BIO-101', '1', 'Summer', '2009', 'A');
  113. insert into takes values ('98988', 'BIO-301', '1', 'Summer', '2010', null);
  114. insert into advisor values ('00128', '45565');
  115. insert into advisor values ('12345', '10101');
  116. insert into advisor values ('23121', '76543');
  117. insert into advisor values ('44553', '22222');
  118. insert into advisor values ('45678', '22222');
  119. insert into advisor values ('76543', '45565');
  120. insert into advisor values ('76653', '98345');
  121. insert into advisor values ('98765', '98345');
  122. insert into advisor values ('98988', '76766');
  123. insert into time_slot values ('A', 'M', '8', '0', '8', '50');
  124. insert into time_slot values ('A', 'W', '8', '0', '8', '50');
  125. insert into time_slot values ('A', 'F', '8', '0', '8', '50');
  126. insert into time_slot values ('B', 'M', '9', '0', '9', '50');
  127. insert into time_slot values ('B', 'W', '9', '0', '9', '50');
  128. insert into time_slot values ('B', 'F', '9', '0', '9', '50');
  129. insert into time_slot values ('C', 'M', '11', '0', '11', '50');
  130. insert into time_slot values ('C', 'W', '11', '0', '11', '50');
  131. insert into time_slot values ('C', 'F', '11', '0', '11', '50');
  132. insert into time_slot values ('D', 'M', '13', '0', '13', '50');
  133. insert into time_slot values ('D', 'W', '13', '0', '13', '50');
  134. insert into time_slot values ('D', 'F', '13', '0', '13', '50');
  135. insert into time_slot values ('E', 'T', '10', '30', '11', '45 ');
  136. insert into time_slot values ('E', 'R', '10', '30', '11', '45 ');
  137. insert into time_slot values ('F', 'T', '14', '30', '15', '45 ');
  138. insert into time_slot values ('F', 'R', '14', '30', '15', '45 ');
  139. insert into time_slot values ('G', 'M', '16', '0', '16', '50');
  140. insert into time_slot values ('G', 'W', '16', '0', '16', '50');
  141. insert into time_slot values ('G', 'F', '16', '0', '16', '50');
  142. insert into time_slot values ('H', 'W', '10', '0', '12', '30');
  143. insert into prereq values ('BIO-301', 'BIO-101');
  144. insert into prereq values ('BIO-399', 'BIO-101');
  145. insert into prereq values ('CS-190', 'CS-101');
  146. insert into prereq values ('CS-315', 'CS-101');
  147. insert into prereq values ('CS-319', 'CS-101');
  148. insert into prereq values ('CS-347', 'CS-101');
  149. insert into prereq values ('EE-181', 'PHY-101');

基于 MySQL 的数据库实践(准备工作)的更多相关文章

  1. 基于 MySQL 的数据库实践(基本查询)

    首先根据准备工作中的操作导入大学模式,打开数据库连接后进入到 MySQL 的交互界面,再使用命令 use db-book; 切换到 db-book 数据库. 单关系查询 SQL 查询的基本结构由三个子 ...

  2. 基于 MySQL 的数据库实践(自然连接)

    在基本查询一节的示例中,我们有从 instructor 和 teaches 表组合信息,匹配条件是 instructor.ID 等于 teaches.ID 的查询,ID 属性是两个表中具有相同名称的所 ...

  3. 新浪微博基于MySQL的分布式数据库实践

    提起微博,相信大家都是很了解的.但是有谁知道微博的数据库架构是怎样的呢?在今天举行的2011数据库技术大会上,新浪首席DBA杨海潮为我们详细解读了新浪微博的数据库架构——基于MySQL的分布式数据库实 ...

  4. 企业运维 | MySQL关系型数据库在Docker与Kubernetes容器环境中快速搭建部署主从实践

    [点击 关注「 WeiyiGeek」公众号 ] 设为「️ 星标」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 ...

  5. 在Jena框架下基于MySQL数据库实现本体的存取操作

    在Jena框架下基于MySQL数据库实现本体的存取操作 转自:http://blog.csdn.net/jtz_mpp/article/details/6224311 最近在做一个基于本体的管理系统. ...

  6. 基于Mysql数据库亿级数据下的分库分表方案

    移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据的用户行为分析等这样的分析,都需要依靠数据都统计和分析,当数据量小时,问题没有暴露出来,数据库方面的优化显得不太重要,一旦数据量越来越大时, ...

  7. 0818基于360开源数据库流量审计MySQL Sniffer

    开源数据库流量审计MySQL Sniffer 我最推崇的数据库安全产品就是基于流量的数据库审计,因为它不需要更改网络结构,并且也是最关键的是,不影响数据库服务器性能,不用苦口婆心的劝数据库管理员安装监 ...

  8. 基于 MySQL Binlog 的 Elasticsearch 数据同步实践 原

    一.背景 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品.订单等数据的多维度检索. 使用 Elasticsearch 存储业务数据可以 ...

  9. 基于代理的数据库分库分表框架 Mycat实践

    192.168.199.75 MySQL . MyCAT master 192.168.199.74 MySQL slave 192.168.199.76 MySQL standby master 如 ...

随机推荐

  1. 误删 /user/bin目录后的补救

    当危险的动作发生, 误删 /user/bin目录后的补救 以下是昨天晚上真实的误操作现场,模拟记录一下 (这是测试环境,所以操作得很随意,有些执行动作很不规范) 在上面编译一个软件Dboop,完事以后 ...

  2. spring boot高性能实现二维码扫码登录(中)——Redis版

    前言 本打算用CountDownLatch来实现,但有个问题我没有考虑,就是当用户APP没有扫二维码的时候,线程会阻塞5分钟,这反而造成性能的下降.好吧,现在回归传统方式:前端ajax每隔1秒或2秒发 ...

  3. 前端的UI设计与交互之数据录入篇

    数据录入是获取对象信息的重要交互方式,用户会频繁的增加.修改或删除信息.多种多样的文本录入和选择录入方式帮助用户更加清晰和高效的完成这项体验.设计者应当注意这几点:为初级用户/偶尔访问的用户提供简单易 ...

  4. saltStack 安装部署

    1.saltStack 服务架构介绍 SaltStack 是一种基于C/S架构的服务模式,在SaltStack架构中服务器端叫作Master,客户端叫作Minion,传统C/S架构为:客户端发送请求给 ...

  5. New UWP Community Toolkit - XAML Brushes

    概述 上一篇 New UWP Community Toolkit 文章中,我们对 V2.2.0 版本的重要更新做了简单回顾.接下来会针对每个重要更新,结合 SDK 源代码和调用代码详细讲解. 本篇我们 ...

  6. 功能测试很low?不能升级到高级测试工程师?

    功能测试很low?不能升级到高级测试工程师? 功能测试很low?功能测试很简单?功能测试就是黑盒测试?功能测试没有技术含量?功能测试工资低?只会功能测试没有竞争力?功能测试这活初中生都可以干?功能测试 ...

  7. java中volatile

    volatile用来修饰变量.Java 语言中的 volatile 变量可以被看作是一种 "程度较轻的 synchronized":与 synchronized 块相比,volat ...

  8. Alpha冲刺Day8

    Alpha冲刺Day8 一:站立式会议 今日安排: 经过为期5天的冲刺,基本完成企业人员模块的开发.因第三方机构与企业存在委托的关系.第三方人员对于风险的自查.风险列表的展示以及自查风险的统计展示(包 ...

  9. 201621123031 《Java程序设计》第8周学习总结

    作业08-集合 1.本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2.书面作业 1. ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码 ...

  10. python的Collections 模块

    Collections 模块 知识点 Counter 类 defaultdict 类 namedtuple 类 在这个实验我们会学习 Collections 模块.这个模块实现了一些很好的数据结构,它 ...