--事务的隔离级别
--read uncommitted--读未提交--事务未提交的数据也可以查询到
--read committed--Oracle默认隔离级别--读已提交 只能查询到已经提交的事务的结果【不可重复读】【幻读】
--repeatable read--可重复读--事务可以同时进行
--serializable--串行读--一个事务进行时其他事务都不能进行
--事务的开启:默认做增删改操作时自动开启事务。
--事务的结束:提交-【手动提交 commit】-【执行DDL操作】--【执行DCL操作】--正常关闭客户端--自动提交 auto commit
--回滚--意外退出--手动回滚 rollback
--表设计:1.列不可再分2.定义主键区分唯一3.拆分表,消除传递依赖,避免数据的重复冗余
--表名 字段 字段名 字段类型 字段的约束
--DDL 数据定义语句:create drop alter
/*创建表结构【无约束】
create table 表名(
字段名 字段类型,
字段名 字段类型,
...
字段名 字段类型
)
*/
create table tb_user(
userid number(5),
username varchar2(5 char),--varchar2(30)默认都是字节数, varchar2(5 char)5个字符
userpwd varchar2(20),
age number(3),
gender char(3),
email varchar2(30),
regtime date
);
--加入注释
comment on table tb_user is '用户表';
comment on table tb_user.userid is '流水号,主键';
--约束
create table 表名
(
字段名 字段类型(字节数) 约束,
...
);
约束: 主键约束 primary key,
外键约束 references 外键表(外键字段) ,
唯一约束 unique,
非空约束 not null,
检查约束 check(字段>=8...),
默认约束 default(sysdate/...)。
---创建表结构的同时在字段后添加约束+约束名
create clazz
(
cid number(5) constraint pk_clazz primary key,
cname varchar2(3) constraint cnamt_notnull not null
)
--创建表结构的同时在表结构结束之前添加约束+约束名
creat table clazz(
cid number(5),
cname varchar2(30),
constraint pk_clazz primary key(cid),
constraint cname_notnull check( cname not null)
)
--创建表结构之后为字段追加约束+约束名
alter table student add constraint fk_student_ref_clazz_cid foreign key(cid) references clazz(cid)
--拷贝已有表的数据
--只拷贝结构不拷贝数据
create table 表名 as select 字段列表 from 已有表 where1!=1;
--拷贝结构+数据
create table 表名 as select ...from ...where...
--删除表结构
drop table 表名;
--删除主外键存在的主表和从表
从表可以直接删除
主表的删除时1.先删除从表2. drop table 表名 cascade constraints;
--修改表结构
1.修改表名
rename 表名 to 新名;
2.修改列名
alter table 表名 rename column 列名 to 新列名;
3.修改类型
alter table 表名 modify(列名 字段类型);
4.添加列
alter table 表名 add 列名 类型;
5.删除列
alter table 表名 drop column 列名;
--约束的禁用和启用
alter table 表名 disable constraint pk_clazz;--禁用
alter table 表名 enable constraint pk_clazz;--启用
--禁用不必要的约束可以提升数据的插入速度
--DML 数据操控语言 用于操作数据库对象中包含的数据,操作的单位是记录。
--主要语句:insert delete update
--insert
insert into 表 values();--按原表结构插入
insert into 表()values();--向表中指定字段插入数据
insert into 表() select ...from...where...;--将查询结果插入表中
--update
update 表 set ()=(),()=() where;
update 表 set(...,...)=(select ...,...from xx where... ) where ;--同时更改多个字段要使用子查询
--delete
delete from 表名 where...;
delete from 表名;--删除全部数据
--!删除主表中有被从表引用的数据时1.先删除从表中引用的数据,再删除主表的数据。
--2.删除主表数据的同时级联删除从表中引用了主表数据的数据 on delete cascade --创建表时 写到字段字节数后
--3.删除主表数据的同时从表中引用主表数据的数据设置为null --on delete set null
--数据截断
truncate table 表名;--不会开启事务,只能删除全部数据。会根据表结构判断主表是否存在从表引用,存在则不能删除。