3.4数据库作业4:SQL练习1 - CREATE / DROP / ALTER

在这里插入图片描述
先po一张图 po完再说
本文出自https://blog.csdn.net/MooM_X/article/details/104658786
https://blog.csdn.net/qq_44871112/article/details/104683353
学艺不精,只好借鉴。
【例3.2】该语句没有指定<模式名>,<模式名>隐含为<用户名>
在没有创建模式的情况下,默认的模式名为dbo,表名为dbo.*。
在这里插入图片描述
好了 接下来我们一起联系一下SQL语句
①:【新建数据库】
直接右击新建 或 者输入指令⬇

CREATE DATABASE STU;

②:【在库下新建用户】
打开安全性→右击用户→新建→用户名→登录名(选择第一个)→确定
在这里插入图片描述
【例3.1]】为用户WANG定义一个学生-课程模式S-T

CREATE SCHEMA AUTHORIZATION WANG;

为用户WANG创建了一个模式TEST,并且在其中定义一个表TAB1

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

上图如果去掉第一行,则表为dbo.TAB1 这里dbo是默认的

TEST模式建立成功,继续在TEST模式下建立表TAB2

CREATE TABLE TEST.TAB2
	( COL1 SMALLINT
	);

上图第一行如果是CREATE TABLE TAB2,则表为dbo.TAB2
在这里插入图片描述
删除语句

DROP SCHEMA TEST CASCADE;

在这里插入图片描述
这里报错了,因为在SQL Serever里drop schema语句并不支持cascade关键字,要想成功删除架构,必须先删除这个架构下已经创建的对象
这里删除模式TEST,同时该模式中定义的表也被删除
在这里插入图片描述在这里如果想删除架构,需要先删除架构下创建的对象。
1.手动删除:右击就可
2.语句删除

DROP TABLE TEST.TAB1;
DROP TABLE TEST.TAB2;
DROP SCHEMA TEST;

在这里插入图片描述
下面我们看一下结果 可以看到 架构TEST已被删除
在这里插入图片描述
好了 我们呢下面来看一下创建表的形式
创建表的形式:
CREATE TABLE <表名>
(<列名> <数据类型>[ <列级完整性约束条件> ]
[<列名> <数据类型>[ <列级完整性约束条件>] ]

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

-可以把表自行储存在记事本里,等用的时候直接把语句复制到SQL

【例3.5】 建立“学生”表Student 学号是主码,姓名取值唯一。
注:需在当前数据库的当前模式下执行。(直接CREATE TABLE即可)

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

其中PRIMARY KEY为主码,UNIQUE为取唯一值,即该表中不能有同名的学生。两者都为列的完整性约束条件
如图,有金钥匙标志的为主码

扫描二维码关注公众号,回复: 10301698 查看本文章

如下图 创建之后
在这里插入图片描述
这里not null即为主码不为空

[例3.6 ] 建立一个“课程”表Course

CREATE TABLE  Course(Cno      CHAR(4) PRIMARY KEY,
        	         Cname    CHAR(40),            
         	         Cpno     CHAR(4),               	                      
                     Ccredit  SMALLINTFOREIGN KEY (Cpno) REFERENCES  Course(Cno) 
                     ); 

创建成功
在这里插入图片描述
【例3.7】建立一个学生选课表SC
我居然一眼看成了逃课表在这里插入图片描述

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*/
        ); 

在这里插入图片描述
既是主码又是外码的时候是黑色小钥匙

下面我们一起看一下修改基本表

ALTER TABLE <表名>
[ ADD[COLUMN] <新列名> <数据类型> [ 完整性约束 ] ]
[ ADD <表级完整性约束>]
[ DROP [COLUMN] <列名> [CASCADE| RESTRICT] ]
[ DROP CONSTRAINT<完整性约束名>[ RESTRICT | CASCADE ] ]
[ALTER COLUMN <列名><数据类型> ] ;

<表名>是要修改的基本表
ADD 用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件
DROP COLUMN 用于删除表中的列
DROP CONSTRAINT 用于删除指定的完整性约束条件
ALTER COLUMN 用于修改原有的列定义,包括修改列名和数据类型
如果指定了CASCADE短语,则自动删除引用了该列的其他对象
如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库管理系统将拒绝删除该列

【例3.8】向Student表增加“入学时间”列,其数据类型为日期型
–不管基本表中原来是否已有数据,新增加的列一律为空值

ALTER TABLE Student ADD S_entrance DATE;

结果如下图
在这里插入图片描述
【例3.9】将年龄的数据类型由字符型(假设原来的数据类型是字符型)改为整数。

ALTER TABLE Student ALTER COLUMN Sage INT;

原来为smallint 现在为int
在这里插入图片描述
【例3.10】增加课程名称必须取唯一值的约束条件。

ALTER TABLE Course ADD UNIQUE(Cname); 

如下图
在这里插入图片描述
【例3.11】 删除Student表
基本表定义被删除,数据被删除
表上建立的索引、视图、触发器等一般也将被删除

DROP TABLE Student CASCADE;

在这里插入图片描述
这里会报错 直接去掉CASCADE
使用如下SQL语句查询出表中外键约束名称:

select name  
from  sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id 
where f.parent_object_id=object_id('外码的表名')

在这里插入图片描述
执行下面的语句进行删除

ALTER TABLE 外码的表名 DROP CONSTRAINT 外键约束名

然后FK就没有了 直接删除表就可以了
在这里插入图片描述
**【例3.12】若表上建有视图,选择RESTRICT时表不能删除;选择CASCADE时可删除表,视图自动被删除 。

**CREATE VIEW IS_Course   /*Course表上建立视图*/
AS
SELECT Cno,Cname
FROM Course
WHERE Ccredit='IS';**

删除表,Course有外码所以先把外键约束解除
检查视图是否存在

SELECT * FROM IS_Course;

在这里插入图片描述
无法使用视图,再创建表Course,就可以看到了
在这里插入图片描述
SQL Server不支持在删除过程中使用CASCADE/RESTRICT关键字,所以删除表之后视图保留但是无法使用,重建表之后就可以了。
执行命令之前看看当前的库是不是你要修改的用户所在的库。
不能在已经执行的命令直接往后写,因为会重复执行。
执行操作后刷新才会看到成功建立修改或删除。

这次作业很赶也很急,大多是主观因素,没有合理的安排复习时间,今天给自己记下一笔账。课下把落下的东西全都补回来。

发布了14 篇原创文章 · 获赞 13 · 访问量 1985

猜你喜欢

转载自blog.csdn.net/summer__kkkk/article/details/104739351