数据库实验报告1数据库定义实验

一、 实验目的:

(1)理解和掌握数据库DDL语言,能熟练地使用SQL DDL语句创建、修改和删除数据库、模式和基本表。
(2)掌握SQL语句常见语法错误的调试方法。

二、 实验内容:

教材3.3数据定义中例3.1至例3.11的要求操作,并截取相应的结果图

1、定义模式
模式定义语句:CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
【例3.1】为用户LJY定义一个学生-课程模式S-T
在这里插入图片描述

结果为:在这里插入图片描述
,在架构中可以找到在这里插入图片描述
;但如果写成在这里插入图片描述
的形式,即把双引号去掉,执行命令会出现错误

原因是SCHEMA的命名必须以“字母”,“”“@”,“#”开头,后跟“字母”,“”,“数字”,“$”,而“-”违反了SCHEMA的命名规则,所以系统才会报错,但是可以通过加双引号“”的方式来实现任意定义。

【例3.2】CREATE SCHEMA AUTHORIZATION LJY
在这里插入图片描述
该句没有指定<模式名>,所以<模式名>隐含为用户名LJY。但是在架构中却无法找到新的模式:GDM。这是因为SQLServer并没有实现这一功能,但是可以通过直接使用与自己的用户名相同的架构名来创建新模式。

【例3.3】为用户LJY创建一个模式TEST,并且在其中定义一个表TAB1。数据库实验报告1数据库定义实验_第1张图片
用户可以在创建模式的同时在这个模式定义中进一步创建基本表、视图等。需要注意的是,上述语句必须一次执行,若分开执行,创建的表是dbo.TAB1,错误。执行命令成功,在架构中可以找到TEST,在表中可以找到TEST.TAB1此时便不能再用SELECT * FROM TAB1语句查询,会出现错误提示, 用查询语句SELECT *FROM TEST.TAB1可以显示成功创建的表的内容在这里插入图片描述

2、删除模式
删除语句:DROP SCHEMA <模式名>;
CASEDE(级联):表示在删除模式的同时把该模式中的所有数据库对象全部删除。
RESTRICT(限制):表示如果该模式中已经定义了下属的数据库对象(如表、视图等),则拒绝删除语句的执行,只有当该模式中无任何下属的对象时才能执行删除语句。

【例3.4】DROP SCHEMA JG CASCADE
在这里插入图片描述
由于SQL Server中并未实现功能,所以当执行 在这里插入图片描述
时,会出现在这里插入图片描述
,所以删除模式可直接使用DROP SCHEMA JG即可。需要注意的是,当模式中有下属数据库对象时,是无法将其删除的。例如删除TEST模式(有下属对象—TAB1)。

3、 基本表的定义
基本表定义语句:CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件]
[,<列名><数据结构>[列级完整性约束条件]]

[,表级完整性约束条件]);

【例3.5】建立一个“学生”表student。
数据库实验报告1数据库定义实验_第2张图片

SQL语言使用CREATE TABLE语句定义基本表,建表的同时通常还可以定义于该表有关的完整性约束条件,新建的表,默认位于dbo下,即dbo.student。使用查询语句后在这里插入图片描述
【例3.6】建立一个“课程”表Course.
数据库实验报告1数据库定义实验_第3张图片

创建成功后使用查询语句可显示:在这里插入图片描述
本例说明参照表和被参照表可以是同一个表。
【例3.7】建立学生选课表SC。
数据库实验报告1数据库定义实验_第4张图片
例3.5、例3.6和例3.7会建立如下三个表:在这里插入图片描述
通过使用查询语句可显示:在这里插入图片描述

4、 基本表的修改
修改语句:
ALTER TABLE<表名>
[ADD[COLUMN]<新列名><数据类型>[约束条件]]
[ADD<表级完整性约束>]
[DROP [COLUMN]<列名>[CASCADE|RESTRICT]]
[DROP CONSTRAN<完整性约束名>[RESTRICT|CASCADE]]

【例3.8】向Student表中添加“入学时间”,其数据类型为日期型。
在这里插入图片描述
执行结果:在这里插入图片描述
ADD子句用于增加新列、新的列级完整性约束条件和新的表级完整性约束条件。不管基本表中原来是否有数据,新增加的列一律为空值。

【例3.9】将年龄的数据类型由字符型(假设原来的字符类型是字符型)改为整数
在这里插入图片描述
ALTER COLUMN子句用于修改原有的列定义,包括修改列名和数据类型。

【例3.10】增加课程名必须取唯一值的约束条件
在这里插入图片描述
查询后显示:在这里插入图片描述
此时的课程名必须取唯一值。

5.基本表的删除删除语句:DROP TABLE <表名>[RESTRICT|CASCADE]

【例3.11】删除Student表
在这里插入图片描述
RESTRICT:即该表的删除时不能被其他表的约束条件所引用,不能能有视图,不能有触发器,不能有存储过程或函数等,否则将删除失败。
CASCADE:即该表的删除没有限制,再删除该表的同时,其相关联的依赖对象都将被一起删除。但是SQLServer并未实现这一功能,所以在执行语句时会出现错误提示:在这里插入图片描述
【拓展】
在这里插入图片描述
执行报错:
在这里插入图片描述
SQLServer默认restrict,即如果欲删除的表被其他表正在引用,是无法直接删除的。直接删除时系统会报错,这是因为,Student表被SC表的约束引用,所以无法直接删除。需要先将表SC删除,然后再删除表Student.

CREATE DATABASE LJY  --创建数据库
USE LJY   --打开数据库
--定义模式时要键入用户名,所以要新建一个用户名,安全性-用户-新建用户-不带登录名的SQL用户

--例3.1:为用户LJY定义一个学生-课程模式S-T
CREATE SCHEMA "S-T" AUTHORIZATION LJY

CREATE SCHEMA S-T AUTHORIZATION LJY

--例3.3:为用户LJY创建一个模式TEST,并且在其中定义一个表TAB1
CREATE  SCHEMA TEST AUTHORIZATION LJY
CREATE TABLE TAB1(COL1 SMALLINT,
      COL2 INT,
      COL3 CHAR(20),
      COL4 NUMERIC(10,3),
      COL5 DECIMAL(5,2)
      );
SELECT * FROM  TAB1

--例3.4:DROP SCHEMA JG CASCADE
CREATE SCHEMA JG AUTHORIZATION LJY
DROP SCHEMA JG CASCADE
DROP SCHEMA JG

--例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)
    );
SELECT *FROM Student

--例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*/
                    );
SELECT *FROM Course

--例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*/
   );
SELECT *FROM SC

--例3.8:向Student表中添加“入学时间”,其数据类型为日期型。
ALTER TABLE Student ADD S_entrance DATE;
SELECT *FROM Student

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

--例3.10:增加课程名必须取唯一值的约束条件
ALTER TABLE Course ADD UNIQUE(Cname)
SELECT *FROM Course

--例3.11:删除Student表
DROP TABLE Student CASCADE;

DROP TABLE SC;
DROP TABLE Student;

你可能感兴趣的:(数据库实验报告1数据库定义实验)