数据定义

数据定义是指对数据库中的数据结构对象进行定义,可以创建、修改和删除对象结构。

SQL中的数据定义功能可以操作的对象有:模式、表(关系)、视图和索引。

SQL中的数据定义语句:
SQL查询-LMLPHP

定义基本表

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中常用的数据类型:

  1. char:固定长度的字符型。最多存放2000个字符,使用时需要指定最大长度,一旦定义了char类型的列,该列就会已知保持声明时所规定的数据长度,不足时自动用空格填充。
  2. varchar2:可变长度的字符型,最多存放4000个字符,使用时需要制定最大长度。
  3. clob:用于存放大文本数据、海量文字、长度为4G。
  4. number:所有的数值型,格式为number(p,s),其中p代表总位数,s表示小数的位数,p最大为38.使用时长度可要可不要。
  5. date:存放日期时间类型,用7个字节分别描述年、月、日、时、分、秒。

修改基本表

alter table <表名>
[ add <新列名> <数据类型> [ 完整性约束 ] ]
[ add <表级完整性约束> ]
[ drop  column <列名> ]
[ drop constraint <完整性约束名> ]
[ rename column <列名>  to <新列名>]
[ modify <列名> <数据类型> ]

删除基本表

drop table <表名> [casacde constrains];
在删除一个表的结构时,Oracle通常会执行以下操作:

  1. 删除表中的所有数据
  2. 删除于该表相关的所有索引和触发器
  3. 如果有视图或PL/SQL过程依赖于该表,这些视图或者PL/SQL过程将被置于不可用状态
  4. 从数据字典中删除该表的定义
  5. 会搜为该表分配的存储空间

cascade constraints,如果说使用该参数的话,drop table不仅仅删除该表,而且所有引用这张表的视图、约束或触发器等也都被删除。

暂时还没整理完,后续还会继续更新

04-24 13:38