1 写在前面
本次练习接上一篇内容:点一下我啦
在这里还是要说笔者使用的是MySQL 8.0版本的数据库,小伙伴注意不同数据库之间的有些语法不同哦!
2 实验准备
毕竟有上次的胡乱捣鼓,所以这里我们重新来过。当然一开始就是开心的删库不跑路(说错了,是删表,嘻嘻),那么如何一次性删除一个数据库中所有的表呢?当然是一个一个的删啦,你在想啥呢?虽然网上有一些方法,但是真的非常非常不靠谱,我还不如自己写个代码循环删呢!虽然不靠谱,还是给大家看看!
# 查询要删除数据库中所有的表,使用字符串连接形成删除表的语法,
#接下来不用我说大家都懂了,害,浪费我时间
select concat('DROP TABLE IF EXISTS ', table_name, ';') from information_schema.tables where table_schema='test_simple_practice';
上面的方法比较傻,所以我查阅官方文档,终于皇天不负有心人,比他的方法聪明那么一点点,只不过只在MySQL上试验过,其他数据库不清楚,如果有小伙伴使用其他数据库,可以做做试试并告诉我一下。
#首先使用group_concat()函数将查询结果集转化为字符串
SELECT group_concat(table_name) FROM information_schema.`tables` WHERE table_schema='test_simple_practice'
#结果:department,score,teach,temp,user_info,太贴心了,接着使用以下语法
#语法:DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCADE]
DROP TABLE IF EXISTS department,score,teach,temp,user_info;
但是可能大家会问,既然返回的是一个字符串,为什么不能直接放在DROP语句后面呢?这个笔者也试过,可惜不行,呜呜呜!
删除完数据表了,那么就按照这篇博文的爸爸(点一下就可以看到了)来创建数据库中的表吧,早知道上次实验的时候先备份的(吐血)!
CREATE TABLE IF NOT EXISTS Department(
DEPTNO CHAR(2),
DEPTNAME CHAR(10),
PRIMARY KEY(DEPTNO)
);
CREATE TABLE IF NOT EXISTS Student(
SNO CHAR(5),
SNAME CHAR(10) NOT NULL,
SDEPT CHAR(2) NOT NULL,
SCLASS CHAR(2) NOT NULL,
SSEX CHAR(2),
SAGE NUMERIC(2),
PRIMARY KEY(SNO),
CONSTRAINT fk_student_sdept FOREIGN KEY(SDEPT) REFERENCES Department(DEPTNO)
);
CREATE TABLE IF NOT EXISTS Course(
CNO CHAR(3),
CNAME CHAR(16) NOT NULL,
CTIME NUMERIC(3),
PRIMARY KEY(CNO),
UNIQUE(CNAME)
);
CREATE TABLE IF NOT EXISTS Teach(
TNAME CHAR(8),
TSEX CHAR(2),
CNO CHAR(3),
TDATE DATE,
TDEPT CHAR(2),
PRIMARY KEY(TNAME, CNO, TDEPT),
CONSTRAINT fk_teach_course FOREIGN KEY(CNO) REFERENCES Course(CNO)
);
CREATE TABLE IF NOT EXISTS SCORE(
SNO CHAR(5),
CNO CHAR(3),
SCORE NUMERIC(5,2),
PRIMARY KEY(SNO, CNO),
CONSTRAINT fk_score_student FOREIGN KEY(SNO) REFERENCES Student(SNO),
CONSTRAINT fk_score_course FOREIGN KEY(CNO) REFERENCES Course(CNO)
);
好了,现在就进行数据导入吧!
#Department表信息导入
INSERT INTO Department(DEPTNO,DEPTNAME)
VALUES('CS','计算机系'),('MA','数学系'),('IS','信息系');
#Student表信息导入
INSERT INTO Student