SQL Server-- 表(table)的定义、删除与修改
本文最后更新于:2022年4月10日 晚上
概览:SQL Server的基本表的定义、删除与修改。
参考学习书籍:数据库系统概论(第五版) 王珊、萨师煊编著
使用数据库版本:Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64)
管理工具:Microsoft SQL Server Managment Studio 17
定义
基本格式:
create table 表名(
列名1 数据类型 [列级完整性条件约束],
列名1 数据类型 [列级完整性条件约束],
列名1 数据类型 [列级完整性条件约束],
...
[表级完整性条件约束]
);
建表的同时可以定义该表的完整性约束条件。如果该约束条件涉及该表的多个列的话,必须得定义为表级的约束条件。
例子:
create table student(
Sno CHAR(9) PRIMARY KEY,/*Sno是主码*/
Sname CHAR(20) UNIQUE,E,/*Sname取唯一值*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);
含有外码的情况:
create table sc(
Sno CHAR(9),
Cno CHAR(4),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),/*主码为两个属性构成,必须作为表级完整性田间约束定义*/
FOREIGN KEY (Sno) REFERENCES student(Sno),/*Sno是外码,被参照表是Student*/
FOREIGN KEY (Cno) REFERENCES course(Cno)
);
primary 美: [‘praɪm(ə)ri] adj. 主要的;最重要的
foreign 美: [‘fɔrən] adj.外来的;对外的
reference 美: [‘ref(ə)rəns] n. 参考;
数据类型
定义表的各个属性时要指明其数据类型及长度。
图片来自于W3SCHOOL
参看链接:SQLServer数据类型及使用分析
修改
alter table 表名
ADD子句
用于增加新列、新的列级完整性约束和新的表级完整性约束。
alter table 表名
add 新列名 数据类型 [列级完整性约束]
增加入学时间列,数据类型为DATE。
alter table student add Sentrance DATE
增加课程名称取唯一值的约束。
alter table course add UNIQUE(Cname)
DROP COLUMN语句
column 美: [‘kɑləm] n.纵队,列;
删除表的列
课本上依旧有RESTRICT(限制)以及CASCADE(级联)两种可选方式进行删除,与模式删除时类似的作用,SQLServer2017不能够使用。
删除学生表的Sentrance列。
alter table student drop column Sentrance
DROP CONSTRAINT语句
constraint 美: [kən’streɪnt] n. 约束;限制
用于删除指定的完整性约束
参看链接:SQL中的几种约束的创建与删除
ALTER CONSTRAINT语句
修改原有的列定义,包括修改列名和数据类型
将Sage的类型修改为INT型。
alter table student alter column Sage int
删除
drop table 表名
课本上依旧有RESTRICT(限制)以及CASCADE(级联)两种可选方式进行删除,与模式删除时类似的作用,SQLServer2017不能够使用。
drop table course
/*error:无法删除对象 'course',因为该对象正由一个 FOREIGN KEY 约束引用*/
SQL Server “DROP TABLE 表名 CASCADE” 显示”CASCADE”附近有语法错误的原因
SQL Server在删除表时并不区分RESTRICT或是CASCADE。
既然不支持,那为何又能识别CASCADE为关键字呢?
事实上在SQL Server中CASCADE关键字用于在建表操作时预先建立级联关系(通常和DENY关键字配合使用,所以报有语法错),建表后执行DROP操作时就不需要用户再指定删除模式了。
参看链接:SQL Server “DROP TABLE 表名 CASCADE” 显示”CASCADE”附近有语法错误的原因
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!