-- 创建数据表
/* create table <表名>
( 字段名1 数据类型[列级别约束条件][默认值]
....
[表级别约束条件]
)*/
-- 创建员工表tb_emp
create table tb_emp(
id number(11),
name varchar2(10),
depid number(11),
salary number(9,2)
);
-- 查看表结构注意 command window下可以使用
-- desc tb_emp;
-- 约束条件
-- 1、主键约束(primary key),主键是表中一列或多列的组合
-- 主键能够唯一的标识表中一条记录,还可以结合外键定义不同表之间的关系
-- 可以加快数据库查询的速度
-- 1.1、创建表的同时声明主键约束
create table tb_emp3(
id number(11) primary key,
name varchar2(20)
);
-- 联合主键
create table tb_emp4(
id number(11),
name varchar2(20),
salary number(10,2),
primary key(id,name)
);
-- 1.2、给定义的表添加主键约束
/*alter table 表名
add constraints 约束名 primary key (字段名)*/
alter table TB_EMP2
add constraints pk_id primary key (id);
-- 1.3、移除主键约束
/*ALTER TABLE 表名
DROP CONSTRAINT 约束名;*/
alter table tb_emp4
drop constraints sys_c007421;
-- 2、外键约束,外键用来在两个数据表的数据之间建立连接
-- 一个表可以有一个或多个外键
-- 外键首先肯定是当前表的一个字段(可以不是当前表的主键)对应着另一个数据表的主键。
-- 外键的主要作用保证多表间数据的完整性
-- 注意:主外键类型要相匹配
create table tb_dept(
id number(11) primary key,
name varchar2(22)
);
-- 2.1 创建表的同时声明外键
/*constraint <外键名> foreign key 字段1,[字段2]
references <主表名> 主键列1[,主键列2,...]*/
-- 主表(父表):对于两个有关联关系的表而言,关联的键为主键所在的表为主表
-- 从表(子表):对于两个有关联关系的表而言,关联的键为外键所在的表为从表
create table tb_emp5(
id number(10) primary key ,
name varchar2(20),
deptid number(11),
constraint fk_emp_dept1 foreign key(deptid) references tb_dept(id)
);
-- 2.2、给已存在的表添加外键约束
/*alter table 表名
add constraints 约束名 foreign key (外键约束的字段名)
references 表名(字段名)
on delete cascade;*/
alter table tb_emp
add constraints fk_emp_dept foreign key(depid)
references tb_dept(id);
-- 2.3、 删除外键约束
alter table tb_emp
drop constraints fk_emp_dept;
-- 3、非空约束
-- 字段的值不能为空
create table tb_emp6(
id number(11) primary key,
name varchar2(10) not null
);
-- 为表添加非空约束
/*alter table 表名
modify 字段名 not null*/
alter table tb_emp5
modify name not null;
-- 移除非空约束
alter table tb_emp5
modify name null;
-- 4、唯一约束
-- 该列要求唯一,确保一列或者几列不出现重复值
create table tb_dept2(
id number(11) primary key,
name varchar2(22) unique
);
-- 为表添加唯一约束
/*alter table 数据表名
add constraint 约束名 unique(字段名)*/
alter table tb_emp5
add constraint uq_name unique(name);
-- 为表移除唯一约束
alter table tb_emp5
drop constraint uq_name;
-- 5、检查约束
-- 规定每一列能够输入的值,从而保证数据的正确性
/*constraint 检查约束名 check(检查条件)*/
create table tb_emp7(
id number(11) primary key,
name varchar2(10),
gender varchar2(2),
constraint chk_gender check(gender='男' or gender='女')
);
-- 修改数据表时添加检查约束
alter table tb_emp7
add constraint chk_name check(name='admin' or name = 'user');
-- 移除检查约束
alter table tb_emp7
drop constraint chk_name;
-- 6、默认值
-- 字段名 数据类型 default 默认值
create table tb_emp8(
id number(11) primary key,
deptid number(11) default 20
);
-- 修改数据表
/*alter table*/
-- 1、修改表名
/*alter table <旧表名> rename to <新表名>;*/
alter table tb_dept rename to tb_dept1;
-- 2、修改字段类型
/*alter table <表名> modify <字段名> <数据类型>*/
alter table tb_dept1 modify name varchar2(22);
-- 3、修改字段名
/*alter table <表名> rename column <旧字段名> to <新字段名>*/
alter table tb_dept1 rename column name to dname;
-- 4、添加字段
/*alter table <表名> add <新字段名> <数据类型>*/
alter table tb_dept1 add location varchar2(20);
alter table tb_dept1 add phone number(13) not null;
-- 5、删除字段
/*alter table <表名> drop column <字段名>*/
alter table tb_dept1 drop column phone;
-- 删除数据表
-- drop table 表名
-- 删除没有关联的表
drop table tb_emp8;
-- 删除有关联的表,因为tb_dept1的主键被tb_emp5引用,有外键约束所以不能直接删除
-- drop table tb_dept1;ORA-02449: 表中的唯一/主键被外键引用
-- 可以去除外键约束然后删除
alter table tb_emp5 drop constraints fk_emp_dept1;
drop table tb_dept1;