数据定义
数据定义是指对数据库中的数据结构对象进行定义,可以创建、修改和删除对象结构。
SQL中的数据定义功能可以操作的对象有:模式、表(关系)、视图和索引。
SQL中的数据定义语句:
定义基本表
create table 表名
(列名 数据类型 列级完整性约束条件,
列名 数据类型 列级完整性约束条件,......
列名 数据类型 列级完整性约束条件,
表级完整性约束条件
);
注意: 这里面的列级完整性约束条件是可以省略的,但是前面的列名和数据类型是必须的。
另外,在最后一行是可以不加逗号的。
create table student(
sno varchar2(50),
sname varchar2(50),
age date
);
定义基本表的完整性
1.实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,由DBMS自动支持。
2.在DBMS中设置表的主码(主键),实体完整性规则自动生效
3.在DBMS中设置表的外码,参照完整性规则自动生效
4.用户自定义的完整性通过写表达式实现相应规则
定义实体完整性
CREATE TABLE YourTableName (
column1 datatype PRIMARY KEY,
column2 datatype,
...
);
定义参照完整性
CREATE TABLE Table1 (
column1 datatype PRIMARY KEY
-- other columns
);
CREATE TABLE Table2 (
column2 datatype,
foreign_key_column datatype,
CONSTRAINT fk_constraint_name FOREIGN KEY (foreign_key_column) REFERENCES Table1(column1)
);
用户自定义的完整性(通过触发器实现)
CREATE OR REPLACE TRIGGER YourTriggerName
BEFORE INSERT OR UPDATE ON YourTableName
FOR EACH ROW
DECLARE
-- define variables if needed
BEGIN
-- define your custom integrity rules using PL/SQL logic
-- raise an exception if the integrity rule is violated
END;
表中主要的完整性约束条件
- 实体完整性:
primary key
- 参照完整性:
foreign key
- 用户自定义的完整性约束
- 属性列取值范围约束:
check
(条件表达式) - 唯一约束:
unique
- 非空值约束:
not null
- 属性列取值范围约束:
属性列的数据类型
- 关系模型中一个很重要的概念是域,SQL中域的概念用数据类型来实现
- 定义表的属性时需要指明其数据类型及其长度
- 选用哪种数据类型的一句
- 取值范围
- 要做哪些运算
- 不同的DBMS中支持的数据类型不完全相同
Oracle中常用的数据类型:
char
:固定长度的字符型。最多存放2000个字符,使用时需要指定最大长度,一旦定义了char类型的列,该列就会已知保持声明时所规定的数据长度,不足时自动用空格填充。varchar2
:可变长度的字符型,最多存放4000个字符,使用时需要制定最大长度。clob
:用于存放大文本数据、海量文字、长度为4G。number
:所有的数值型,格式为number(p,s),其中p代表总位数,s表示小数的位数,p最大为38.使用时长度可要可不要。date
:存放日期时间类型,用7个字节分别描述年、月、日、时、分、秒。
修改基本表
alter table <表名>
[ add <新列名> <数据类型> [ 完整性约束 ] ]
[ add <表级完整性约束> ]
[ drop column <列名> ]
[ drop constraint <完整性约束名> ]
[ rename column <列名> to <新列名>]
[ modify <列名> <数据类型> ];
删除基本表
drop table <表名> [casacde constrains];
在删除一个表的结构时,Oracle通常会执行以下操作:
- 删除表中的所有数据
- 删除于该表相关的所有索引和触发器
- 如果有视图或PL/SQL过程依赖于该表,这些视图或者PL/SQL过程将被置于不可用状态
- 从数据字典中删除该表的定义
- 会搜为该表分配的存储空间
cascade constraints
,如果说使用该参数的话,drop table
不仅仅删除该表,而且所有引用这张表的视图、约束或触发器等也都被删除。
暂时还没整理完,后续还会继续更新