Oracle表 序列 约束 视图 索引的操作

来源:互联网 发布:十代思域轮毂改装数据 编辑:程序博客网 时间:2024/05/18 02:20
一,表的设计
范式(数据库设计模式)
第一范式:列细分-不能分为止
第二范式:主键-列要与主键有关系
第三范式:主键-列要与主键有直接关系
特点:看是否有相同的数据,有就单独分出来做一张表
二,表的创建
create table employee
(
    id number not null,
    name varchar(50) not null,
    birth date  null,
    sex char(1) null
);
--添加
insert into employee(id,name) values(1,'tom');
insert into employee(id,name) values(2,'mike');
--查看所有的
select* from employee;

--null约束(非空约束)
insert into employee(id,name) values(null,'tom');

--主键约束(alter修改)只能有一个
alter table employee add constraint pk_employee primary key(id);
--删除id=3的那一行
delete from employee where id=3;
--增加一列
alter table employee add card varchar2(18);

--唯一约束(数据库中两个null不相等)可以有很多个
alter table employee add constraint ak_employee unique(card);
--找不到,数据库中的两个null是不相等的
select* from employee where card=null;
--通过这种方式可以查询找到null
select* from employee where card is null;

--默认约束
alter table employee modify birth default(sysdate);
--检查约束(性别只能是‘f’或者‘t’)
alter table employee add constraint ck_employee check(sex='f' or sex='t');
alter table employee add constraint ck_employee check(sex in('f','t'));
--修改id,只是把id=4改成id=8,其他的内容不变
update employee set id=8  where id=4;
--修改性别,只把id为1的性别'f'改成性别't',其他的不变
update employee set sex='t' where id=1;
--删除id为8的那一行所有的数据
delete from employee   where id=8 ;

--外界约束
create table salary
(
    --主键约束
    id number not null primary key,
    emp_id number not null,
    --默认约束
    pay date default(sysdate),
    --检查约束
    money number(10,2) check(money>0)
);
--这一句就是外界约束,将salary中的emp_id与employee中的id关联起来
alter table salary add constraint fk_sal_emp foreign key(emp_id) references employee(id);
--添加
insert into salary values(1,1,default,10000);
insert into salary values(3,3,default,20000);
--employee中没有id为8的,所以添加不起
insert into salary values(2,8,default,10000);

三,模式对象--用户对象
--序列对象
--创建序列,以100开始
create sequence seq_sal start with 100;
--删除序列
drop sequence seq_sal ;
--使用
--取下一个值
select seq_sal.nextval from dual;
--取当前值
select seq_sal.currval from dual;
--用在表中
insert into salary values(seq_sal.nextval,1,default,8);


四,视图对象
--授权限(用管理员的身份先授权,然后用scott身份执行下面创建视图)
grant create view to scott;
--删除视图
drop view vw_pay;
--创建或者替换视图
--e为employee表的对象,s为salary表的对象

create or replace view vw_pay
as
select
e.name,     --选择employee表中的名字
e.birth,    --选择employee表中的生日
to_char(s.pay,'yyyy-mm-dd') time,   --将生日进行格式化
s.money     --选择employee表中的金钱
from employee e
inner join salary s on s.emp_id=e.id; --内联的employee表中的id与salary中的emp_id相等

--使用视图,筛选大于一万的
select* from vw_pay where money>10000;

五,授予对象权
--给hr用户中的employees对象授权
grant all on hr.employees to scott;
--查看employees中的内容
select* from hr.employees;
--授权
grant create synonym to scott;
--给hr.employees取一个外号 hhs
create or replace synonym hhs for hr.employees;
--查看外号中的内容,和employees中的内容一样
select* from hhs;

六,索引
--创建名字的索引
create index ix_employee_name on employee(name);
--创建卡号唯一的索引
create unique ix_employee_card on employee(card);
--创建性别的索引
create bitmap ix_employee_sex on employee(sex);











0 0
原创粉丝点击