2018-06-28 第五十三天 oracle

一、数据库对象

oracle 的数据库对象:表、用户、约束、索引、序列、视图


(一)关于用户的操作

--创建一个新的用户,然后给新的用户创建一张表,然后给表中添加一些数据。查询表中的数据。


-- 对用户进行操作

-- 创建用户 需要当前用户拥有dba 的权限。

--新创建的用户没有任何 的权限,连基本的登录的权限都没有。

create user hw identified by hw


--通过给用户授予角色来给用户授予一组权限。

--角色是一组权限的集合

-- 给用户授予权限

grant dba to scott

grant connect , resource to hw


-- 给用户撤销权限

revoke dba from scott


-- 修改密码

alter user hw identified by hwei


-- 删除用户

drop user hw


-- 创建表格

-- 建立一张用来存储学生信息的表

-- 字段包含学号、姓名、性别,年龄、入学日期、班级,email等信息

create table student(

       sno number(6),

       sname varchar2(12),

       gender varchar2(3) default '男',

       age number(3),

       sdate date,

       clazz varchar(10),

       email varchar2(30)

);


select * from student


--给表插入数据

insert into student values(100001,'小刚','男',20,sysdate,'501','xiaogang@qq.com')

commit


insert into student values(100002,'小张',null,20,sysdate,'501','xiaozhang@qq.com');

commit


insert into student (sno,sname,age,sdate,clazz,email) values (100003,'小蕾',30,sysdate,'501','xiaotiantian@qq.com');


update student  set gender='女' where sno=100003


--表删除数据

delete fromstudent where sno=100002


(二)关于表的操作

--对表的以及表的结构的操作

--给表格添加字段

alter table student add (birthday date)--新字段的内容为null

alter table student add (score number(3) default 100)--新字段的内容指定为默认值


--删除表的字段

alter table student drop column birthday


--修改字段的名称 

alter table student rename column sdate to enterdate


--修改字段的数据类型

-- 如果想要修改某一列的数据类型,那么该列的所有的数据都需要是null.

alter table student modify (birthday varchar2(20))


--重命名表

rename student to stu


---删除表操作

drop table emp

--查看回收站

select * from recyclebin

--从回收站还原表格

flashback table emp to before drop

select * from stu


--将回收站中的某个表删除

purge table emp--净化


--不进入回收站,直接删除

drop table emp purge


--清空回收站

purge recyclebin


(三)约束

完整性约束分类

域完整性约束(非空not null,检查check)

实体完整性约束(唯一unique,主键primary key)

参照完整性约束(外键foreign key)

三种完整性约束的区别

域完整性约束:字段约束

实体完整性约束:行和行之间的约束

引用完整性约束:表和表之间的约束


命名规则推荐采用:约束类型_约束字段

非空约束 NN_表名_列名

唯一约束 UK_表名_列名

主键约束 PK_表名

外键约束 FK_表名_列名

检查约束 CK_表名_列名


--数据库对象--约束


-- 创建表格

-- 学号是主键

-- 姓名不能为空

-- 年龄范围18---30岁

-- Email唯一


--【1】主键约束--primary key

-- 字段 非空+ 唯一  

drop table student purge;

create table student(

      -- sno number(6) constraints pk_student primary key, --列级 主键约束

       sno number(6) primary key,--简化的列级主键约束 

       sname varchar2(12),

       gender varchar2(3) default '男',

       age number(3),

       sdate date,

       clazz varchar(10),

       email varchar2(30)

       --constraints PK_STUDENT primary key (sno)--表级设置主键约束

       --primary key (sno)--简化的表级设置主键约束

);

insert into student  values(100001,'小刚','男',20,sysdate,'501','xiaogang@qq.com');

select * from student


--联合主键约束--primary key

-- 字段 的组合 必须是唯一的

-- 每一个字段的值都不能是null

drop table student purge;

create table student(

       sno number(6),--联合主键 约束 只能 在表级别设置

       sname varchar2(12),

       gender varchar2(3) default '男',

       age number(3),

       sdate date,

       clazz varchar(10),

       email varchar2(30),

       constraints PK_STUDENT primary key (sno , sname)--表级设置主键约束

      -- primary key (sno , sname)--简化的表级设置联合主键约束

);

insert into student  values(100001,'小红','男',20,sysdate,'501','xiaogang@qq.com');

insert into student  values(100002,'小刚','男',20,sysdate,'501','xiaogang@qq.com');

select * from student


--【2】非空约束  not null

--指定的域不能为null   姓名不能为空

drop table student purge;

create table student(

       sno number(6),

       --sname varchar2(12) constraints nn_student_sname not null, -- 只能在列级别设置  非空约束

       sname varchar2(12) not null,--简化的列级别设置非空约束

       gender varchar2(3) default '男',

       age number(3),

       sdate date,

       clazz varchar(10),

       email varchar2(30),

       constraints PK_STUDENT primary key (sno)--表级设置主键约束

      -- primary key (sno , sname)--简化的表级设置联合主键约束

      --constraints nn_student_sname not null (sname)--非空约束 只能在 列级 设置,不能在表级别设置

);

insert into student  values(100001,null,'男',20,sysdate,'501','xiaogang@qq.com');


--【3】唯一约束 unique

--字段必须是唯一的,可以为null 但是只能有一条数据的值为 null

drop table student purge;

create table student(

       sno number(6),

       sname varchar2(12) constraints nn_student_sname not null,

       gender varchar2(3) default '男',

       age number(3),

       sdate date,

       clazz varchar(10),

      -- email varchar2(30) unique,-- 列级别的唯一约束

      email varchar2(30),-- constraints uk_student_email unique,---列级别的唯一约束

       constraints PK_STUDENT primary key (sno),--表级设置主键约束

       constraints uk_student_email unique (email)--表级别设置唯一约束

       --自己测试是否可以使用简化的表级别的设置唯一约束

);


insert into student  values(100001,'小刚','男',20,sysdate,'501','xiaogang@qq.com');

select * from student


--【4】检查约束  check

-- 控制列字段的取值的范围

drop table student purge;

create table student(

       sno number(6),

       sname varchar2(12) constraints nn_student_sname not null,

       gender varchar2(3) default '男' check (gender in ('男' , '女')),--列级别的检查约束

       age number(3),

       sdate date,

       clazz varchar(10),

       email varchar2(30),-- constraints uk_student_email unique,---列级别的唯一约束

       constraints PK_STUDENT primary key (sno),--表级设置主键约束

       constraints uk_student_email unique (email),--表级别设置唯一约束

       --constraints ck_student_age check (age >=18 and age <=24)--表级别的检查约束

       constraints ck_student_age check (age between 18 and 24)--表级别的检查约束

);


insert into student  values(100003,'小刚','女',24,sysdate,'501','xiaogang2@qq.com');

select * from student


--【5】外键约束  foreign key

--创建主表  clazz

create table myclazz(

       cno varchar2(6) primary key,

       cname varchar2(20) not null,

       loc varchar2(30)

);

--添加数据

insert into myclazz values(100002,'502','bj')

insert into myclazz values(100003,'306','sh')

insert into myclazz values(100001,'213','hf')

select * from myclazz


--从表 依赖于主表的字段必须是主表的主键

drop table student purge;

create table student(

       sno number(6),

       sname varchar2(12) constraints nn_student_sname not null,

       gender varchar2(3) default '男' check (gender in ('男' , '女')),--列级别的检查约束

       age number(3),

       sdate date,

       cno varchar(6) references myclazz (cno),--列级定义外键约束

       email varchar2(30),

       constraints PK_STUDENT primary key (sno),--表级设置主键约束

       constraints uk_student_email unique (email),--表级别设置唯一约束

       constraints ck_student_age check (age between 18 and 24)--表级别的检查约束

      -- constraints fk_student_cno foreign key (cno) references myclazz (cno)--表级别设置外键约束

);

insert into student  values(100003,'小刚','女',24,sysdate,'100001','xiaogang2@qq.com');

insert into student  values(100001,'小刚','女',24,sysdate,'100005','xiaogang1@qq.com');


--外键级联删除

--删除主表中的某些数据

delete from myclazz where cno=100003

--在删除主表字段的时候,从表中的相关的数据的解决方案:

---提供了3种解决方法:

--1:restrict  受限制的,默认的解决方案。不让删除。

--2:cascade  级联删除,串联删除。  作用:如果主表中某些数据删除,那么从表中相关的数据一并被删除掉。

--3:set null   将从表中相关的字段设置为null.

drop table student purge;

create table student(

       sno number(6),

       sname varchar2(12) constraints nn_student_sname not null,

       gender varchar2(3) default '男' check (gender in ('男' , '女')),--列级别的检查约束

       age number(3),

       sdate date,

       cno varchar(6),-- references myclazz (cno),--列级定义外键约束

       email varchar2(30),

       constraints PK_STUDENT primary key (sno),--表级设置主键约束

       constraints uk_student_email unique (email),--表级别设置唯一约束

       constraints ck_student_age check (age between 18 and 24),--表级别的检查约束

       --constraints fk_student_cno foreign key (cno) references myclazz (cno) on delete cascade--表级别设置外键约束,并设置串联删除

       constraints fk_student_cno foreign key (cno) references myclazz (cno) on delete set null -- 设置级联删除为  set null

);

insert into student  values(100001,'小刚','女',24,sysdate,'100001','xiaogang2@qq.com');

insert into student  values(100002,'小刚','女',24,sysdate,'100001','xiaogang1@qq.com');

insert into student  values(100003,'小刚','女',24,sysdate,'100002','xiaogang3@qq.com');

insert into student  values(100004,'小刚','女',24,sysdate,'100002','xiaogang4@qq.com');

insert into student  values(100005,'小刚','女',24,sysdate,'100003','xiaogang5@qq.com');


delete from myclazz where cno=100001


--删除myclazz 主表,即使从表中没有一条记录,那么也不能直接删除被外键引用的主表。

---不能删除

drop table myclazz

--只能强制删除,把和当前表的相关的约束一并删除掉。

drop table myclazz cascade constraints


---创建表之后,添加约束

--创建student 表,创建表的过程中,不添加任何的约束

create table student(

       sno number(6),

       sname varchar2(12) constraints nn_student_sname not null,---非空约束只能是列级的,不能在创建表之后再添加非空约束。

       gender varchar2(3) default '男' ,

       age number(3),

       sdate date,

       cno varchar(6),

       email varchar2(30)

);


drop table student

--给相应的字段添加约束

alter table student add constraints pk_student primary key (sno);

alter table student add constraints uk_student_email unique (email);

alter table student add constraints ck_student_gender check (gender in ('男' , '女'));

alter table student add constraints ck_student_age check (age between 18 and 24);

alter table student add constraints fk_student_cno foreign key (cno) references myclazz (cno) on delete cascade;


insert into student  values(100002,'小刚','女',24,sysdate,'100001','xiaogang1@qq.com');


--删除约束

alter table student drop constraints ck_student_gender;


(四)序列-索引

--序列  Sequence  是oralce 数据库专有的数据库对象。

--作用:用于某些有规律的逐渐递增的字段的值的生成。

--创建序列

create sequence seq_student;


--访问序列的值

--必须先访问 序列的nextval 才能访问 currval.

select seq_student.nextval from dual--查询序列的下一个的值,每次查询序列的下一个的值,序列都会自动增长 序列中定义的增量的值。

select seq_student.currval from dual--查询序列当前的值。


insert into student  values(seq_student.nextval,'小刚','女',24,sysdate,'100001','xiaogang5@qq.com');


-- 通过sql 去指定序列的属性

create sequence seq_stu

increment by 5 --增量

start with 666 --开始数

maxvalue 99999999---|nomaxvalue 10^27 or -1

minvalue 666--|no minvalue

cycle---|nocycle--是否循环

nocache;--cache n|--是否缓存


select seq_stu.nextval from dual


insert into student  values(seq_stu.nextval,'小刚','女',24,sysdate,'100001','xiaogang7@qq.com');


select * from student


--删除序列

drop sequence seq_stu.


----索引

--创建索引有两种方式

--1:自动创建,一个表中的primary key 和unique 的列,都被数据库默认的创建了索引。

--2:手动创建 create index...

--给指定的表的字段添加索引

select * from student

--测试根据名字来查找内容,还没有添加索引

select * from student where sname='小明3'


--给sname 添加索引  需要指明给哪个字段添加索引

create index index_student_sname on student (sname);


--索引一旦创建,自动使用。


--删除索引

drop index index_student_sname;


--希望通过查询sname 的内容是降序的

create index index_student_sname on student (sname desc);

--降序输出结果

select sname from student


索引:

开发中使用索引的要点:

1.索引数据可能要占用大量的存储空间。

2.索引改善检索操作的性能,但降低数据插入、修改和删除的性能。在执行这些操作时,DBMS必须动态地更新索引。

3.限制表中索引的数目。索引越多,在修改表时对索引做出修改的工作量越大

4.并非所有数据都适合于索引。唯一性不好的数据(如省)从索引得到的好处不比具有更多可能值的数据(如姓名)从索引得到的好处多

5.索引用于数据过滤和数据排序。如果你经常以某种特定的顺序排序数据,则该数据可能是索引的备选。

6.可以在索引中定义多个列(如省加城市),这样的索引只在以省加城市的顺序排序时有用。如果想按城市排序,则这种索引没有用处。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 观其大纲 page 01 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 M...
    周少言阅读 3,140评论 0 33
  • 最近打算采用关系型数据库来理一下公司的运营数据,先拿点东西练手找感觉。下面是几个关于学生课业的表,需要建立一个数据...
    九天朱雀阅读 956评论 0 3
  • 数据字典 数据库系统中存放三层结构定义的数据库称为数据字典(DD),对数据库的操作都要通过DD才能实现。DD系统中...
    panda_say阅读 1,078评论 0 6
  • 1).创建数据库 create database学生选课数据库 2).创建四张表 Create table Stu...
    blvftigd阅读 1,555评论 0 0
  • 人生旅途中 有许多 路过风景 走走停停 一边花开 一边落寞 走过喧嚣 又归于宁静 看过多少繁华 又知多少苍凉 手心...
    八度黑白阅读 335评论 9 7