SQL数据定义语句
关系数据库系统支持三级模式结构,其模式,外模式和内模式中的基本对象有模式,视图和索引等。因此SQL的数据定义功能包括模式定义,表定义,视图和索引的定义。
sql的数据定义语句
- 模式
- 创建:
CREATE SCHEMA
- 删除:
DROP SCHEMA
- 创建:
- 表
- 创建:
CREATE TABLE
- 删除:
DROP TABLE
- 修改:
ALTER TABLE
- 创建:
- 视图
- 创建:
CREATE VIEW
- 删除:
DROP VIEW
- 创建:
- 索引
- 创建:
CREATE INDEX
- 删除:
DROP INDEX
- 修改:
ALTER INDEX
- 创建:
一个关系数据库管理系统的实例中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表,视图和索引等数据库对象。
模式的定义与删除
定义模式
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>
,如果没有指定<模式名>,那么<模式名>隐含为<用户名>。要创建模式,调用该命令的用户必须拥有数据库管理员权限,或者获得了数据库管理员授予的
CREATE SCHEMA
的权限。目前,在
CREATE SCHEMA
中可以接受
CREATE TABLE
,
CREATE VIEW
和
GRANT
,也就是说用户可以在创建模式的同时在这个模式定义中进一步创建基本表,视图,定义授权。即:
CREATE SCHEMA <模式名> AUTHORIZATION <用户名> [ <表定义子句>|<视图定义子句>|<授权定义子句> ]
;
删除模式
DROP SCHEMA <模式名>
,其中cascade和restrict两者必选其一。选择了cascade(级联),表示在删除模式的同时把该模式中所有的数据库对象全部删除;选择了restrict(限制),表示如果该模式中已经定义了下属的数据库对象(如表,视图等),则拒绝该删除语句的执行。只有当该模式中没有任何下属的对象时才能执行drop schema语句。
基本表的定义,删除与修改
定义基本表
创建了一个模式就建立了一个数据库的命名空间,一个框架。在这个空间中首先要定义的是该模式包含的数据库基本表。SQL语句使用CREATE TABLE
语句定义基本表,其基本格式为:CREATE TABLE <表名> (<列名><数据类型> [列级完整性约束条件] [,<列名><数据类型>[列级完整性约束条件]]) ........... [,<表级完整性约束条件>]
建表的同时通常还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由关系数据库管理系统自动检查该操作是否违背这些完整性约束条件。 如果完整性约束条件涉及该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级
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 */ )
数据类型
- 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):同NUMERIC
- REAL:取决于机器精度的单精度浮点数
- DOUBLE PRECISION:取决于机器精度的双精度浮点数
- FLOAT(n):可选精度的浮点数,精度至少为n位数字
- BOOLEAN:逻辑布尔值
- DATE:日期,包含年,月,日,格式为yyyy-mm-dd
- TIME:时间,包含一日的时,分,秒,格式为HH:MM:SS
- TIMESTAMP:时间戳类型
- INTERVAL:时间间隔类型
修改基本表
ALTER TABLE <表名> [ADD [COLUMN] <新列名> <数据类型> [完整性约束]] [ADD <表级完整性约束>] [DROP [COLUMN] <列名> [CASCADE | RESTRICT]] [DROP CONSTRAINT <完整性约束名> [RESTRICT|CASCADE]] [ALTER COLUMN <列名><数据类型>]
删除基本表
DROP TABLE <表名> [RESTRICT|CASCADE]
。
索引的建立与删除
建立索引
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名> [<次序>] [,<列名> [<次序>]] ...)
- UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录
- CLUSTER:表示要建立的索引是聚簇索引
修改索引
ALTER INDEX <旧索引名> RENAME TO <新索引名>
删除索引
DROP INDEX <索引名>
数据查询
SELECT [ALL|DISTINCT] <目标列表达式> [, <目标列表达式>] …
FROM <表名或视图名> [,<表名或视图名>] | (
%(百分号):代表任意长度(长度可以为0)的字符串。
_(下横线):代表任意单个字符