一、数据定义
模式的定义与删除
定义模式
模式定义语句:
CREATE SCHEMA<模式名>AUTHORIZATION<用户名>
如果没有指定<模式名>,那么<模式名>隐含为<用户名>,也就是默认创建在dbo模式下。总之,要创建模式,调用该命令的用户必须拥有数据库管理员权限,或者获得了数据库管理员授予的CREATE SCHEMA的权限。
定义模式实际上定义了一个命名空间,在这空间中可以进一步定义该模式包含的数据库对象,例如基本表、视图、索引等。事实上,在将来的应用中,我们经常会建立不同表,表内容不同,但表名大多相同,此时,在不同的模式中也就是不同的命名空间中可以存在相同的名字(同一个模式中表名不能相同)。
另:创建用户 指路>>>http://t.csdn.cn/SVWlH
目前,在CREATE SCHEMA中可以接受CREATE TABLE,CREATE VIEW 和GRANT子句。也就是说用户可以在创建模式的同时在这个模式定义中进一步创建基本表、视图,定义授权。即
CREATE SCHEMA<模式名>AUTHORIZATION<用户名>[<表定子句名>|<视图定义子句>|<授权定义子句>]
实例:
--为用户ZHANG创建一个模式TEST,并且在其中定义一个表TAB1.
CREATE SCHEMA TEST AUTHORIZATION ZHANG
--创建模式
CREATE TABLE TAB1(COL1 SMALLINT,
--创建表TAB1
COL2 INT,
COL3 NUMERIC(10,3)
COL4 NUMERIC(5,2)
--COL一共4个属性及其数据类型
);
删除模式
删除模式语句:
DROP SCHEMA <模式名><CASCADE|RESTRICT>
CASCADE 和 RESTRICT两者必选其一。选择了CASCADE(级联),表示在删除模式的同时把该模式中所有的数据库对象全部删除;选择了RESTRICT(限制),表示如果模式中已经定义了下属的数据库对象(如表,视图等),则拒绝删除该语句的执行。只有当该模式中没有任何下属的对象时才能执行DROP SCHEMA语句。
上面的不太理解可以先略过,暂时只在master(默认的系统数据库)里面进行下面的操作
基本表(表)的定义,删除与修改
定义基本表语句:
CREATE TABLE <表名>(<列名><数据类型>[列级完整性约束条件]
[,<列名><数据类型>[列级完整性约束条件]]
...
[,<表级完整性约束条件>]
)
完整性约束:实体完整性,参照完整性,定义完整性
实体完整性:用实体完整性来保证”关系数据库中每个元组应该是可区分的,是唯一的“这样的约束条件。
实体完整性规则:若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值。
参照完整性:设F是基本关系R的一个或一组属性,但不是关系R的码,K'是基本关系S的主码。如果F与K'相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系(关系R和S不一定是不同的关系)。
参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码K'相对应(基本关系R和S不一定是不同 的关系),则对于R中每个元组再F上的值必须:
或者取空值(F的每个属性值均为空值);
或者等于S中某个元组的主码值。
用户定义的完整性:针对某一具体关系数据库的约束条件,反映某一具体应用涉及的数据必须满足的语义要求。
实例:
--建立一个“学生“表Student
CREATE TABLE Student
(Sno CHAR(9)PRIMARY KEY,
--列级完整性约束条件,Sno是主码
Sname CHAR(20) UNIQUE,
--Sname取唯一值
Ssex SMALLINT,
Sdept CHAR(20)
--注意逗号和空格的使用,SQL语句不分大小写,仅看个人习惯
候选码:若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码
主码:若一个关系有多个候选码,则选定其中一个为主码
--建立一个”课程“表Course
CREATE TABLE Course
(Cno CHAR(4)PRIMARY KEY,
--列级完整性约束,Cno是主码
Cname CHAR(40)NOT NULL,
--立即完整性约束,Cname不能取空值
Cpon CHAR(4),
--Cpno的含义是先修课
Ccredit SMALLINT,
FOREIGN KEY (Cpon)REFERENCES Course(Cno)
--表级完整性约束,Cpno是外码,被参照表是Course,被参照列是Cno
--参照表和被参照表可以是同一个表
--建立学生选课表SC
CREATE TABLE SC
(Sno CHAR(9),
Cno CHAR(4),
Grand SMALLINT,
PRIMARY KEY(Sno,Cno),
--主码由两个属性构成,必须作为表级完整性定义
FOREIGN KEY(Sno)REFERENCES Course(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<列名><数据类型>];
--修改列(属性
--增加
--向Student表增加“入学时间”列,其数据类型为日期型
ALTER TABLE Student ADD S_entrance DATE;(下划线是干嘛的可以去掉吗)
--修改
--将年龄的数据类型由原来的字符型改为整数
ALTER TABLE Studebt ALTER COLUMN Sage INT;
--增加课程名称为必须取唯一值的约束条件
ALTER TABLE Course ADD UNIQUE(Cname);
删除基本表
删除语句:
DROP TABLE <表名>[RESTRICT|CASCADE];
--与模式操作相同
若选择RESTRICT,则该表的删除是有限制条件。用法同上述删除模式。
索引的建立与删除
建立索引语句:
CREATE [UNIQUE][CLUSTER]INDEX<索引名>
--UNIQUE表明此索引的每一个索引值只对应唯一的数据记录
ON<表名>(<列名>[<次序>][,<列名>[<次序>]]...);
--可选ASC(升序)或DESC(降序),默认是ASC
实例:
--为学生-课程数据库中的Student,Course和SC三个表建立索引。
--其中Student表按学号升序建唯一索引,Course表按课程号升序
--建唯一索引,SC表按学号升序和课程号降序建唯一索引。
CREATE UNIQUE INDEX Student ON Student(Sno);
CREATE UNIQUE INDEX Student ON COURSE(Cno);
CREATE UNIQUE INDEX Student ON SC(Sno ASC,Cno DESC);
修改索引:
--修改索引命
ALTER INDEX <旧索引名>RENAME TO <新索引名>
删除索引
DROP INDEX<索引名>
数据类型
数据类型 | 含义 | |
CHAR(n),CHARACTER(n) | 长度为n的定长字符串 | |
VARCHAR(n) | 最大长度为n的变长字符串 | |
CLOB | 字符串大对象 | |
BLOB | 二进制大对象 | |
INT,INTEGER | 长整数(4字节) | |
SMALLINT | 短整数(2字节) | |
BIGINT | 大整数(8字节) | |
NUMERIC(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 | 时间戳类型 | |
INTRVAL | 时间间隔类型 |
SQL的动词
SQL功能 | 动词 |
数据查询 | SELSECT |
数据定义 | CREATE,DROP,ALTER |
数据操纵 | INSERT,UPDATE,DELETE |
数据控制 | GRANT,REVOKE |
SQL的数据定义语句
操作对象 | 操作方式 | ||
创建 | 删除 | 修改 | |
模式 | CREATE SCHEMA | DROP SCHEMA | |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
视图 | CREATE VIEW | DROP VIEW | |
索引 | CREATE INDEX | DROP INDEX | ALTER INDEX |
需要注意的是,CHAR一个数字/字母是一个字符,一个汉字是两个字符
每个表中都有一个主键