文档章节

主键/约束/事务/表关系 Oracle

CarlDing
 CarlDing
发布于 2016/03/16 22:15
字数 1521
阅读 57
收藏 4

1:创建一个主键

--创建一个表,有主键 create table studs( id varchar(32) primary key, name varchar(30) ); --主键也是数据库的对象 --在Oracle数据主加中,有很多的字典表,这些字典表中,保存了所有Oracle内部信息 --dba_xxx - 管理员,user_xxx select * from tab; select * from user_tables;

--查询这个用户的约束 select * from user_constraints;[保存了所有用户的约束。]

--知道主键的名称以后,可以删除这个表上的主键 alter table studs drop constraint sys_c006997;

insert into studs(name) values('Jack'); update studs set id ='S001'; --添加主键 时,如果id列有nill值,则添加主键失败 alter table studs add constraint studs_pk primary key(id);

主键同时是索引:user_indexes

希望知道,这个表的主键,在哪一个列:

不能为空 不能重复 同时是索引 一个表上,只能有一个主键,可以使用有一个列上,或是多个列上。

2:唯一约束 关键字:unique 特点: 1:唯一,不重复。 2:可以为null 3:同时是索引。

create table teac( id varchar(32) primary key, name varchar(30) unique, age int );

create table teac( id varchar(32) primary key, name varchar(30), age int, constraint teac_uq unique(name) );

alter table teac add constraint teac_uq unique(name);

insert into teac values('T001','Jack',33); insert into teac values('T003',null,44);

--查询这个约束 select * from user_constraints; --查询这个约束同时是索引 select * from user_indexes; --查询这个约束使用在哪一个列上 select * from user_cons_columns;

--可以禁用唯一约束 alter table teac disable constraint sys_c007003; --启动 alter table teac enable constraint sys_c007003;

--删除这个约束 DDL alter table teac drop constraint sys_c007003;

3:检查约束 check

desc teac;

insert into teac values('T004','Alex',-90);

--添加一个约束,约束年龄的范围 delete from teac; commit;

alter table teac add constraint taec_ck check (age>=1 and age<=100);

--在创建表时创建 create table t1( id int, age int check(age between 1 and 100) );

检查约束不是索引。

非null值约束 Not null;

默认值约束 Default

4:like模糊查询

5:事务 事务是保证数据操作正确的一种技术。

事务是指用户的一次操作,这一次操作来说,要码都成功,都失败。

在Oracle里, 事务的开始是:执行insert,update,delete. 事务的结束: 显式的结束 – commit,提交,生效。 Rollback 撤销,回滚。 隐式的结束 – DDL 默认是提交。 事务对DDL无效。事务只对DML有效。 1:事务的基本的操作

2:事务的保存点

3:事务的四个特性 事务的特性(ACID特性) A:原子性(Atomicity) 事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。 B:一致性(Consistency) 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 C:隔离性(Isolation) 一个事务的执行不能被其他事务干扰。 D:持续性/永久性(Durability) 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。

隔离性 (所有数据库内在结构)

级别 isolation 值 脏读 read uncommitted 读取到了没有提交的数据 1 oracle不支持 幻读 read committed 读已提交 2 oracle的默认值 重复读 repeatable read 在同一个事务之内重复的读取前面读取到的数据。 4 oracle不支持 串行化 seri 同步 8 oracle的默认值

Oracle的内存结构: SGA,PGA

代码:安全shiro,spring security,性能,代码量

6:表关系 外键约束 foreign key RDBMS – 关系型数据库管理系统。

表关系是通过主键+外键关联实现的。

表关系: 1对多 一对一 多对多

用图来表示表的关系叫:Enty(表)-R(Relation关系)Mapping

1:一对多

如何创建外键:

create table persons( id varchar(32) primary key, name varchar(30), age int ); --车表-外表 create table cars( id varchar(32) primary key, name varchar(30), price number(10,2), pid varchar(32), constraint cars_fk foreign key(pid) references persons(id) ); E-R:

限制: 1:如果向子表中外表中写入数据,则pid可以为null,,如果不是null值,则这个记录,必须要在persons表中先出现。

2:如果要删除父表,主表中的记录,而子表中已经引用了某个id,则删除不成功

1:查询某个人,有什么车 – 关联查询 insert into persons values('P001','Jack',44); insert into cars values('C001','Audi',40.00,'P001'); insert into cars values('C002','Auto',1.2,'P001');

insert into persons values('P002','Mary',33); insert into cars values('C003','Buick',18,'P002');

insert into persons values('P003','Alex',22);

insert into cars values('C004','BMW',45,null);

--以下的查询用的SQL92标准 select p.name,c.name from persons p,cars c where p.id=c.pid;

使用SQL99的标准:建议使用 innser join 内联接: --SQL99标准 select p.name,c.name from persons p inner join cars c on p.id=c.pid;

2:查询没有车的人 连接的方式: 内联接 左外 – 以左 left [outer] join select p.name,c.name from persons p left join cars c on p.id=c.pid where c.name is null; 右外 --SQL99标准 select p.name,c.name from persons p right outer join cars c on p.id=c.pid;

全外

连接的方式: Inner join Left outer join Right outer join Full outer join

3:查询有N部车的人 --查询pid在cars中出现的次数 select pid from cars group by pid having count(pid)=2;

--子查询 - 以下的子查询叫非相关子查询 - 即子查询可以独立执行的子查询叫非相关的子查询 select * from persons where id in(select pid from cars group by pid having count(pid)=2);

--以下是相关子查询 - 子查询不能独立执行。 select * from persons where (select count(*) from cars where cars.pid=persons.id)=0;

2:多对多

create table students( id varchar(32) primary key, name varchar(30) );

create table course( id varchar(32) primary key, name varchar(30) );

create table sc( studid varchar(32), courseid varchar(32), constraint sc_pk primary key(studid,courseid), constraint sc_fk1 foreign key(studid) REFERENCES students(id), constraint sc_fk2 foreign key(courseid) references course(id) );

写入记录: insert into students values('S001','Jack'); insert into students values('S002','Mary'); insert into students values('S003','Alex');

insert into course values('C001','java'); insert into course values('C002','Oracle'); insert into course values('C003','Math');

insert into sc values('S001','C001'); insert into sc values('S001','C002'); insert into sc values('S002','C001');

1:查询某个选择了某课: select s.name,c.name from students s inner join sc on s.id=sc.studid inner join COURSE c on sc.COURSEID=c.id;

© 著作权归作者所有

CarlDing
粉丝 5
博文 106
码字总数 78103
作品 0
济南
其他
私信 提问
我的SQL笔记&一些练习题(一)

Oracle 数据库使用的端口为:1521 在Windows平台下需保证 Oracle server xe 和 Oraclelistener 服务正常运行才可以连接到数据库 MySQL数据库使用的端口为:3306 连接数据库可以使用CML模式,...

MikeYoo
2018/06/23
0
0
DDL、DML和DCL的区别与理解

在关系型数据库中DDL、DML、DCL这三者是SQL的重要组成部分,恰好在网上找到一篇不错的文章在这里就摘录分享下。以下来自于:http://www.jb51.net/article/40359.htm DML、DDL、DCL区别 . 总体...

往事_Jim_遗
2017/11/06
0
0
DDL、DML和DCL 区别与理解

这篇文章主要介绍了DDL、DML和DCL的区别与理解,需要的朋友可以参考下 DML、DDL、DCL区别 . 总体解释: DML(data manipulation language): 它们是SELECT、UPDATE、INSERT、DELETE,就象它...

勇敢的蜗牛_Z
2015/05/04
332
0
mysql数据库基础学习笔记1(基础)

001.数据库基础 1.什么是数据 对客观事物的符号表示,也是信息的载体; 2.数据库 用来管理数据的一个软件; 3.常见的关系型数据库 oracle:oracle公司的数据库; mysql:开源 sqlserver:微软 ...

Sunhongyu51
01/06
0
0
PostgreSQL学习手册(数据表)

一、表的定义: 对于任何一种关系型数据库而言,表都是数据存储的最核心、最基础的对象单元。现在就让我们从这里起步吧。 1. 创建表: CREATE TABLE products ( product_no integer, name t...

Junn
2016/01/06
76
0

没有更多内容

加载失败,请刷新页面

加载更多

代理模式之JDK动态代理 — “JDK Dynamic Proxy“

动态代理的原理是什么? 所谓的动态代理,他是一个代理机制,代理机制可以看作是对调用目标的一个包装,这样我们对目标代码的调用不是直接发生的,而是通过代理完成,通过代理可以有效的让调...

code-ortaerc
今天
5
0
学习记录(day05-标签操作、属性绑定、语句控制、数据绑定、事件绑定、案例用户登录)

[TOC] 1.1.1标签操作v-text&v-html v-text:会把data中绑定的数据值原样输出。 v-html:会把data中值输出,且会自动解析html代码 <!--可以将指定的内容显示到标签体中--><标签 v-text=""></......

庭前云落
今天
8
0
VMware vSphere的两种RDM磁盘

在VMware vSphere vCenter中创建虚拟机时,可以添加一种叫RDM的磁盘。 RDM - Raw Device Mapping,原始设备映射,那么,RDM磁盘是不是就可以称作为“原始设备映射磁盘”呢?这也是一种可以热...

大别阿郎
今天
12
0
【AngularJS学习笔记】02 小杂烩及学习总结

本文转载于:专业的前端网站☞【AngularJS学习笔记】02 小杂烩及学习总结 表格示例 <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng-repeat="x in names | orderBy ......

前端老手
昨天
16
0
Linux 内核的五大创新

在科技行业,创新这个词几乎和革命一样到处泛滥,所以很难将那些夸张的东西与真正令人振奋的东西区分开来。Linux内核被称为创新,但它又被称为现代计算中最大的奇迹,一个微观世界中的庞然大...

阮鹏
昨天
20
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部