数据定义的实例操作1

数据定义包括

1.模式的定义与删除
2.基本表的定义、删除和修改
3.索引的建立与删除

该博客只介绍了前两个

1.定义模式

语句:

CREATE SCHEMA <模式名> AUTHORIZATION <用户名>

【例3.1】为用户WANG定义一个学生-课程模式S-T

1.首先要创建WANG这个用户

①先创建一个数据库

CREATE DATABASE STU

刷新左侧一栏就会显示出来啦
②在左栏中 “STU(你所创立的数据库)—安全性—用户—右键新建”
数据定义的实例操作1_第1张图片2.输入语句:

CREATE SCHEMA "S-T" AUTHORIZATION WANG;

注:其中的S-T一定要加上引号啊,不然会出现错误的!

可是加上引号输入这句话还是会有以下错误↓
在这里插入图片描述what!?我明明刚刚创建了wang这个用户,怎么还没有!!【口吐莲花】
幸亏我好好听课了,不然又要在这里跟它干耗一下午了,感谢老师!

元凶在此!!!
数据定义的实例操作1_第2张图片这里默认会是在master里面,而不是在我们刚刚建用户WANG的那个STU数据库里面,切换掉这里,再重新执行就OK啦!

锵锵锵~
数据定义的实例操作1_第3张图片
它出现啦,它出现啦,它出现啦!(感觉自己疯疯癫癫,啰里啰嗦还望海涵)

【例3.2】

CREATE SCHEMA AUTHORIZATION WANG;

该语句建立模式的时候省去了模式名,那么模式名隐含为用户名。

敲黑板!!!

在SQL Server中,默认用户是dbo,如果我们没有创建模式,那么默认的模式都会是他!所以表名是dbo.*。

【例3.3】
在这里插入图片描述为了省去用户ZHANG的建立,我们让刚建好的小WANG来代替他。

CREATE SCHEMA TEST AUTHORIZATION WANG;
CREATE TABLE TAB1 {COL1 SMALLINT,
                   COL2 INT,
                   COL3 CHAR(20),
                   COL4 NUMERIC(10,3),
                   COL5 DECIMAL(5,2)
                   };

也可以用这种方式:

CREATE TABLE TEST.TAB2 {...}

数据定义的实例操作1_第4张图片
他的出现证明了我的成功~

注:如果前面没有加创建模式的语句,同样创建这张表的话,会默认为是dbo名下的,创建出来的表,它叫 dbo.TAB1(悄咪咪:就像是换了爹一样)

2.删除模式

语句:

DROP SCHEMA <模式名> <CASCADE|RESTRICT>

其中
CASCADE——级联
删除模式的同时,将其下属的数据库对象全删掉了,相当于株连九族,连坐!!!慎用!!!

RESTRICT——限制
如果模式中有下属的数据库对象,就不可删除该模式。
(这两者必选其一)

【例3.4】

DROP SCHEMA WANG CASCADE;

采用级联方式,删除WANG模式,同时我们在WANG下定义的表TAB1也会被删除。

3.定义基本表

语句:

CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件]
                    [,<列名><数据类型>[列级完整性约束条件]]
                    ...
                    [,表级完整性约束条件]);

其中
列级完整性约束条件——约束一列
表级完整性约束条件——约束多个属性列

【例3.5】在这里插入图片描述

CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,  
/*列级完整性条件,表示学号是主码*/
Sname CHAR(20) UNIQUE,
/*列级完整性条件,表示名字取值唯一*/
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20)
);

数据定义的实例操作1_第5张图片
一定要在当前数据库下进行!!!

因为建表时,没有指定模式,所以默认为dbo模式,建出来的表也就是这个样子滴~ dbo.Student

【例3.6】在这里插入图片描述

CREATE TABLE Course
   (Cno CHAR(4) PRIMARY KEY,
   Cname CHAR(40),
   Cpno CHAR(4),
   Ccredit SMALLINT,
   FOREIGN KEY(Cpno) REFERENCES Course(Cno)
   /*先行课Cpno是课程关系的外码,
   Course既是参照关系,又是被参照关系,
   被参照列是Cno,
   是表级完整性约束条件,
   表示外码及其引用*/
   );

【例3.7】在这里插入图片描述
注:这里的SC表必须在建立好Student,Course表之后才可建立,因为SC表中的Sno,Cno是外码,分别参照这两个关系。

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)
   /*Cno是外码,参照课程表Course*/
   /*以上三行均为表级完整性约束条件,放在表的最后*/
   );

注:敲代码的时候一定不要忘记最后的 ); ,并且一定要是英文符号啊啊!(是我会犯的低级错误~)

下图是建立好的三张表的显示~
数据定义的实例操作1_第6张图片

4.修改基本表

(注:以上模式板块中没有修改模式定义这一项,是因为SQL标准不提供这一操作,包括修改视图定义也不提供)

语句:

ALTER TABLE <表名>
  [ADD[COLUMN]<新列名><数据类型>[完整性约束]]
  /*新增属性列和列级完整性约束*/
  [ADD <表级完整性约束条件>]
  /*新增表级完整性约束条件*/
  [DROP [COLUMN] <列名> [CASCADE|RESTRICT]]
  /*删除属性列*/
  [DROP CONSTRAINT <完整性约束名>[RESTRICT|CASCADE]]
  /*删除完整性*/
  [ALTER COLUMN <列名><数据类型>];
  /*修改原有列定义,包括列名和数据类型*/

【例3.8】在这里插入图片描述新增属性列,用ADD语句。

ALTER TABLE Student ADD S_entrance DATE;
/*新增属性列名为S_entrance,数据类型为DATE日期型*/

注:不管基本表中是否有原有的数据,新增的一列都是空值。

数据定义的实例操作1_第7张图片添加成功!!!

【例3.9】
在这里插入图片描述修改属性列的数据类型,用ALTER COLUMN。

ALTER TABLE Student ALTER COLUMN Sage INT;

这里不管修改之前的类型是什么,只需要指出修改之后的数据类型。
数据定义的实例操作1_第8张图片
修改成功!!

【例3.10】
在这里插入图片描述
增加列级完整性约束条件,采用ADD 语句。

ALTER TABLE Course ADD UNIQUE(Cname);
/*括号里为增加列级完整性约束条件的属性列*/

数据定义的实例操作1_第9张图片
如果输入相同名字,会显示错误。(emmm,这里一看到名字就想到王五,恍惚之间才发现是课程名字。。。。)

5.删除基本表

(哇~ 一看到删除就全身发抖,我刚建好的小表表们又要遭殃了~)

语句:

DROP TABLE <表名> [RESTRICT|CASCADE];
/*默认为RESTRICT*/

【例3.11】
在这里插入图片描述
(短短几个字,扎透我心窝)

DROP TABLE Student CASCADE;

采用CASCADE级联,不仅删除该基本表,引用该基本表的所有数据库对象等等都会被删掉。
SC表中的引用Student的Sno,所以SC表也会被删掉。

简直,无情!

【例3.12】
在这里插入图片描述

/*创建基于Student的视图IS_Student*/
CREATE VIEW IS_Student
AS
  SELECT Sno,Sage,Sname
  FROM Student
  WHERE Sdept = 'IS';
/*再使用RESTRICT删除学生表*/
DROP TABLE Student RESTRICT;
/*(我爱RESTRICT,它删不掉我的表!!!)*/

会删除失败,因为在Student基本表上有视图IS_Student。

在这里插入图片描述

再来一遍??我???

DROP TABLE Student CASCADE;

CASCADE会连同Student上的视图,SC表都删掉。。。呜呜呜呜~

———————————————————————————
就到这里啦,剩余部分下次课后再来~

你可能感兴趣的:(数据定义的实例操作1)