oracle学习:
约束:
primary key 主键
unique 唯一
check( 字段名 in('男','女'))
check(age>0 and age <120)
not null
default()
rowid:
用于定位数据库中的一条记录的一个相对唯一的地址值,是一个伪列。
rownum:
是一种伪列,会根据返回记录生成一个序列画的数字,如果和排序同时用的话。
SELECT ROWNUM,EMPNO,ENAME,JOB FROM EMP ORDER BY EMPNO
--如果order by的是主键则rownum是按顺序的,否则顺序是打乱的,但可以用select语句来消除
视图view:
视图:建立在表|结果集|视图上的虚拟表,
-
简化select查询语句,相当于建了一个需要的表
-
重用:封装select语句 命名
-
隐藏:内部细节
-
区分:相同数据不同查询
不是所有的用户都有创建视图的权限:
- 授权: -->sqlplus /nolog
a)、sys登录 conn sys/123456@orcl as sysdba
b)、授权: grant dba to scott;
回收: revoke dba from scott;
c)、重新登录
create or replace view 视图名 as select语句 [with read only];
要求:所有列必须存在名称。
索引:
提高查询速度的一种手段 -->目录
1、唯一性较好字段适合建立索引
2、大数据量才有效果
3、主键|唯一: 唯一索引
创建表的同时添加约束:
create table sxt_student(
--主键约束 (唯一+非空) primary key
sid number(4) primary key,
--非空约束
sname varchar2(30) not null,
--检查约束 0~120
sage number(3) check(sage>=0 and sage<=120),
--检查约束
sgender char(3) check(sgender in('男','女')),
--唯一约束
phonenum number(11) unique,
--默认值
hiredate date default(sysdate),
cid number(4) --所在班级编号
);
--创建表的同时添加约束 指定约束名
--1) 在字段后面指定约束名字添加约束
--2)在表结构结束之前为字段添加约束
create table sxt_student(
--主键约束 (唯一+非空) primary key
sid number(4) constraints pk_student primary key,
--非空约束
sname varchar2(30) constraints stu_name_not_null not null,
--检查约束 0~120
sage number(3) constraints check_age check(sage>=0 and sage<=120),
--检查约束
sgender char(3), --check(sgender in('男','女')),
--唯一约束
phonenum number(11) unique ,
hiredate date default(sysdate),
cid number(4), --所在班级编号
--统一添加约束
constraint haha check(phonenum is not null)
-- .....
);
--在表结构结束之后追加约束
alter table sxt_student add constraint ck_student_gender check(sgender ='男' or sgender = '女');
--约束的禁用与启用
ALTER TABLE tb_user disable constraint nn_user_name;
ALTER TABLE tb_user enable constraint nn_user_name;
--外键约束
create table sxt_class(
cid number(4) primary key,
cname varchar2(30)
);
create table sxt_student(
sid number(4) constraints pk_student primary key,
sname varchar2(30),
--外键约束 关联班级表的主键
cid number(4) , --constraints fk_stu_cid references sxt_class(cid)
constraints fk_stu_cid foreign key(cid) references sxt_class(cid) on delete cascade
);
--删除 (先删除从表 再删除主表 ;同时删除约束)
drop table sxt_student cascade constraints;
drop table sxt_class cascade constraints;
--主外键关系下删除表
--删除从表,直接删除,没有影响
--删除主表 : 默认先删除 从表在删除主表 ,否则就级联删除主表+主外键约束
--主外键关系下,删除数据:
--从表数据可以直接删除
--删除主表数据:
--没有被从表引用的数据,可以直接删除
--删除主表中已经被从表引用的数据: 3中解决方案
--先删除引用了当前主表数据的那些从表数据,然后再删除当前主表数据 默认
--删除主表数据的同时,删除从表中引用了当前主表数据的那些从表数据 on delete cascade
--删除主表数据的同时,从表中,引用了当前主表数据的那些从表数据的外键字段设置为null
–事务的作用:使用事务是为了保证数据的安全有效
–事务: 单个逻辑单位 执行的一组操作,以事务为单位,在一个事务声明周期之间额的一组 操作要么都成功,要么都失败
–事务的开启: 执行增删改操作自动开启
–事务的结束:
–提交 : commit 执行DDL DCL 正常关闭客户端 自动提交
–回滚: rollback 以外退出非法断电
–DDL: 数据定义语言 表创建create 表修改alter 表删除drop
–DML: 数据控制语言 增删改数据 insert update delete select
–delete 与 数据截断的区别
–共同点: 都能作为删除数据
–不同点: delete执行会开启事务,truncate不会开启事务
–数据截断删除主表中数据,会从表结构上检查 ,如果有被引用不允许使用截断,delete可以,三种情况
表的复制:
create table 表名 as select 字段列表 from 已有表 where 1!=1;
--拷贝结构 emp create table emp_his as select ename,sal from emp where 1!=1;
--拷贝结构 emp +数据 create table emp_his2 as select ename,sal from emp where sal>2000;