SQL数据定义

1.模式的定义与删除

1.定义模式
在SQL中模式定义语句如下:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;
例1
CREATE SCHEMA "S-T" AUTHORIZATION WANG;
例2
CREATE SCHEMA AUTHORIZATION WANG;
如果没有指定模式名,那么模式名隐含为用户名。
定义模式实际上定义了一个命名空间,在这个空间中可以进一步定义该模式包含的数据库对象,例如基本表、视图、索引等。
目前,在CREATE SCHEMA 中可以接受CREATE TABLE,CREATE VIEW 和 GRANT 子句。也就是说用户可以在创建模式的同时在这个模式定义中进一步创建基本表、视图,定义授权。即
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [<表定义子句>|<视图定义子句>|<授权定义子句>];

CREATE SCHEMA "TEST" AUTHORIZATION ZHANG CREATE TABLE TAB1(COL1 SMALLINT,COL2 INT,COL3 CHAR(20),COL4 NUMERIC(10,3),COL5 DECIMAL(5,2));
2.删除模式
在SQL中删除模式语句如下
DROP SCHEMA <模式名><CASCADE|RESTRICT>;(默认RESTRICT)

    DROP SCHEMA ZHANG CASCADE;
其中CASCADE和RESTRICT两者必选其一。选择了CASCADE(级联),表示在删除模式的同时把该模式中所有的数据库对象全部删除;选择了RESTRICT(限制),表示如果该模式中已经定义了下属的数据库对象(如表、视图等),则拒绝该删除语句的执行。只有当该模式中没有任何下属的对象时才能执行DROP SCHEMA语句。

2.基本表的定义、删除与修改

1.定义基本表
创建了一个模式就建立了一个数据库的命名空间,一个框架。在这个空间中首先要定义的是该模式包含的数据库基本表。
SQL语言使用CREATE TABLE 语句定义基本表 ,其基本格式如下:
CREATE TABLE <表名> (<列名><数据类型>[列级完整性约束条件],
        <列名><数据类型>[列级完整性约束条件],
        ……
        [表级完整性约束条件]);
例1
 CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) UNIQUE,Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20));
例2
CREATE TABLE Course (Cno char(4) PRIMARY KEY, Cname CHAR(40) NOT NULL, Cpno CHAR(4), Ccredit SMALLINT, FOREIGN KEY (Cpno) REFERENCES Course(Cno));
例3
CREATE TABLE SC (Sno CHAR(9), Cno CHAR(4), Grade SMALLINT, PRIMARY KEY (Sno,Cno),FOREIGN KEY(Sno)REFERENCES Student(Sno),FOREIGN KEY(Cno) REFERENCES Course(Cno));
建表的同时可以定义与该表有关的完整性约束条件,如果完整性约束条件涉及该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。
2.数据类型
数据类型 含义
CHAR(n),CHARACTER(n) 长度为n的定长字符串
VARCHAR(n),CHARACTERVARYING(n) 最大长度为n的变长字符串
CLOB 字符串大对象
BLOB 二进制大对象
INT,INTEGER 长整数(4字节)
SMALLINT 短整数(2字节)
BIGINT 大整数(8字节)
NUMERI(p,d) 定点数,由p位数字(不包括符号、小数点)组成,小数点后有d位数字
DECIMAL(p,d),DEC(p,d) 同NUMERIC
REAL 取决于机器精度的单精度浮点数
DOUBLE PRECISION 取决于机器精度的双精度浮点数
FLOAT(n) 可选精度的浮点数,精度至少为n位数字
BOOLEAN 逻辑布尔量
DATE 日期,包含年、月、日,格式为YYYY-MM-DD
TIME 日期,包含一日的时、分、秒,格式为HH:MM:SS
TIMESTAMP 时间戳类型
INTERVAL 时间间隔类型
3.模式与表
每一个基本表都属一某一个模式,一个模式包含多个基本表。
当定义一个基本表时一般有三种方法定义它所属的模式。
方法一:在表名中明显的给出模式名
方法二:在创建模式语句中同时创建表
方法三:设置所属的模式,这样在创建表时表名中不必给出模式名
4.修改基本表
SQL语言用ALTER TABLE语句修改基本表,其一般格式为
ALTER TABLE <表名>
[ADD [COLUMN] <新列名><数据类型> [完整性约束条件]]
[ADD <表级完整性约束条件>]
[DROP [COLUMN] <列名> [CASCADE|RESTRICT]]
[DROP CONSTRAINT<完整性约束名>[RESTRICT|CASCADE]]
[ALTER COLUMN<列名><数据类型>];

ALTER TABLE Student ADD S_entrance DATE;
ALTER TABLE Student ALTER COLUMN Sage INT;
ALTER TABLE Course ADD UNIQUE(Cname);
5.删除基本表
当某个基本表不再需要,可以使用DROP TABLE 语句删除它。
DROP TABLE <表名> [RESTRICT|CASCADE];(默认为RESTRICT)
例1
    DROP TABLE Student CASCADE;
例2
CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept='IS';
DROP TABLE Student RESTRICT;
DROP TABLE Student CASCADE;
SELECT * FROM IS_Student;

3.索引的建立与删除

关系数据库管理系统在执行查询时会自动选择合适的索引作为存取路径,用户不必也不能显示的选择索引。索引是关系数据库管理系统的内部实现技术,属于内模式的范畴。数据库索引有多种类型,常见索引包括:顺序文件上的索引、B+树索引、散列索引、位图索引
1.建立索引
在SQL语言中建立索引使用CREATE INDEX语句,一般格式为:
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名> [<次序>][,<列名> [<次序>]]……);

CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
2.修改索引
ALTER INDEX <旧索引名> RENAME TO <新索引名>;

ALTER INDEX SCno RENAME TO SCSno;
3.删除索引
DROP INDEX <索引名>;

    DROP INDEX Stusname;

4.数据字典

数据字典是关系数据库管理系统内部的一组系统表,它记录了数据库中所有的定义信息,包括关系模式定义、视图定义、索引定义、完整性约束定义、各类用户对数据库的操作权限、统计信息等。关系数据库管理系统在执行 SQL的数据定义语句时,实际上就是在更新数据字典表中的相应信息。在进行查询优化和数据处理时,数据字典中的信息是其重要依据。
(示例代码集合)
CREATE SCHEMA "S-T" AUTHORIZATION WANG
CREATE SCHEMA AUTHORIZATION WANG
CREATE SCHEMA "TEST" AUTHORIZATION ZHANG CREATE TABLE TAB1(COL1 SMALLINT,COL2 INT,COL3 CHAR(20),COL4 NUMERIC(10,3),COL5 DECIMAL(5,2))
DROP SCHEMA ZHANG CASCADE
CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) UNIQUE,Ssex CHAR(2), Sage SMALLINT, Sdept CHAR(20));
CREATE TABLE Course (Cno char(4) PRIMARY KEY, Cname CHAR(40) NOT NULL, Cpno CHAR(4), Ccredit SMALLINT, FOREIGN KEY (Cpno) REFERENCES Course(Cno));
CREATE TABLE SC (Sno CHAR(9), Cno CHAR(4), Grade SMALLINT, PRIMARY KEY (Sno,Cno),FOREIGN KEY(Sno)REFERENCES Student(Sno),FOREIGN KEY(Cno) REFERENCES Course(Cno));
ALTER TABLE Student ADD S_entrance DATE;
ALTER TABLE Student ALTER COLUMN Sage INT;
ALTER TABLE Course ADD UNIQUE(Cname);
DROP TABLE Student CASCADE;
CREATE VIEW IS_Student AS SELECT Sno,Sname,Sage FROM Student WHERE Sdept='IS';
DROP TABLE Student RESTRICT;
DROP TABLE Student CASCADE;
SELECT * FROM IS_Student;
CREATE UNIQUE INDEX Stusno ON Student(Sno);
CREATE UNIQUE INDEX Coucno ON Course(Cno);
CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);
ALTER INDEX SCno RENAME TO SCSno;
DROP INDEX Stusname;

此博客中的热门博文

Rational Rose 2007破解版下载、安装教程

SQL概述

1.25USD,V2Ray搭建,让你奔向自由!