创建表
create table 表名(
列名 数据类型 [[constraint 约束名字]约束],
...,
[constraint设定级联约束,
语法
constraint 约束名 约束类型 绑定属性.
例题
check约束constraint j_date_interval check (end_date > start_date)
主键约束constraint date_pk primary key (employee_id,start_date)
外键约束 CONSTRAINT fk_name foregin key(name1) references tb(name2),
]
....
)
表参数;
约束
名字 | 作用 |
---|---|
主键(primary key) | 唯一标识,只能一个主键 |
唯一性(unique) | 取值唯一 |
检查(check) | 限制列 |
外键(foreign key) | 该字段在其他表存在主键 |
非空(not null) | 不能为空 |
数据类型
数据类型名称 | 说明 |
---|---|
char(n) | 固定长度的字符串 |
varchar2(n) | 存储可变字符串 |
number(p,s) | 数值,p为总位,s为小鼠位数 |
date | 日期类型 |
timestamp(n) | 时间戳 |
clob | 大型字符串,支持变长或定长字符串 |
blob | 大型的未被结构化边长的二进制(如二进制视频、音频等非文本) |
bfile | 二进制个数文本,该二进制文件保存在数据库外部操作系统 |
raw(n) | 边长二进制 |
rowid | 行标识符,物理地址伪劣类型 |
long raw | 变长二进制最大2GB建议用blob |
表参数
名字 | 说明 |
---|---|
tablespace | 表空间 |
storage | 存储参数 |
longging、nologging | 是否写入日志,默认logging |
cache、nochache | 是否缓存,默认cache |
noparallel、parallel | 是否允许并行创建表以及随后对表中数据进行并行操作,默认noparallel |
例
1.创建一个regions表,字段:主键region_id number,region_name 变长25
create table regions(
region_id number primary key,
region_name varchar2)25)
)
tablespace users;
2.创建一个countries表,字段:主键country_id 定长2,不为空且唯一country_name 变长40,外键region_id
create table countries(
country_id char(2) primary key,
country_name varchar2(40) unique not null,
region_id number references regions(region_id)
);
3.创建history表,字段:employee_id 数字6 不为空 外键employees表employee_id,start_date、end_date 不为空的日期,
约束:start_date<end_date,主键为employee_id和start_date
create table histroy(
employee_id number(6) not null references employees(employee_id),
start_date date not null,
end_date date not null,
constraint j_date_interval check (end_date > start_date)
constraint date_pk primary key (employee_id,start_date)
);
修改表
修改表使用alter table语句添加列、修改列的数据类型与名字、将列设置为不可用、删除列、修改表名称等
alter table的语法有
alter table tablename
[add 列名 数据类型[约束]] -- 添加
[modify 列名 修改后的数据类型] --修改
[set unused column 列] --设置单列为不可用状态
[set unused columns (列,列)] --多列设置
[drop column 列] --删除单列
[如果需要删除约束则需要加上cascade constaints]
[drop (列,列)] --删除多行
[drop unused 列] --仅更新表的数据字典,先将字段置为不可用状态
[rename column 旧名|新名] --修改列名
[rename to 新表名] --修改表名
例题
emp添加2列
alter table emp add(name1 varchar(20),name2 date not null);
emp修改name数据类型
alter table emp modify name date;
emp修改名字
alter table emp rename column name1 to name2;
emp删除
alter table emp drop column name1,name2 cascade constraints;--删除约束
alter table emp drop (name1,name2);--删除多行
emp改名
alter table emp rename to name;
设置unused
alter table emp unused column name;
修改约束
alter table name
[add [constraint 名] 类型(列,..)[condition]]|
[modify column [not null]|[null]]|
[drop [constraint 名]|[primary key]|[unique(列)]][cascade 删除该约束的其他约束如外键]
例题
player表
名字 | 类型 |
---|---|
ID | numbser(6) |
sno | number(6) |
sname | varchar2(10) |
sage | number(6,2) |
resume | varchar2(1000) |
添加ID主键约束
alter table player add constraint P_PK primary key(ID);
添加sname唯一约束
alter table player add constraint P_UK unique(sname);
添加检查约束,检查年龄在20到30
alter table player add constraint P_CK check(sage between 20 and 30);
添加外键约束,sno是student(sno)的外键,
alter table player add constraint P_PK foreign key(sno) references student(sno) on delete cascade;
添加resume空/非空约束
alter table player modify resume not null;
alter table player modify resume null;