DDL(数据定义语言)
表的操作:新建表,修改表,删除表,主键,约束
表:是orcal常见对象之一
orcale对象:表,索引,视图,序列,同义词...
一、新建表
表的命名
- 必须以字母开头,长度在 30个字符之内
- 可以包含的字符:字母,数字,下划线,#,$
- 两个单词之间一般用下划线连接
- 表名不可以在同一用户下重复
- 表名不可以是关键字
- 对大小写不敏感,不区分大小写
- 如果强制的区分大小写,可以使用""进行包裹
语法:
create table 表名(
列1 数据类型 【默认值】 【约束】,
列2 数据类型 【默认值】 【约束】,
列3 数据类型 【默认值】 【约束】
)
--案例:创建一个学生表(学号【主键】,姓名,年龄,入学时间,学费)
create table studentNew(
sno varchar2(10) primary key,--设置为主键表示该字段非空唯一
sname varchar2(20),
sage number(3),
sdate date,
smoney number(7,2)
)
--插入
insert into studentNew values (01,'xiaojiang',20,to_date('2019-06-06','yyyy-mm-dd'),19000);
insert into studentNew values (02,'xiaowang',21,to_date('2019-06-06','yyyy-mm-dd'),20000);
insert into studentNew values (03,'wanghong',19,to_date('2017-09-07','yyyy-mm-dd'),8000);
insert into studentNew values (04,'jiangyan',20,to_date('2018-06-04','yyyy-mm-dd'),3000);
insert into studentNew values (05,'tiantian',20,to_date('2018-06-04','yyyy-mm-dd'),3000);
insert into studentNew values (09,'jiangyan',20,to_date('2018-06-04','yyyy-mm-dd'),3000);
--修改数据
update studentNew set sage=18 where sname = 'tiantian';
--删除数据
delete from studentNew where sno=09;
drop table studentNew;--删除表
二、修改表
(1)添加新字段(无论表中是否有数据都可以执行该操作)
alter table 表名
add(字段名 数据类型(m) [default 默认值])
(2)修改字段类型
- 已有数据的情况下长度不能小于当前数据的长度
- 已有数据的情况下类型不能乱改
--修改表
--1.添加新字段(无论表中是否有数据都可以执行该操作)
alter table studentNew
add(sgender varchar2(3) default '男');--它不能控制位置,只能在最后面
--2.修改字段类型
--已有数据的情况下长度不能小于当前数据的长度
alter table studentNew
modify (sname varchar2(20));
--已有数据的情况下类型不能乱改
alter table studentNew
modify (sname number(20));---不可以
--修改列名
alter table studentNew rename column sgender to ssex;
(3) 修改列
alter table 表名
modify(字段名 数据类型(m))
(4)修改列名
alter table 表名 rename column 列名 to 新列名
--修改列名
alter table studentNew rename column sgender to ssex;
(5)删除字段(列)
alter table 表名 drop(字段名)
--3.删除字段
alter table studentNew
drop (smoney);
(6)通过子查询建表
语法:
create table 表名
as 子查询
注意:子查询中若有表达式,必须使用别名
--通过子查询建表
create table emp_copy
as
select * from emp;
select * from emp_copy;
select * from emp_copy2;
--子查询中有表达式,必须使用别名
create table emp_copy2
as
select empno,ename,job,sal* 12 年薪,deptno from emp;
(7)使用小写字符进行定义表名
--使用小写字符进行定义表
create table "user"(
u_id number(5),
"u_name" varchar2(50)
)
(8)表的重命名
--表的重命名
rename emp_copy2 to emp_copy02;
(9)斩断表
truncate table 表名
l类似于delete from 表名
不同点在于trunctae table 表名不可以回滚
--斩断表
--清空表内数据,不可以回滚
语法:
truncate table 表名
leisiyu delete from 表名
不同点在于TRUNCATE TABLE 表名不可回滚(rollback)
select * from emp_copy;
delete from emp_copy;
truncate table emp_copy;
(10)关系表
表与表之间有一定的关联
- 主表(被引用的表)
- 从表(引用主表的数据)
- 主键(不可重复,不为空,一张表中一般只有一个,主键所在的表是主键(相对的))
- 外键(必须为另一个表的主键,并加以引用,外键所在的表是从表)
表与表的关联关系
- 一对一:一个表中的一条记录匹配另一个表的一条记录
- 一对多:一个表中的一条记录匹配另一个表中的多条记录
- 多对多:一个表中的多条记录匹配另一个表的多条记录
往往是多个一对多组成的
三、表的设计
遵从三大范式
- 第一范式(1NF):任何列不可分割,每个列是表中的最小单元
- 第二范式(2NF):在第一范式的基础上,任何列都必须依赖于主键存在,一张表值描述一个实体
- 第三范式 (3NF) :在第二范式基础上,要求每一个不得简介的依赖于主键