关于练习1-CREATE/DROP/ALTER数据库SQL

首先对SQL 语句简单的总结
1.SQL的动词:

2.数据定义:

(1)定义模式格式如下:CREAT SCHEMA <模式名> AUTHORIZATION <用户名>[<表定义子句>|<视图定义子句>|<授权定义子句>]

(2)删除模式格式如下:DROP SCHEMA <模式名> <CASCADE|RESTRICT>
CASCADE(级联):删除模式的同时把该模式中所有的数据库对象全部删除。
RESTRICT(限制):仅当该模式下没有任何下属的对象时才能执行,如果该模式中定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。
(3)基本表的定义格式如下:CREATE TABLE <表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[,<列名> <数据类型>[ <列级完整性约束条件>] ]

[,<表级完整性约束条件> ] );
<表名>:所要定义的基本表的名字
<列名>:组成该表的各个属性(列)
<列级完整性约束条件>:涉及相应属性列的完整性约束条件
<表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件

如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
(4)修改基本表的格式:ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP [ COLUMN ] <列名> [CASCADE| RESTRICT] ]
[ DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ]
[ALTER COLUMN <列名><数据类型> ] ;
ADD用于增加新列、新的列级/表级完整型约束条件
DROP COLUMN用于删除表中列
DROP CONSTRAINT用于删除指定的完整型约束条件
ALTER COLUMN用于修改原有的列定义,包括列名和数据类型
(5)删除基本表格式:DROP TABLE <表名>[RESTRICT| CASCADE];
3.在定义表的属性时需要指明其数据类型的长度。

经常用VARCHAR(n),它用于最大长度为n的变长字符串,当长度小于n时,申请的存储空间为实际的长度,节省了空间。
4.模式和表之间的关系:每一个表都属于某一个模式/架构,一个模式可以包含多个基本表、视图等对象。
服务器对象->数据库->架构->对象->表、视图
下面是针对以上SQL语句的练习

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

在定义之前首先要检查数据库中是否存在用户WANG,如果不存在需要先创建该用户。由于我的数据库中没有,所以需要先创建用户WANG。
下面是创建用户WANG的过程:可参考以下链接:数据库使用SQL语句新建数据集及新建用户WANG
前提工作完成后,输入下面的语句后点击【执行】:

CREATE SCHEMA "S-T" AUTHORIZATION WANG;
1
结果显示以下界面:

在执行之前可以先点击【√】,检查一下是否有语法错误,在没有语法错误的前提下再做修改。
这是由于当前运行的数据库是master,应该把默认的数据库改成数据库SCHOOL,在SCHOOL数据库中才有用户WANG。

【例3.2】CREATE SCHEMA AUTHORIZATION WANG;
该语句没有指定<模式名>,<模式名>隐含为<用户名>。

CREATE SCHEMA AUTHORIZATION WANG;
1

【例3.3】为用户WANG创建一个模式TEST,并且在其中定义一个表TAB1。

首先说明,要想在自己的命名空间下建表,要么在创建模式语句中同时创建表TEST.TAB1,要么在表名中明显的给出模式名TEST.TAB3,要么设置所属的格式(DBMS中先设置模式,再建表),不然就会成为默认条件dbo.TAB2。
(1)

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

这是在TEST模式下建立的表TAB1,在建立模式之后紧跟着建新表,满足题目的要求。
(2)但是如果不加说明是在哪个模式下进行的,就会默认为在dbo的模式下建表,如下面的语句:

CREATE TABLE TAB2(COL1 SMALLINT,
COL2 INT,
COL3 CHAR(20),
COL4 NUMERIC(10,3),
COL5 DECIMAL(5,2)
);
1
2
3
4
5
6
产生的效果如下:

http://user.ipathology.cn/89903/aboutus
https://mstdn.jp/web/statuses/103793447519961904
https://mstdn.jp/web/statuses/103793453917028221
https://mstdn.jp/web/statuses/103793457180357450

SQL server 中,默认用户为 dbo,在没有创建模式的情况下,默认的模式名为dbo,所以表名为dbo.*。
(3)也可以采用下面的方式,在已经建立了模式的条件下建立新表,对建立的表名用模式加以约束。

CREATE TABLE TEST.TAB3( COL1 SMALLINT
);
1
2
产生的效果如下:

【例3.4】DROP SCHEMA TEST CASCADE;
(1)删除模式TEST,同时该模式下定义的表也会被删除,

DROP SCHEMA TEST CASCADE;
1

会出现语法错误,说明:SQL Server不支持在DROP SCHEMA使用CASCADE
(2)可以先删除该模式下的基本表,在删除模式。(由于前面建立了三个基本表,所以三个表都要删除)

DROP TABLE TEST.TAB1
DROP TABLE dbo.TAB2
DROP TABLE TEST.TAB3
DROP SCHEMA TEST;
1
2
3
4

【例3.5】建立一个“学生”表Student。学号是主码,姓名取唯一值。

CREATE TABLE Student(SNO CHAR(9) PRIMARY KEY, /*列级完整性,SNO是主码,主属性不能为空*/
SNAME CHAR(20) UNIQUE, /*SNAME取唯一值*/
SSEX CHAR(2),
SAGE SMALLINT,
SDEPT CHAR(20)
);
1
2
3
4
5
6
注意:需要在当前数据库的当前模式下执行,主属性不能为空。

【例3.6】建立一个“课程”表Course。
————————————————
版权声明:本文为CSDN博主「weixin_45871977」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45871977/article/details/104717113

相关文章