(一)ADD
基本格式:
1. ALTER TABLE <表名> 2. ADD 新属性名 新属性类型
例:alter table s1 add tele char(12):增加一个电话号码(tele)属性
注:
新增的属性不能定义为not null
不论基本表原来是否已有数据,新增加的列一律为空
补充:外键的添加和删除
department为主表,employee为从表,employee的dep_id是外键,对应department的id为主键
添加:
alter table employee add constraint emp_depid_fk foreign key (dep_id) references department(id);
emp_depid_fk:是外键约束名
删除:
alter table employee drop foreign key emp_depid_fk;
(二)ALTER COLUMN
基本格式
1. ALTER TABLE <表名> 2. ALTER COLUMN 属性名 新属性类型
例:ALTER TABLE student alter Sage INT;
将年龄的数据改为整数
(三)DROP删除原有属性
格式
ALTER TABLE 基本表名 DROP 属性名[CASCADE|RESTRICT];
例:
ALTER TABLE Student DROP S_entrance RESTRICT;
在表Student中删除S_entrance属性(没有视图或约束引用S_entrance时才能删除)
ALTER TABLE Student DROP COLUMN Sage CASCADE
在表Student中删除Sage属性,并且将引用该属性的所有视图和约束也一起删除
注:
ALTER TABLE Student DROP COLUMN S_entrance RESTRICT;
sql server不支持删除列时的restrict选项
ALTER TABLE Student DROP COLUMN S_entrance;
不加restrict可以
(cascade同理)
cascade,set,null,no action的区别:
1.首先明确一个概念,假如表A(id,name,foreign_id),表B(foreign_id,name),我们说表A参考了表B的主键作为其外键使用,所以B表示父表,A表是子表
2.删除和更新有四种设置方式
(1)cascade:级联,当父表更新、删除,子表会同步更新和删除
(2)set null:置空,当父表更新、删除的时候,字表会把外键字段变为null,所以这个时候设计表的时候该字段要允许为null,否则会出错
(3)restrict:父表在删除和更新记录的时候,要在子表中检查是否有有关该父表要更新和删除的记录,如果有,则不允许删除个更改
(4)no action:和restrict一样
如果想该语句结构,但是不想破坏旧表,例如:原表为student
select * Into student1 from student
这样新表student1的数据和旧表相同了
(四)DROP删除基本表
格式:
DROP TABLE <表名> [RESTRICT|CASCADE];
CASCADE(级联):有视图依赖于表也能删除
●删除该表没有限制
●再删除基本表的同时,相关的依赖对象一起删除
RESTRICT(限制):有视图依赖于表,则不能删除
●删除表是有限制的
●欲删除基本表不能被其他表的约束所引用
●如果存在依赖该表的对象,则此表不能被删除
例:创建一个视图
create view student1_dept10 as select sno,sname,sex from student1 where deptno=10;
在标准SQL中
视图student1_dept10依赖于student1,要删除student1,只能用cascade,不能用restrict
DROP TABLE student1 CASCADE;
发现删除成功
但是在SQL SERVER中
1. DROP TABLE student1 RESTRICT; 2. 3. DROP TABLE student1 CASCADE;
两个都是删除失败的
只有
DROP TABLE student1;
才能成功删除,删除表后表上所依赖的视图也失效了
总结:
SQL SERVER的DROP TABLE,ALTER TABLE...DROP COLUMN不支持restrict和cascade。
(五)INDEX定义索引
格式:
create [UNIQUE][CLUSTER]INDEX<索引名> ON<表名> ( <列名>[<次序>] [,<列名>[<次序>]].... ); <表名>:要建立索引的基本表 <次序>:指定索引值的排列次序(DESC,ASC) UNIQUE:此索引的每一个索引值只对应唯一的数据记录 CLUSTER:表示建立的索引是聚簇索引
例:
create index jno_index on j(jo); 允许重复 create unique index jno_index on j(jo); 不允许重复
注:
ALTER INDEX <旧索引名> RENAME TO <新索引名>; 修改索引 DROP INDEX <索引名> 删除索引
删除索引时,系统会从数据字典中删去有关该索引的描述
数据字典:是关系数据库管理系统内部的一组系统表,记录了数据库所有定义信息。