修改基本表的基本语句:
ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ]
[ DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ]
[ALTER COLUMN <列名><数据类型> ] ;
其中
<表名>是要修改的基本表
ADD子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件
例:alter table student add phoneno int; 向基本表student中增加phoneno列,数据类型为int型。
alter table student add unique( phoneno);向基本表中的phoneno列增加唯一性约束条件。
DROP COLUMN子句用于删除表中的列
例:alter table sd drop column grade; 删除基本表sd中的grade列。
如果指定了CASCADE短语,则自动删除引用了该列的其他对象
如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库管理系统将拒绝删除该列
DROP CONSTRAINT子句用于删除指定的完整性约束条件
例:alter table sc drop constraint FK;删除表sc中的FK约束
ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型
例: alter table sc alter column grade char(10);将sc表中的grade列的数据类型改为char(10)
删除基本表:
DROP TABLE <表名>[RESTRICT| CASCADE];
RESTRICT:删除表是有限制的。
欲删除的基本表不能被其他表的约束所引用
如果存在依赖该表的对象,则此表不能被删除
CASCADE:删除该表没有限制。
在删除基本表的同时,相关的依赖对象一起删除
例: 删除Student表
DROP TABLE Student CASCADE;
基本表定义被删除,数据被删除
表上建立的索引、视图、触发器等一般也将被删除
数据更新:
1.插入数据
两种插入数据方式
①插入元组
②插入子查询结果:可以一次插入多个元组
语句格式
INSERT
INTO <表名> [(<属性列1>[,<属性列2 >…)]
VALUES (<常量1> [,<常量2>]… );
INTO子句
指定要插入数据的表名及属性列
属性列的顺序可与表定义中的顺序不一致
没有指定属性列:表示要插入的是一条完整的元组,且属性列属性与表定义中的顺序一致
指定部分属性列:插入的元组在其余属性列上取空值
VALUES子句
提供的值必须与INTO子句匹配
值的个数
值的类型
insert
into 选课
values(
'020204', '103', '71'
)*/
即在基本表‘选课’中插入数据’020204’, ‘103’, ‘71’。数据的排序与表中列的排序相同,不然不对应。
INSERT
INTO SC(Sno,Cno)
VALUES ('201215128 ',' 1 ');
插入一条选课记录( ‘200215128’,'1 ')关系数据库管理系统将在新插入记录的Grade列上自动地
赋空值。即
INSERT
INTO SC(Sno, Cno , Grade)
VALUES (' 201215128 ',' 1 ',NULL);
插入子查询结果:
语句格式
INSERT
INTO <表名> [(<属性列1> [,<属性列2>… )]
子查询;
INTO子句
子查询
SELECT子句目标列必须与INTO子句匹配
值的个数
值的类型
/*求信息院学生的选课课程及成绩,把数据放在一个新表*/
use 学生_课程
go
create table sd
(sno char(10),
name char(13),
course char(20),
grade int)
go
insert
into sd(sno,name,course,grade)
select 学生.学号,姓名,课程名,成绩
from 学生,课程,选课
where 学院='信息' and 学生.学号=选课.学号 and 选课.课程号=课程.课程号;
修改数据
语句格式
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>];
功能
修改指定表中满足WHERE子句条件的元组
SET子句给出<表达式>的值用于取代相应的属性列
如果省略WHERE子句,表示要修改表中的所有元组
有三种修改方式:
1.修改某一个元组的值
2.修改多个元组的值
3.带子查询的修改语句
/*修改表中某一属性的数据*/
update sd
set grade = 87
where sno='020101' and course='英语'
即将表sd中符合学号为020101且选修课程为英语的学生的成绩改为87。
/*修改表中某列的所有数据*/
update sd
set grade=grade+1;
/*将计算机科学系全体学生的成绩置零*/
UPDATE SC
SET Grade=0
WHERE Sno IN
(SELETE Sno
FROM Student
WHERE Sdept= 'CS' );
删除数据
语句格式
DELETE
FROM <表名>
[WHERE <条件>];
功能
删除指定表中满足WHERE子句条件的元组
WHERE子句
指定要删除的元组
缺省表示要删除表中的全部元组,表的定义仍在字典中
同修改数据一样有三种删除方式:
1.删除某一个元组的值
2.删除多个元组的值
3.带子查询的删除语句
/* 删除数据*/
delete
from sd
where sno='020101' and grade=86;
删除基本表sd中符合学号为020101且成绩为86的元组(就是一行的数据)。
/*删除所有的学生选课记录*/
DELETE
FROM SC;
/*删除计算机科学系所有学生的选课记录*/
DELETE
FROM SC
WHERE Sno IN
(SELETE Sno
FROM Student
WHERE Sdept= 'CS') ;