SQL语句基本操作练习(一)

文章目录

  • SQL语句基操
        • 前言
        • 0、话不多说直接上手
        • 1、定义模式
          • [例3.1]为用户WANG定义一个学生-课程模式S-T。
          • [例3.2]为WANG创建模式
          • [例3.3]为用户WANG创建一个模式TEST,并且在其中定义一个表TAB1。
        • 2、删除模式
          • [例3.4]为WANG删除模式TEST。
        • 3、定义基本表
          • [例3.5]建立一个"学生"表Student。
          • [例3.6]建立一个"课程"表Course。
          • [例3.7]建立学生选课表SC。
        • 4、修改基本表
          • [例3.8] 向Student表增加"入学时间"列,其数据类型为日期型。
          • [例3.9]将年龄的数据类型由字符型(假设原来的类型是字符型)改为整数。
          • [例3.10]增加课程名称必须取唯一值的约束条件。
        • 5、删除基本表
          • [例3.11]删除Student表。
          • [例3.12]若表上建有视图,选择RESTRICT时表不能删除;选择CASCADE时可以删除表,视图也自动被删除。
        • 结语

SQL语句基操

本篇文章记录了第四次作业
使用的数据库是SQL Server,使用的数据库管理软件是SQL Server Management Studio.

前言

什么是SQL?

结构化查询语言(Structured Query Language,SQL)式关系数据库的标准语言,也是一个通用的、功能极强的关系数据库语言。其功能 不仅仅是查询,而是包括数据库模式创建、数据库数据插入与修改、数据库安全性完整性定义与控制等一系列功能。

0、话不多说直接上手

SQL语句基本操作练习(一)_第1张图片

首先我们来创建一个新的数据库"SCHOOL"。
代码如下:

	CREATE DATABASE SCHOOL

SQL语句基本操作练习(一)_第2张图片
接着按下F5可以看见左边资源管理器里面有你新建的数据库"SCHOOL"
SQL语句基本操作练习(一)_第3张图片

1、定义模式

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

代码如下:

	CREATE SCHEMA"S-T" AUTHORIZATION WANG;

但是我们如果直接在查询里面写下这条语句回报错,说用户不存在。
别着急,请先在左边的管理器中选择数据库->SCHOOL->安全性->用户,再右键用户选择新建用户。在跳出来的对话框中的用户名输入"WANG".登录名按照下图这样搞定,然后一直确定就行。
SQL语句基本操作练习(一)_第4张图片
接下来选中SCHOOL数据库刷新一下,就可以看到报错消失,我们可以愉快执行啦!
SQL语句基本操作练习(一)_第5张图片
执行结果:
SQL语句基本操作练习(一)_第6张图片

[例3.2]为WANG创建模式
	CREATE SCHEMA AUTHORIZATION WANG;

这个语句没有指定<模式名>,所以<模式名>隐含为用户名WANG,而像[例3.1]中的模式名则是指定为了"S-T".
SQL Server中,默认用户为dbo,在没有创建模式的情况下,默认的模式名为dbo,所以表名为dbo.*。
CREATE SCHEMA扩展:

	CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>]; 
[例3.3]为用户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)
				  );

执行完了之后可以看见TEST模式下的TAB1。
SQL语句基本操作练习(一)_第7张图片
还可以继续在TEST下建立TAB2。

	CREATE TABLE TEST.TAB2(
							COL1 SMALLINT
							);

刷新后可以看到你建的TAB2表。若是TAB2前面不加TEST的话,默认在dbo模式下建表,就会有dbo.TAB2。

2、删除模式

[例3.4]为WANG删除模式TEST。
	DROP SCHEMA TEST CASCADE;

放进去报错,因为SQL Server不支持CASCADE.
CASCADE(级联)的意思是删除模式的时候把该模式下的所有数据库对象全部删除。
与之对应的是RESTRICT(限制)即只有在该模式下没有下属对象的时候才进行删除,防止当成空模式误删。
你也不能写DROP SCHEMA TEST,系统会提示你有表在引用它。有点RESTRICT的这种味道。
那么怎么办呢?所以你得现把表删了之后才能删除TEST。

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

执行结果如下图,可以看到TABEL没了,并且安全性->架构里的"TEST"也没了,这里就不截图了。
SQL语句基本操作练习(一)_第8张图片

3、定义基本表

SQL创建表的基本语句:

	CREATE TABLE <表名>
	<列名><数据类型>[<列级完整性约束条件>]
	[,<列名> <数据类型>[ <列级完整性约束条件>] ][,<表级完整性约束条件> ] );
  • <表名>:所要定义的基本表的名字。
  • <列名>:组成该表的各个属性(列)。
  • <列级完整性约束条件>:涉及相应属性列的完整性约束条件。
  • <表级完整性约束条件>:涉及一个或多个属性列的完整性约束条件。
[例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)
	 	);

运行结果如下,可以看到完美运行~
SQL语句基本操作练习(一)_第9张图片

[例3.6]建立一个"课程"表Course。

先给语句:

	CREATE TABLE Course
		(Cno CHAR(4) PRIMARY KEY,		/*列级完整约束条件,Cno是主码*/
		Cname CHAR(40) NOT NULL,		/*列级完整性约束条件,Cname不能取空值*/
		Cpno CHAR(4),					/*Cpno的含义是先修课*/
		Ccredit SMALLINT,
		FOREIGN KEY(Cpno) REFERENCES Course(Cno) /*表级完整性约束条件,Cpno是外码,被参照表是Course,被参照列是Cno*/
		);

成功运行:
SQL语句基本操作练习(一)_第10张图片

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

又一个成功运行~我们可以看到,因为SC表中参照了Student表和Course表,所以要最后建立,否则会报错。
SQL语句基本操作练习(一)_第11张图片

4、修改基本表

SQL修改基本表的一般格式:

ALTER TABLE <表名>
[ADD[COLUMN] <新列名> <数据类型> [完整性约束] ]
[ADD <表级完整性约束>]
[DROP [COLUMN] <列名> [CASCADE|RESTRICT] ]
[DROP CONSTRAINT<完整性约束名>[RESTRICT|CASCADE]]
[ALTER COLUMN <列名><数据类型>];
  • <表名>是要修改的基本表。
  • ADD子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件。
  • DROP COLUMN子句用于删除表中的列。
    如果指定了CASCADE短语,则自动删除引用了该列的其他对象
    如果指定了RESTRICT短语,则如果该列被其他对象引用,关系数据库管理系统将拒绝删除该列 DROP
  • CONSTRAINT子句用于删除指定的完整性约束条件
  • ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型
[例3.8] 向Student表增加"入学时间"列,其数据类型为日期型。

语句:

	ALTER TABLE Student ADD S_entrance DATE;

成功运行。我们可以注意到,不论表中原来是否有数据,新增加的列一律为空值。
SQL语句基本操作练习(一)_第12张图片

[例3.9]将年龄的数据类型由字符型(假设原来的类型是字符型)改为整数。
	ALTER TABLE Student ALTER COLUMN Sage INT;

运行结果如下。我们可以看到Sage的数据类型由上图中的smallint变成了int.
SQL语句基本操作练习(一)_第13张图片

[例3.10]增加课程名称必须取唯一值的约束条件。
	ALTER TABLE Course ADD UNIQUE(Cname);

可以看到SQL语句执行成功,但是我手贱点了3次,下面的键里面冒出来3个UNIQUE,暂时不知道对表有什么影响。
SQL语句基本操作练习(一)_第14张图片

5、删除基本表

[例3.11]删除Student表。

本来的意思是要直接使用

	DROP TABLE Student CASCADE;

但是因为SQL Server的特性它不支持这个。

	DROP TABLE Student;

我试了一下也不行,会提示你有外码引用,所以我们得先删除外码才能删除这个表。

 	ALTER TABLE <TABLE NAME> DROP CONSTRAINT <FOREIGN KEY>
 	/*例如*/
 	ALTER TABLE SC DROP CONSTRAINT FK__SC__Sno__3F466844; 
 	/*此处是SC表中一个参照Student表的外码*/
 	/*之后就可以删除Student表了*/

我们可以看到Student表被删除了。
SQL语句基本操作练习(一)_第15张图片
在外码不多的情况下我们可以人工找出外码然后再删除表,但是如果外码很多呢?可以写出查询外码的SQL语句然后再把结果复制后删除所有外码。具体的语句就不在这里讨论了。

[例3.12]若表上建有视图,选择RESTRICT时表不能删除;选择CASCADE时可以删除表,视图也自动被删除。

而在SQL Server里面如果没有外码就会直接删除掉。。。

	CREATE VIEW IS_Student /*Student表上建立视图*/
	AS
	SELECT Sno,Sname,Sage
	From Student
	WHERE Sdept=IS';

	DROP TABLE Student RESTRICT;	/*删除Student表,返回错误信息*/
	DROP TABLE Student CASCADE;	/*删除Student表,成功*/
	SELECT * FROM IS_Student;	/*返回关系不存在*/

结语

 在SQL Server 中使用SQL语句中经常遇到的问题就是表名或者属性名下面画有红色波浪线,如果提示权限不够的话一般不予理会SQL语句也能够成功执行。再有一个就是因为对CASCADE&RESTRICT都不支持,在练习书上的题目时有些问题,不能够照搬,这就要求我们进行灵活变通以及增强自我解决问题的能力。
SQL语句基本操作练习(一)_第16张图片
下一篇文章:SQL语句基本操作练习(二)

参考文献:
[1]萨师煊,王珊,数据库系统概论.5版.北京:高等教育出版社,2014.
[2]David老师的PPT.

你可能感兴趣的:(SQL语句基本操作)