前几天在创建数据表时,想偷个懒,使用一个序列给两个表创建主键自增功能,结果。。。。。。

情景:

为宠物中心创建一个简单的数据库,要求如下:
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中用一个序列给两个表创建主键自增功能的后果相关推荐

  1. oracle创建主键sql语句,Oracle创建主键自增表(sql语句实现)及触发器应用

    Oracle创建主键自增表(sql语句实现)及触发器应用 1.创建表 复制代码 代码如下: createtableTest_Increase( useridnumber(10)NOTNULLprima ...

  2. oracle:一个update修改两张表

    需求:用一个update语句修改两张表? 思路:用触发器来解决 触发器代码: 表a:table_a,表b:table_b,其中表b里面有表a的id,这个触发器意思是当修改表a的最后修改人:table_ ...

  3. 无主键mysql表创建主键

    这是笔者在实际工作过程中遇到的问题. 背景: 由于一些原因,导致以前的数据库中的一些表是没有主键的,这样在主库执行批量删除和更新时,备库无法追上主库. 那么,以前留下来的表需要重新建立主键,但是这里可 ...

  4. Oracle 创建主键自增表

    介绍 本篇文章主要介绍在oracle中如果创建自增长表,这里要用到序列. create table tb_student (id NUMBER(10) not null,createtime DATE ...

  5. java创建主键自增表_oracle创建表时设置自增主键

    先创建一个名字为test_Sequence的序列,然后执行下列语句, CREATE TABLE example1( ID Number(4) NOT NULL PRIMARY KEY, NAME VA ...

  6. oracle建表的时候同时创建主键,外键,注释,约束,索引

    --主键 create table emp (id number constraint id_pr primary key ,name1 varchar(8)); create table emp9 ...

  7. oracle 创建表定义主键,Oracle 学习----:创建表(主键自增)

    一.创建表 create table testTable ( Id numbere, name varchar2(100), age number, createTime date, primary ...

  8. sqlserver 建表指定主键_3-自增字段;主键约束

    按照上表写出一条建表语句 ①id字段为整型数据,主键约束,自增 ②dt字段为日期格式,非空 ③weather字段为可变长度字符串,最大长度为30,非空 ④min_tem与max_tem字段为整型数据, ...

  9. postgresql-创建主键自增的表

    之前一直用的mysql,这个也基本上是主流,主键自增是很多建表规范中的硬性要求,不过这两种数据库主键自增的区别还是很大的 通常navicat中对mysql 主键自增直接客户端指定即可,不过对PG貌似不 ...

最新文章

  1. K8s如何改变美团的云基础设施?
  2. 使用ant进行junit测试
  3. quake3使用指南(转载)
  4. 把代码放到服务器文件夹,怎么将本地代码传到云服务器
  5. tx2 numba opencv
  6. Mybatis-Dao层实现(通过代理方式)
  7. 英特尔的VT-x技术是什么?
  8. 总有人黑 JavaScript?那是不知道它有多好用吧!
  9. ios swift 实现饼状图进度条,swift环形进度条
  10. 大一软件工程C语言推荐书籍,大一软件工程学生,看完了谭浩强的书,越看越迷茫,感觉并没什么用,什么大程序都不会编,求指点?...
  11. NetSarang旗下网络通讯系列产品v5版本更新合集丨附下载
  12. 三菱PLC MC协议
  13. 『解疑』vue修改html图标,tilte左边的图标(以图片格式作为图标)
  14. Unity Mask制作圆形头像
  15. 新品上市|A股场内衍生品大盘点
  16. 清理浏览器缓存方法(chrome和IE浏览器)
  17. 范罗士空气净化器PT65评测
  18. python之函数len()
  19. PEG/g-C3N4量子点复合荧光纳米微球(g-cnqds-peg)的制备方法
  20. 如何能够让博客被百度等搜索到

热门文章

  1. java session 是什么意思_Java:Session详解
  2. NER数据增强、badcase处理、数据优化
  3. tf.name_scope()与tf.variable_scope()
  4. 面向对象程序设计(Java)
  5. 设计模式--抽象工厂(Abstract Factory)模式
  6. 设计模式--观察者(Observer)模式
  7. 【数据库复习】第一章绪论
  8. [How TO]-如何编写Linux kernel documentation
  9. android密码解锁/指纹解锁返回的authToken深度解剖
  10. 广西2021各校高考成绩查询入口,2021年广西高考成绩排名查询系统,广西高考位次排名查询...