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. 参考;

数据类型

定义表的各个属性时要指明其数据类型及长度。

sql-server数据类型

图片来自于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 协议 ,转载请注明出处!