目录
一、对表的操作
(一)复制表
1、语法
2、练习
3、仅复制表格式--在where后加一个不成立的条件
(二)自建表
1、数据类型
(1)字符类型:char2、varchar/varchar2
char (数)固定长度类型
varchar/varchar2 (数)可变长度类型
(2)数值类型:number、int
number(数1,数2)
int(数)
(3)日期类型:date、timestamp
date不用加长度
timestamp 时间戳
(4)大对象类型
BLOB 二进制大对象
CLOB 字符大对象
2、自建表
(1)语法
(2)练习
(二)删除表
(三)清空表
(四)给表重新命名
(五)查看垃圾桶
(六)查看用户所有的表信息
(七)闪回表(恢复表)
(八)修改表
二、对列的DCL操作alter,table的存在是前提
(一)增加列alter...add
(二)修改列类型长度modify:修改更改但是不能更改类型
(三)删除列alter...drop
(四)给列重命名alter..rename
三、约束
(一)约束的作用
(二)约束的分类
(三)建立约束
1、不带约束名称的--系统会分配一个SYS开头的名字
2、带约束名称的
(四)列模式
(五)约束的一些常规操作(增加、修改、重命名、禁用/启用)
(六)外键约束(只能用列模式)
1、语法
2、重点说明
(七)以下对约束的四种状态说明
1、enable validate :正常的启用约束
2、enable novalidate :--check(只能用在检查约束)
3、disable novalidate :正常的禁用约束
4、disable validate :锁表
(八)启用约束
(九)禁用约束
一、对表的操作
(一)复制表
1、语法
create table 表名 as select语句(列 from 表)create table emp1 as select * from empcreate table emp2 as select * from emp
2、练习
--创建三张表,分别包含10部门20部门30部门的信息
create table "10部门的弟弟" as select * from emp where deptno=10
create table "20部门的弟弟" as select * from emp where deptno=20
create table "30部门的弟弟" as select * from emp where deptno=30
3、仅复制表格式--在where后加一个不成立的条件
--创建一张只有emp表名字段的空表
create table emp空 as select * from emp where 1=2
(二)自建表
1、数据类型
(1)字符类型:char2、varchar/varchar2
char (数)固定长度类型
是指输入的字段虽然小于该字段的限制长度,但实际存储时会自动补充空格后才把字段内容存储到数据块中。
char字段最多可以存储2000字节,char不写参数默认为char(1)
比较浪费空间但是存储效率比可变字符高。即读取快但浪费空间
varchar/varchar2 (数)可变长度类型
当输入的值小于该字段的限定长度时,直接将该字段的值输入存储到数据库中,不会补上空格
vachar2最多可以存储4000字节信息
节省空间但是存储效率低于固定长度。即不浪费空间但读取慢
(2)数值类型:number、int
number(数1,数2)
数1:是总长度,数2是小数点后的位数。数1数2不写默认126位
数2:会四舍五入
如:number(3,2)代表总长度为3,小数2位。
int(数)
只存放整数,int 相当于number(22)
(3)日期类型:date、timestamp
date不用加长度
一个10个字节的定宽日期、时间的数据类型。
其中包含7个属性:世纪、年、月、日、时、分、秒
select length(sysdate)from dual
timestamp 时间戳
(4)大对象类型
BLOB 二进制大对象
二进制保存数据 如:保存位图,4GB*数据块大小
CLOB 字符大对象
使用char来保存数据 如:保存xml文档,4GB*数据块大小
2、自建表
(1)语法
create table 表名 (字段名1 类型长度,字段名2 类型长度,........)create table emp2 (empno number(4),ename varchar2(20),job varchar2(20),sal number(7,2),hiredate date,deptno number(2))
(2)练习
--手动创建一张学生表 我要炸学校 学生编号stuno 姓名name 出生日期 birthday科目 subject 成绩score 标记remarkcreate table school (stuno number(8),name varchar2(20),birthday date,subject varchar2(8),score number(4,1),remark varchar2(20))·建表时,建议吧较小的不为空的字段放到前面,可能为空的放到后面
·表名和字段名可以用中文但是建议使用英文
·一个表的最大字段数是254个
(二)删除表
drop table 表名 {purge}·不加purge逻辑删除
·加purge物理删除
(三)清空表
truncate table emp1
(四)给表重新命名
rename 旧表名 to 新表名
(五)查看垃圾桶
select * from user_recyclebin
(六)查看用户所有的表信息
select * from user_tables
(七)闪回表(恢复表)
flashback table 原来的名字/"在回收站里的对象名" to before drop rename to 新表名
(八)修改表
alter:改变性质modify:修改更改add:增加column:列constraint:限制约束
二、对列的DCL操作alter,table的存在是前提
(一)增加列alter...add
--语法
alter table 表名 add 新列名 类型长度
--举例
alter table emp2 add comm number(6,2)
select * from emp2
(二)修改列类型长度modify:修改更改但是不能更改类型
alter table 表名 modify 列名 修改后的类型长度·同类型修改变长直接修改
·同类型修改变短不能短于已有数据最长长度
·不同类型修改,必须此列为空,否则不能修改alter table emp2 modify deptno varchar2(20)
(三)删除列alter...drop
alter table 表名 drop column 列名alter table emp2 drop column sal
(四)给列重命名alter..rename
【1】语法
alter table 表 rename column 旧列名 to 新列名
【2】举例
--新建一张emp3和emp表数据完全一致create table emp3 as select * from emp;--修改表名为员工表,列名全部改成对应的中文rename emp3 to 员工表;--修改列名alter table 员工表 rename column deptno to 部门编号;alter table 员工表 rename column comm to 提成;alter table 员工表 rename column sal to 工资;alter table 员工表 rename column hiredate to 入职日期;alter table 员工表 rename column mgr to 经理编号;alter table 员工表 rename column job to 职位;alter table 员工表 rename column ename to 名字;alter table 员工表 rename column empno to 员工编号;
--查看结果select * from 员工表
三、约束
(一)约束的作用
1. 用来确保数据库满足业务规则的手段,不过真正的企业开发中,除了主键
2. 约束这种具有强需求的约束,像外键约束、检查约束更多的时候仅仅出现在数据库的设计阶段。
3. 约束是保障数据和理性的最后一道防线!
4. 同一用户下不同表的约束名称不可以重复
(二)约束的分类
约束的分类 | ||
主键约束 | 唯一且非空 | primary key PK |
唯一约束 | 唯一可以为空但只能有一个空 | unique UN |
检查约束 | 加一个where条件 | check CK |
非空约束 | 不能为空 | not null NN |
外键约束 | foreign key FK | |
默认值约束 | default | |
在emp表的deptno列建立外键约束链接到dept的主键列(deptno) 子表emp表的deptno列的值必须在父表dept对应的主键列deptno 里存在,否则报错插不进去。 |
(三)建立约束
1、不带约束名称的--系统会分配一个SYS开头的名字
create table laogong1 (id number(6) primary key,--主键name varchar2(20) not null,--非空age number(3) check(age>=18),--检查约束phone int unique,--唯一job varchar2(20) default 'CLERK',--默认值idcard char(18) unique not null--可以两个约束一起用)
2、带约束名称的
create table laogong2 (id number(6) constraint PK_1 primary key,--主键name varchar2(20) constraint NN_1 not null,--非空age number(3) constraint CK_1 check(age>=18),--检查phone int constraint UQ_1 unique,--唯一job varchar2(20) default 'CLERK',--默认值不可以取别名idcard char(18) constraint UN_2 unique not null--可以两个约束一起用)
(四)列模式
【1】分带约束名字和不带约束名字的create table laogong3 (id number (6) ,name varchar2 (20) ,age number (3) ,phone int ,job varchar(20) default 'CLERK',constraint PK_1 primary key(id),constraint CK_1 check(age>18),constraint phone UQ_1 unique (phone))【2】不可写非空和默认约束
【3】复合约束和外键约束只能通过列模式创建
(五)约束的一些常规操作(增加、修改、重命名、禁用/启用)
【1】增加约束(不能修改非空和默认值)alter table 表名 add {constraint 约束名} 约束类型 (加约束的列)【2】修改非空约束 modifyalter table 表名 modify 列 类型长度 not null/null【3】删除约束 dropalter table 表名 drop constraint 约束名【4】修改约束名 renamealter table 表名 rename constraint 旧约束名 to 新约束名【5】约束的禁用和启用 disable/enablealter table 表名 disable constraint 约束名 ---禁用alter table 表名 enable constraint 约束名 ---启用
(六)外键约束(只能用列模式)
1、语法
constraint 约束名 foreign key(外键列的列名)
references 父表(主键列列名)
{on delete cascade}--级联删除/{on delete set null}--指定级联删除为空
2、重点说明
(1)子表:创建外键约束的表是子表
(2)父表:参考哪张表,那张表就是父表
(3)外键可以为空,也可以不唯一
(4)更新/插入数据到子表时,必须更新/插入是父表参考列已有的值,否则报错
(5)emp表是子表,dept是父表,对emp表的deptno列创建了外键约束
(6)向emp表添加数据,新数据的部门必须是in(10,20,30,40)插入50部门就不行
(7)删除时,如果没有级联删除,必须先删除子表的相关项再删除父表的对应行
(8)删除时,如果有级联删除,子表的相关项和父表的对应列一起删除
(9)如果指定了级联删除为空,则删除父表信息后子表对应的值变成空其他值不变。
(10){on delete set null}--级联删除为空
(11)父表可以插入新的数据(符合主键约束即可)
(七)以下对约束的四种状态说明
validate英 [ˈvalɪdeɪt] 美 [ˈvæləˌdeɪt] v.确证;验证;证实;使合法有效;宣布合法有效
1、enable validate :正常的启用约束
--无法输入违反约束的行,而且表中所有行都要符合约束。
2、enable novalidate :--check(只能用在检查约束)
--表中可以存在不合约束的状态,
--但对新加入数据必须符合约束条件。
3、disable novalidate :正常的禁用约束
--可以输入任何数据,
--表中或已存在不符合约束条件的数据。
4、disable validate :锁表
--不能对表进行插入/更新/删除等操作,
--相当于对整个表的read only 设定。
--对其他列进行更新也不可以。
(八)启用约束
alter table 表明 enable constraint 约束名ALTER TABLE EMP001 enable novalidate CONSTRAINT CK_age;select * from emp001
(九)禁用约束
alter table 表明 disable constraint 约束名ALTER TABLE EMP001 disable validateCONSTRAINT u_1;alter table emp001 add constraint CK_age check(empno between 7369 and 7934);insert into emp001(empno) values(7999);
insert into emp001(empno) values(7965);update emp001 set sal=sal+1;delete from emp001 where empno=7788;