第10讲 SQL中的数据定义
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.2 SQL的数据定义
基本表的定义
完整性约束条件
将两个表中的相应元 组联系起来,是两个 关系表ห้องสมุดไป่ตู้联系的体现
参照完整性
FOREIGN KEY(<外键 >)REFERENCES <被参照 表名>(<与外键对应的主键名>)
•对被参照表和参照表进行更新操作时有可能破坏参照完 整性,必须进行完整性检查。 •DBMS采取相应策略加以处理,拒绝执行或产生一些相 关的级联操作等,以保证完整性的实现。
例:将一个大小为10MB数据文件mrkj添加到MRK J数据库中,该数据文件的大小为10MB,最大的文 件大小为100MB,增长速度为2MB,MRKJ数 据库的物理地址为D盘DATA文件夹下。
Alter database MRKJ Add file ( NAME=mrkj, filename="d:\data\mrkj.ndf", size=10MB, maxsize=100MB, filegrowth=2MB )
基本表的定义
一般格式为
CREATE TABLE <表名>
(<列名><数据类型> [列级完整性约束条件] [, <列名> <数据类型> [列级完整性约束条件]]... [, <表级完整性约束条件>] );
SQL支持的数据类型
类型名 INTEGER SMALLINT REAL DOUBLE PRECISION 类型 数值型 数值型 数值型 数值型 数值型 数值型 字符串型 字符串型 位串型 位串型 时间型 时间型 说明 长整数(也可写成INT) 短整数 浮点数 双精度浮点数 浮点数,精度至少为n位数字 定点数,有p位数字(不包括符号、小数点) ,小数点后面有q 位数字。 长度为n的定长字符串 具有最大长度为n的变长字符串 长度为n的二进制位串 最大长度为n的变长二进制位串 日期,年-月- 日,形为YYYY- MM- DD 时间,时:分:秒,形为HH:MM:SS
4.2 SQL的数据定义
基本表的定义
完整性约束条件
参照完整性
FOREIGN KEY(<外键 >)REFERENCES <被参照 表名>(<与外键对应的主键名>)
•ON DELETE { CASCADE | NO ACTION } :
当删除被参照表的主键时,参照表中的外键产生级联操作或拒绝执行。
基本表、索引和视图
表、索引和视图的创建、删除
表的修改
与表有关的完整性约束的定义
语句格式约定符号
尖括号“<>”中为实际语义; 小括号“()”中的内容为必选项; 中括号“[ ]”中的内容为任选项; “|” 为选项符; [,…n]表示前面的项可重复多次。
一般语法规定 SQL中的数据项(包括列项、表和视图)分隔符 为“,” 其字符串常数的定界符用单引号“ ’ ”表示 SQL的关键字一般使用大写字母表示 SQL语句的结束符为“;” SQL语句一般应采用格式化书写格式 系统实现时均应采用西文字符
在创建用户数据库之前,用户必须设计好数据库的名 称以及它的所有者、空间大小和存储信息的文件和文件组。
例:创建一个名称为MRKJ的数据库,该数据库的主数据文件的逻辑名称为
MRKJ_data,主数据文件名为MRKJ.mdf,初始大小为5MB,最大空间为无 限大,增长速度为10%;事务日志文件的逻辑名称为MRKJ_log,日志文件
例:从MRKJ数据库中删除mrkj文件。
use db_2008 alter database MRKJ remove file mrkj
例:使用DROP DATABASE命令将MRKJ删除。
use db_2008 drop database MRKJ
4.2 SQL的数据定义
SQL支持三级模式结构的定义
S(SNO,SN,SD,SB,SEX)
C(CNO,CN,PC)
SC(SNO,CNO,GRADE)
4.2 SQL的数据定义
关系S的定义 CREATE TABLE S
(SNO CHAR(6) , SN CHAR(10) NOT NULL , SD CHAR(16), SB DATETIME, SEX CHAR(2), CHECK (SEX IN (‘男’,‘女’)), PRIMARY KEY (SNO) );
(SNO CHAR(6) NOT NULL, CNO CHAR(6) NOT NULL, GRADE DEC(4,1)DEFAULT NULL, PRIMARY KEY (SNO,CNO), FOREIGN KEY (SNO) REFERENCES S(SNO), FOREIGN KEY (CNO) REFERENCES C(CNO), CHECK (GRADE BETWEEN 0.0 AND 100.0) );
SQL 中的数据定义
数据库的创建
CREATE DATABASE database_name [ ON [PRIMARY][<filespec>[, …n] [,<filegroup>[, …n]] [LOG ON {<filespec>[, …n]}] <filespec>:= { ( NAME=logical_file_name, filename={‘os_file_name’ ︳’filestream_path’} [,SIZE=size[KB ︳MB ︳GB ︳TB] [,MAXSIZE={max_size[KB ︳MB ︳GB ︳TB] ︳UNLIMITED }] [,FILEGROWTH=growth_increment[KB ︳MB ︳GB ︳TB ︳%] ] )[, …n] } <filegroup>::= { FILEGROUP filegroup_name[CONTAINS FILESTREAM ][DEFAULT] <filespec>[, …n] ]
必须限定为“NOT NULL”,以满足实体完整性。
UNIQUE约束
惟一性约束,即不允许列中出现重复的属性值。
DEFAULT约束
默认值约束。
CHECK 约束
检查约束,通过约束条件表达式设置列值应满足的条件。
【例】 “学生选课”数据库中的关系模式(表结构): 学生(学号,姓名,性别,出生时间,所在系) 课程(课程编号,课程名,先修课程号) 选课(学号,课程编号,成绩)
4.2 SQL的数据定义
关系C的定义
CREATE TABLE C
(CNO CHAR(6) PRIMARY KEY, CN CHAR(10), PC CHAR(6), FOREIGN KEY (PC) REFERENCES C(CNO) );
4.2 SQL的数据定义
关系SC的定义
CREATE TABLE SC
•ON UPDATE { CASCADE | NO ACTION }:
当修改被参照表的主键时,参照表中的外键产生级联操作或拒绝执行。
4.2 SQL的数据定义
基本表的定义
完整性约束条件
用户定义完整性 NOT NULL或NULL约束
允许属性值是否为空,默认为“NULL”,对关系的主属性
基本表的修改
删除原有的列或约束规则
ALTER TABLE<表名>
所有引用该列的视图 在没有视图或约束引 DROP{[CONSTRAINT] 和约束也被自动删除 <完整性约束 >| 用该列时才能被删除 COLUMN <列名>
4.2 SQL的数据定义
基本表的定义
完整性约束条件
完整性约束条件是针对属性值设置的限制条 件。
列级约束条件只涉及一个列,表级的约束条 件涉及到多列属性。
4.2 SQL的数据定义
基本表的定义
完整性约束条件
可实现关系的实体完整性、参照完整性和用 户自定义完整性的定义。
定义的完整性约束条件被存入系统的数据字 典中,当用户操作表中数据时由DBMS自动 检查该操作是否违背这些完整性约束条件。
FLOAT (n) NUMERIC(p,q) 或DECIMAL(p,q) CHAR (n) VARCHAR (n) BIT (n) BIT VARYING(n) DATE TIME
例:使用CREATE TABLE语句创建数据表 tb_Student,ID字段为int类型并且不允许为空; Name字段为长度50的nvarchar类型;Age字 段为int类型。
基本表的修改
增加列或表约束规则
ALTER TABLE[<表的创建者名>.]<表名> ADD <列名> <类型>[完整性约束]|<完整性 约束>;
【例】要在学生表S中加入一列SH表示学生的籍贯:
ALTER TABLE S ADD SH CHAR(30); 补充定义主键:
ALTER TABLE S ADD PRIMERY KEY (SNO);
系统存储过程sp_renamedb 可以用来更改数据 库名称。 例:将数据库MRKJ的名称更改为MR.
USE master EXEC sp_renamedb 'MRKJ','MR'
删除数据库 DROP DATABASE{database_name︳ database_snapshot_name}[, …n]
例:创建数据表tb_student,ID字段为int类型 并且不允许为空;Name字段为长度为50的 nvarchar类型;Age字段为int类型。
USE db_2008 CREATE TABLE tb_student ID int not null,
Name nvarchar(50),
Age int
use MRKJ CREATE TABLE [dbo].[tb_Student]( [ID][int]not null, [Name][nvarchar](50), [Age][int] )
use db_2008 create table tb_student (ID INT NOT NULL, Name nvarchar(50), Age int )
数据库的修改
数据库创建完以后常常需要根据用户环境进行调整,这就要用 到数据库修改ALTER DATABASE命令.
ALTER DATABASE database_name { <add_or_modify_files> ︳<add_or_modify_filegroups> } [;] <add_or_modify_files>::= { ADD FILE<filespec>[, …n] [TO FILEGROUP{filegroup_name}] ︳ADD LOG FILE <filespec>[, …n] ︳REMOVE FILE <filespec> } <filespec>::= ( NAME=logical_file_name [,NEWNAME=new_logical_name] [,FILENAME={‘os_file_name’ ︳’filestream_path’}] [,SIZE=size[KB︳MB︳G B︳TB]] [,MAXSIZE={max_size[KB︳MB︳GB︳TB] ︳UNLIMITED}] [,FILEGROWTH=growth_increment[KB︳MB︳GB︳TB︳%]] [,OFFLINE] )
名为MRKJ.ldf,初始大小为3MB,最大空间为50MB,增长速度为2
MB;要求主数据库文件和事务日志文件都存放在D盘的DATA文件夹下。
CREATE DATABASE MRKJ ON PRIMARY ( Name=MRKJ_data, Filename='D:\DATA\MRKJ.mdf', Size=5MB, Maxsize=unlimited, Filegrowth=10% ) LOG ON ( Name=MRKJ_log, Filename='D:\DATA\MRKJ.ldf', Size=3MB, Maxsize=50MB, FileGrowth=2MB )
4.2 SQL的数据定义
基本表的定义
完整性约束条件
实体完整性
定义主键,保证主键 的唯一性和非空性
PRIMARY KEY [CLUSTERED](<列组>)
•主键由多属性构成,应定义为表级约束条件。
•使用CLUSTERED选项可以建立<列组>上的聚集索引。
•在基本表中插入记录或者对主键进行更新操作时, RDBMS将按照实体完整性规则自动检查。