前言
?个人主页:? :✨✨✨初阶牛✨✨✨
?推荐专栏: ??? c语言初阶
?个人信条: ?知行合一
?本篇简介:>:
在上一篇的最后,牛牛介绍了怎么创建表,本篇牛牛介绍如何管理表的结构,以及管理表中的数据(添加,修改和删除).
目录
前言一、通过sql语句管理表的结构2.1 "添加"列 和 "删除"列(1) 添加列:(2) 删除列: 2.2 "添加"约束 和 "删除"约束(1) 添加约束(2) 删除约束: 二、通过sql语句添加、修改、删除表中的数据.(1) 插入数据(2) 修改数据(3) 删除数据
本片中用到的"数据库"和"表"是上一篇文章创建的,不愿意重新创建"表"的可以点这里哦!----传送门
如果不了解数据库中的数据类型–传送门
一、通过sql语句管理表的结构
2.1 "添加"列 和 "删除"列
(1) 添加列:
添加列的格式:
alter table 表名--alter表示修改add 列名 数据类型
示例1:
给student表添加Stature(身高)列,类型为numeric(4,2),允许为空值,且身高需小于3.0米.
语句:
alter table studentadd stature numeric(4,2)--add表示后面写要增加的列名及相应的参数check (stature<=3.0 and stature >=0)--可直接在后面跟上相应的check约束
示例2:
给student表增加所在系sdept列,字符型,长度为2,不允许为空值
语句:
alter table studentadd sdept char (2) not null
注意:如果在插入要求非空的属性,且student表中已经有数据时,是不能成功插入的.
例如:
假如student表中已经有以下数据:
这时我们插入一个含有非空的属性列.
alter table studentadd sdept char (2) not null
![](http://zhangshiyu.com/zb_users/upload/2023/04/20230402093704168039942493987.png)
出错原因:该表里已经有数据了,所以再添加字段时,已经有的数据该字段应该是空,但是我们添加字段时设定的是非空,所以就矛盾了,报错了。
示例3:
给student表增加postcode(邮政编码)列,字符型,长度为6,可以为空,但是只能出现数字.
代码:
alter table studentadd postcade char(6)check (postcade like'[1-9][0-9][0-9][0-9][0-9][0-9]')
(2) 删除列:
删除列的格式:
alter table 要修改的表名drop column 要删除的列名
示例1:删除student表身高stature列.
还记得,上面我们在添加stature列的时候设置了约束条件,此时若要删除该列就必须先删除约束条件,所以我们应该先找到约束条件再删除.
先试着删除,然后找到约束条件语句:
alter table studentdrop column Stature
![](http://zhangshiyu.com/zb_users/upload/2023/04/20230402093704168039942474118.png)
先删除约束条件:
alter table studentdrop constraint CK__Student__stature__5CD6CB2B
再:删除stature列:
alter table studentdrop column Stature
2.2 "添加"约束 和 "删除"约束
(1) 添加约束
格式:
alter table 要添加约束列所在的表名add constraint 约束名约束条件
示例1: 添加条件约束
给student表添加约束:入学时间必须在出生年月之后.
语句:
alter table studentadd constraint birth1--birth1是约束名check(birth<entrance_date)
示例2:添加默认约束
b.给sc表的成绩列(grade)增加默认值约束,默认值为0.
语句:
alter table scadd constraint grade1--grade1为约束名default 0 for grade
(2) 删除约束:
格式:
alter table 要删除的约束列所在的表的表名drop constraint 约束名
示例:删除grade列的默认值约束
alter table scdrop constraint grade1
二、通过sql语句添加、修改、删除表中的数据.
前面的各种操作是对表的结构定义进行设置,接下来我们详解如何对表中的数据进行修改.
(1) 插入数据
格式:
insert into 表名 values(数据1,数据2,数据3……)
用sql语句分别在student表、course表和sc表插入下列数据:
student表
course表
sc表
①向student表添加数据:
insert into student values ('20110001','张虹','男','1922-09-01','051','2011-09-01','南京','cs','200413');insert into student values ('20110002','林红','女','1991-11-12','051','2011-09-01','北京','Cs','100010');insert into student values ('20110103','赵青','男','1993-05-11','061','2011-09-01','上海','MS','200013');
②、向Course表中添加数据
insert into course values ('001','高数','96','6');insert into course values ('002','c语言程序设计','80','5');insert into course values ('003','JAVA语言程序设计','48','3');insert into course values ('004','visual Basic','48','4');
③向sc表添加数据:
insert into sc values ('20110001','001',89);insert into sc values ('20110001','002',78);insert into sc values ('20110001','003',89);insert into sc values ('20110002','002',60);insert into sc values ('20110103','001',80);
思考题:
(1)执行如下语句:
insert into Student(Sno,Sname,Sex) values('20101101', '赵青','男')
问:该语句能成功执行吗?为什么?
答:不能成功执行,上面在添加’sdept’列时设置了不允许为空,所以不能将值NULL插入列’sdept列’中
(2)执行如下语句:
insert into sc values('20110103','005',80)
问:该语句能成功执行吗?为什么?
答:不能成功执行,因为sc表中的学号“005”的同学在Course表中不存在。而sc表中的Cno是作为Course表的外键存在的,所以不能成功执行。
(2) 修改数据
示例1:
使用T-sQL语句,将Course表中的课程号为:002的学分改为4,总学时改为64。
补充: SET是SQL Server 中对已经定义的变量赋值的方式,经常与update语句一起使用。
update Courseset Credit=4where Cno='002'update courseset Total_perior=64where Cno='002'
示例2: 使用T-SQL语句,将sc表中的选修了"002"课程的同学的成绩*80%。
update scset Grade=Grade*0.8where Cno='002'
(3) 删除数据
删除表中的多行
示例1:
删除student表中张三和李四的信息.
delete from student where sname in('张三','李四')
示例2:
使用T-SQL语句,删除选修了“c语言程序设计”的学生的选课记录
delete from Course where Cno in(select Cno from Coursewhere Cname='c语言程序设计')
删除时,发现存在外键约束,且约束名为FK__Sc__Cno__3B75D760
,则先删除约束
--删除约束:alter table scdrop constraint FK__Sc__Cno__3B75D760--删除记录:delete from Course where Cno in(select Cno from Coursewhere Cname='c语言程序设计')
示例3:
使用T-SQL语句,删除所有的学生选课记录。
delete from sc
最后记得将数据再插入进去哦,我们这只是演示一下删除数据而已.
下次再见,小伙伴们一起加油吧 !
![](http://zhangshiyu.com/zb_users/upload/2023/04/20230402093709168039942996824.gif)