数据库系统原理(三)表的定义

数据库系统原理(三)表的定义

文章目录

  • 数据库系统原理(三)表的定义
      • SQL数据定义
      • 基本类型
      • 基本模式定义
        • 基本命令

SQL数据定义

SQL的DDL(数据定义语言)不仅能够定义一组关系,还能够定义每个关系的信息,包括:

  • 每个关系模式
  • 每个属性的取值类型
  • 完整性约束
  • 每个关系维护的索引集合
  • 每个关系的安全性和权限信息
  • 每个关系在磁盘上的物理存储结构
CRATE TABLE instructor(
	ID char(5),
    name varchar(20) not null,
    dept_name varchar(20),
    salary numeric(8,2),
    primary key (ID)
);

基本类型

  • char(n) :固定长度字符串,用户指定长度n
  • varchar(n):可变长度的字符串,用户指定最大长度n
  • int: 整数类型(和及其相关的整数类型),等价于全程interger
  • smallint: 小整数类型(和机器相关的整数类型的子集)
  • numeric(p,d):定点数,精度由用户指定。这个数由p位数字,其中d位数字在小数点右边
  • real,double precision:浮点数与双精度浮点数,精度与机器相关
  • float(n):精度至少为n位的浮点数
  • null: 每种类型都可以包含一个特殊值,即空值。可以声明属性值不为空
  • date: 日期,含年,月,日 如“2015-3-20”
  • time: 时间,含小时,分钟,秒,如‘08:15“30’
  • timestamp :日期+时间

注:日期和时间类型在SQL Sever 2000中用‘datetime’ 表示

基本模式定义

我们用create table命令定义SQL关系:

CRATE TABLE r

(A1 D1,A2 D2,…,An Dn,

<完整性约束1>,

…,

<完整性约束k>);

其中,r是关系名,每个Ai是关系r模式中的一个属性名,Di是属性Ai的域

SQL支持许多不同的完整性约束

  • not null 一个属性上的not null 约束表明在该属性上不允许空值
  • primary key(A1,…,An),声明表示属性A1,…,An构成关系的主码。主码属性必须非空且唯一
  • foreign key(A1,…,Am)references ,声明表示关系中任意元组在属性上(A1,…,Am)上的取值必须对应于关系s中某元组的主码属性上的取值
  • check(p),p是谓词条件
//声明ID为instructor的主码,并确保salary的值非负

//方法1
CREATE TABLE instructor
(
    ID char(5),
    dept_name varchar(20),
    salary numeric(8,2),
    primary key (ID),
    check(salary >= 0)
);

CREATE TABLE instructor
(
    ID char(5) primary key,
    name varchar(20),
    depet_name varchar(20),
    salary numeric(8,2),
    check (salary >= 0)
);

基本命令

drop table:从数据库删除关于被去掉关系的所有信息

  • DROP TABLE r;
  • 如 DROP TABLE instructor2;

alter table add为已有关系增加属性

  • ALTER TABLE r ADD A D;
  • 其中A是待添加属性的名字,D是待添加属性的域。关系中所有元组在新属性上的取值将被设为null
  • 如 ALTER TABLE instructor add birthday date;

alter table drop 从关系中去掉属性

  • ALTER TABLE r DROP A
  • 但是很多数据库系统不支持此操作

alter table modify 修改关系中的属性

  • 如,ALTER TABLE instructor MODIFY(ID char(10))

你可能感兴趣的:(数据库)