目录
事务
- 事务是最小的工作单元,作为一个整体进行工作
- 保证事务的整体成功或失败,称为事务控制
- Oracle通过事务确保数据的一致性
- 一个数据库事务包括:
一系列DML(数据操作语言)语句(用commit提交);
或 一个DDL(数据定义语言)语句(自动提交);
或 一个DCL(数据控制语言)语句(自动提交);
- 用于事务控制的语句有:
- commit——提交并结束事务处理
- rollback——撤销事务中已完成的工作(回滚)
- savepoint——标记事务中可以回滚的点
update emp set sal=sal-1000 where ename='SMITH';
SAVEPOINT s1; -- 设置保存点
update emp set sal=sal+1000 where ename='SCOTT';
-- 提交或回滚 只能执行一遍,只要执行其中的一个,那么 其他的就不能执行了
rollback to s1; -- 回滚
commit; -- 提交
-- 事务,把一个工作模块当做是一个整体来进行处理,一旦这个工作模块出现了问题,那么之前执行的语句也会恢复回来
-- 如果没有错误,会提示你 是否提交 或是否回滚
创建表
命名规则
表名和列名:
- 必须以字母开头
- 必须在1-30个字符之间
- 必须只能包含A-Z,a-z,0-9,_,$,和#
- 必须不能和用户定义的其他对象重名
- 必须不能是Oracle的关键字
语法
create table 表名(
列名 类型,
列名1 类型,
列名2 类型
)
-- 创建表
-- 语法
-- create table 表名(
-- 列名 类型,
-- 列名1 类型,
-- 列名2 类型
-- )
create table db001(
dbno number,
dbname varchar2(20),
dbsex varchar2(2)
)
-- 创建表时,设置默认值
create table db002(
dbno number,
dbname varchar2(20),
dbsex varchar2(2) default '男'
)
-- 创建表时,设置非空
create table db003(
dbno number not null,
dbname varchar2(20) not null,
dbsex varchar2(2) default '男'
)
查看表
-- 查看该用户的所有表
select * from user_tables
-- 查看用户定义的各种数据库对象
select distinct object_type
from user_objects;
-- 查看用户定义的表,视图,同义词和序列
select * from user_catalog;
数据类型
数据类型 | 描述 |
VARCHAR2(size) | 可变长字符数据 |
CHAR(size) | 定长字符数据 |
NUMBER(p,s) | 可变长数值数据 |
DATE | 日期型数据 |
LONG | 可变长字符数据,最大可达到2GB |
CLOB | 字符数据,最大可达到4GB |
RAW and LONG RAW | 原始二进制数据 |
BLOB | 二进制数据,最大可达到4GB |
BFILE | 存储外部文件的二进制数据,最大可达到4G |
ROWID | 行地址 |
备份
-- 备份 表数据
-- 但是有问题,就是这个表只能被执行一遍
create table db_tmp
as
select * from emp
create db_tmp1
as
select ename,sal from emp
-- 只想要表的结构,不要数据
create table db_tmp2
as
select * from emp where 1<>1
修改表列信息
ALERT TABLE语句
使用ALERT TABLE语句可以:
- 追加新的列
- 修改现有的列
- 为新追加的列定义默认值
- 删除一个列
-----------------修改表列信息--------------------
-- alter 表示 修改的意思
-- alert table 表名
-- 添加列 add 列名 类型
alert table db_tmp1 add empsex varchar2(2)
-- 修改表中的列信息 modify 列名 类型 默认信息(default ‘男’)
alert table db_tmp1 modify empsex number
-- drop column 列名 表示 删除某个列
alert table db_tmp1 drop column empage
-- 修改列的名字 rename column 旧名 to 新名;
alert table db_tmp1 rename column empsex to sex
删除表及结构
----------------删除表及结构(这个表就没了)-----------------
-- drop 删除
drop table db_tmp1
修改表名
------------------修改表名-------------------------
rename DB_tmp1 to new_tmp
清空这个表中的数据
----------------清空这个表中的数据--------------------
truncate table new_tmp
-- drop,truncate,delete 他们三个的区别是什么?
-- drop:表示 删除表结果(这个表就没有了)
-- truncate和delete都是删除数据,那么不同点是
-- 1.delete可以添加进行删除某条数据,truncate不能添加条件,一旦执行会删除 表中所有数据
-- 2.delete可以使用事务进行回滚提交等操作,truncate没有回滚功能
-- 3.truncate的删除数据,效率高,速度快;delete效率低点,但是针对某条进行删除
-- 4.truncate执行之后,改变会恢复到初试状态;delete不会,还会保留里面的一些信息
练习
1.创建表date_test,包含列d,类型为date。试向date_test表中插入两条记录,一条当前系统日期记录,一条记录为“1998-08-18”。
2.创建与dept表相同表结构的表dtest,将dept表中部门编号在40之前的信息插入该表
3.创建与emp表结构相同的表emp1,并将其部门编号为前30号的员工信息复制到emp1表
4.试为学生表student增加一列学生性别gender 默认值“女”
5.试修改学生姓名列数据类型为定长字符型10位。
约束
约束是表级的强制规定
约束放置在表中删除有关联关系的数据
有以下五种约束:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
-------------------------约束-------------------------
-- 唯一约束
create table con001(
cno number,
cname varchar2(20) not null,
csex varchar2(2),
-- constraint 约束名 unique(什么约束)(列)
constraint cname_uk unique(cname)
)
-- 主键约束
create table con002(
cno number,
cname varchar2(20) not null,
csex varchar2(2),
-- 主键约束
constraint cno_pk primary key(cno)
)
-- 外键约束
create table con003(
cno number,
cname varchar2(20) not null,
csex varchar2(2),
-- 约束 约束名 本表关联 本表字段 关联主表 主表名 主表列
constraint cno_fk foreign key (cno) references emp (empno)
)
-- 检查约束
create table con004(
cno number,
cname varchar2(20) not null,
csex varchar2(2),
constraint csex_CK check(csex='男' or csex='女')
)
建表之后的操作
-- 表已经创建完成了,之后要添加约束
alert table con004
add constraint cname1_uk unique(cname)
-- 删除约束
alert table con004
drop constraint cname1_uk
-- 查询约束
select * from user_constraints
-- 可以通过这个表来找到表名,列名,约束名
select * from user_cons_columns where table_name='con003'