练习二 表的查看、修改和删除
一、表结构的修改
1、为student表格增加籍贯列jiguan,数据类型varchar,字段宽度为20字节,不允许输入空值。
语法:ALTER TABLE table_name ADD 属性名 属性类型 NOT NULL;
命令如下:
修改的话:alter table table_name modify 属性名 属性类型 not null;
2、重命名student表的籍贯列“jiguan”为“jg”。
语法:ALTER TABLE table_name CHANGE 旧属性名 新属性名 旧数据类型;
命令如下;
3、删除student表中的jg字段。
语法:ALTER TABLE table_name DROP 属性名;
命令如下:
4、将student表中的sdept字段长度改为20
语法:ALTER TABLE table_name MODIFY 属性名 数据类型;
--数据类型为修改后的数据类型
命令如下:
5、在sno字段上为Student表设置主键。
语法:ALTER TABLE table_name ADD PRIMARY key 属性名;
命令如下:
6、在Cno字段上为Course表设置主键。
命令如下:
7、为SC表的Sno和Cno设置外键。
命令如下:
首先显示一下三个表:
添加外键的操作:
添加外键之后的sc表:
字段Sno和字段Cno的key位置上出现了MUL的字样
8、删除键(如有外键的话,要先删除外键,再删除主键)
一、如何删除外键?
分布删除外键:
第一步:先删除外键:
alter table table_name drop foreign key 外键名;
第二步:再删除索引:
alter table table_name drop index 外键名;
/*但是注意一点:MySQL不支持直接删除外键:alter table table_name drop constraint 外键名;*/
我发现alter table table_name drop constraint 外键名;和alter table table_name drop foreign key 外键名;起到的作用是一样的
And
------------------------------------其实到这一步就已经删除外键了(如果再次添加外键也是可以的)
如果要完全删除这个键的话就需要
alter table table_name drop index 外键名;
而且我查看sc表上的Key发现就没有MUL
关于删除外键约束需要注意的几点
* 从表的外键通常为主表的主键(就像这里的sc表的Sno是student的主键、Cno是course的主键)
* 从表里外键的数据类型必须与主表中主键的数据类型一致
* 主表发生变化时应注意主表与从表的数据的一致性问题
- 如何删除主键?
alter table table_name drop primary key;//因为主键唯一所以删除的对象是表格
对于有自定义名字的主键:
添加主键:alter table table_name add constraint p_pk primary key(Sname);//其中p_pk是这个主键的名字,就像外键一样。
删除主键:alter table table_name drop constraint p_pk;
二、数据操作
1、使用insert-SQL命令向上述表中输入如下数据记录。
学生关系表Student
Sno | Sname | Ssex | Sbirthday | Sdept | Speciality |
20180101 | 李勇 | 男 | 2000-01-12 | CS | 计算机应用 |
20180201 | 刘晨 | 女 | 2001-06-04 | IS | 电子商务 |
20180301 | 王敏 | 女 | 2002-12-23 | MA | 数学 |
20180202 | 张立 | 男 | 2001-08-25 | IS | 电子商务 |
例:insert into student(sno,sname) values('20180101','李勇');
命令如下:
Sno | Cno | Degree |
20180101 | C01 | 92 |
20180101 | C02 | 85 |
20180101 | C03 | 88 |
20180201 | C02 | 90 |
20180201 | C03 | 80 |
20180301 | C01 | 89 |
20180301 | C02 | 87 |
20180202 | C01 | 87 |
课程关系表Course 成绩表SC
Cno | Cname |
C01 | 数据库 |
C02 | 数学 |
C03 | 信息系统 |
C04 | 操作系统 |
命令如下:
课程关系表Course:
成绩表:
刚开始我发现初始的decimal精度太小,输入的值会越界
然后我对Degree的精度作了一些修改:
就可以正常的输入了
2、使用update命令将SC表C02课程的Degree字段值全部加5分。
命令如下:
3、删除SC表中C02课程的全部记录。
命令如下:
4、查看SC表格中所有数据。
命令如下:
- 思考题
1、MySQL的数据库文件有几种?扩展名分别是什么?
种类有很多,这里我找到一篇blog介绍数据库文件,很详细
2、如何实现数据库的备份和还原?
3、在定义基本表语句时,NOT NULL参数的作用是什么?
该属性的值不可以为空值
4、主码可以建立在“值可以为NULL”的列上吗?
不可以