Oracle中用一个序列给两个表创建主键自增功能的后果
前几天在创建数据表时,想偷个懒,使用一个序列给两个表创建主键自增功能,结果。。。。。。
情景:
为宠物中心创建一个简单的数据库,要求如下:
1.创建一个主人表,字段:主人编号,主人姓名,主人性别,主人联系方式,宠物编号...
2.创建一个宠物表,字段:宠物编号,宠物昵称,宠物种类...
3.主人表和宠物表是一一对应关系,要求主人id和宠物id一致
创建的SQL语句如下:
我们先不创建主外键关系,一起看看一个序列给两个表创建主键自增功能的结果。
--Oracle中用一个序列给两个表创建主键自增功能的后果--1.创建测试表:_host(主人信息),t_pet(宠物信息)
create table t_host(h_id number(4) primary key,h_name varchar2(20),h_sex varchar2(20),telephone number(11),p_id number(4));create table t_pet(p_id number(4) primary key,p_name varchar2(20),p_category varchar2(20));e--2.创建序列
create sequence seq_host_pet;--3.给表t_host,t_pet创建主键自增功能
create or replace trigger trigger_host
before insert on t_host
referencing new as newhost
for each row
beginif :newhost.h_id is null then:newhost.h_id :=seq_host_pet.nextval;end if;
end;
/create or replace trigger trigger_pet
before insert on t_pet
referencing new as newpet
for each row
beginif :newpet.p_id is null then:newpet.p_id :=seq_host_pet.nextval;end if;
end;
/-- 3.向表t_host,t_pet依次逐一插入如下数据(同时插入主人和宠物信息)
insert into t_host(h_name,h_sex) values('scott','man',123456789);
insert into t_pet(p_name,p_category) values('小黄','dog');
insert into t_host(h_name,h_sex) values ('zhao','man',123456789);
insert into t_pet(p_name,p_category) values('溜溜','dog');
insert into t_host(h_name,h_sex) values ('qian','feman',123456789);
insert into t_pet(p_name,p_category) values('佳佳','cat');
结果如下:
我们可以看到两个表的id,因为依次逐一插入的关系,恰好是错开的。即是两个表共用一个不重复序列,两个表才id是不可能重复的。
若想实现宠物id和主人id一致,必须创建两个表
Oracle中用一个序列给两个表创建主键自增功能的后果相关推荐
- oracle创建主键sql语句,Oracle创建主键自增表(sql语句实现)及触发器应用
Oracle创建主键自增表(sql语句实现)及触发器应用 1.创建表 复制代码 代码如下: createtableTest_Increase( useridnumber(10)NOTNULLprima ...
- oracle:一个update修改两张表
需求:用一个update语句修改两张表? 思路:用触发器来解决 触发器代码: 表a:table_a,表b:table_b,其中表b里面有表a的id,这个触发器意思是当修改表a的最后修改人:table_ ...
- 无主键mysql表创建主键
这是笔者在实际工作过程中遇到的问题. 背景: 由于一些原因,导致以前的数据库中的一些表是没有主键的,这样在主库执行批量删除和更新时,备库无法追上主库. 那么,以前留下来的表需要重新建立主键,但是这里可 ...
- Oracle 创建主键自增表
介绍 本篇文章主要介绍在oracle中如果创建自增长表,这里要用到序列. create table tb_student (id NUMBER(10) not null,createtime DATE ...
- java创建主键自增表_oracle创建表时设置自增主键
先创建一个名字为test_Sequence的序列,然后执行下列语句, CREATE TABLE example1( ID Number(4) NOT NULL PRIMARY KEY, NAME VA ...
- oracle建表的时候同时创建主键,外键,注释,约束,索引
--主键 create table emp (id number constraint id_pr primary key ,name1 varchar(8)); create table emp9 ...
- oracle 创建表定义主键,Oracle 学习----:创建表(主键自增)
一.创建表 create table testTable ( Id numbere, name varchar2(100), age number, createTime date, primary ...
- sqlserver 建表指定主键_3-自增字段;主键约束
按照上表写出一条建表语句 ①id字段为整型数据,主键约束,自增 ②dt字段为日期格式,非空 ③weather字段为可变长度字符串,最大长度为30,非空 ④min_tem与max_tem字段为整型数据, ...
- postgresql-创建主键自增的表
之前一直用的mysql,这个也基本上是主流,主键自增是很多建表规范中的硬性要求,不过这两种数据库主键自增的区别还是很大的 通常navicat中对mysql 主键自增直接客户端指定即可,不过对PG貌似不 ...
最新文章
- K8s如何改变美团的云基础设施?
- 使用ant进行junit测试
- quake3使用指南(转载)
- 把代码放到服务器文件夹,怎么将本地代码传到云服务器
- tx2 numba opencv
- Mybatis-Dao层实现(通过代理方式)
- 英特尔的VT-x技术是什么?
- 总有人黑 JavaScript?那是不知道它有多好用吧!
- ios swift 实现饼状图进度条,swift环形进度条
- 大一软件工程C语言推荐书籍,大一软件工程学生,看完了谭浩强的书,越看越迷茫,感觉并没什么用,什么大程序都不会编,求指点?...
- NetSarang旗下网络通讯系列产品v5版本更新合集丨附下载
- 三菱PLC MC协议
- 『解疑』vue修改html图标,tilte左边的图标(以图片格式作为图标)
- Unity Mask制作圆形头像
- 新品上市|A股场内衍生品大盘点
- 清理浏览器缓存方法(chrome和IE浏览器)
- 范罗士空气净化器PT65评测
- python之函数len()
- PEG/g-C3N4量子点复合荧光纳米微球(g-cnqds-peg)的制备方法
- 如何能够让博客被百度等搜索到
热门文章
- java session 是什么意思_Java:Session详解
- NER数据增强、badcase处理、数据优化
- tf.name_scope()与tf.variable_scope()
- 面向对象程序设计(Java)
- 设计模式--抽象工厂(Abstract Factory)模式
- 设计模式--观察者(Observer)模式
- 【数据库复习】第一章绪论
- [How TO]-如何编写Linux kernel documentation
- android密码解锁/指纹解锁返回的authToken深度解剖
- 广西2021各校高考成绩查询入口,2021年广西高考成绩排名查询系统,广西高考位次排名查询...