Oracle主键自增

在设置主键自增时有几种方法,今天介绍其中一种方法:sequence+trigger

1.创建表
create table tbl_card         --创建校园卡表
(
id int primary key,           --序号
card_num varchar2(20),        --校园卡号
card_holder varchar2(10),     --持卡人姓名
card_balance number           --校园卡余额
);
2.创建序列
create sequence cardID_seq --创建校园卡ID序列
start with 1               --序列从1开始
increment by 1             --每次增加1
minvalue 1                 --最小值为1
nomaxvalue                 --不设最大值
nocache                    --没有缓存
nocycle                    --一直累加不循环
3.创建触发器
create or replace trigger cardID_trigger   --创建校园卡ID触发器
before insert on tbl_card                  --在插入表之前
for each row                               --对于每一列
begin                                      --要做的操作
    select cardID_seq.nextval into :new.id from dual; --将下一个ID序列插入作为新的序号
end;
4.输入数据测试
insert into tbl_card (card_num,card_holder,card_balance)
values (1102015001,'翠花',75);
insert into tbl_card (card_num,card_holder,card_balance)
values (1102015002,'如花',122);
insert into tbl_card (card_num,card_holder,card_balance)
values (1102015003,'花花',46);
select * from tbl_card;
查询表结果

至此,主键自增实现。

遇到的问题

在创建触发器的时候报错
报错:权限不足

显示权限不足,原因是在创建用户时,没有赋予其创建触发器的权限,来到DOS界面输入:

sqlplus /nolog
conn as sysdba // 以管理员身份登录
grant create trigger(触发器) to baobao;
赋予用户创建触发器权限

回到Oracle再次执行就OK啦

相关概念
触发器(trigger)是一些过程,当发生一个特定的数据库事件时就执行这些过程,可以使用触发器扩充引用的完整性。

DML即数据操纵语言,用于让用户或程序员使用,实现对数据库中数据的操作。基本的数据操作分成两类四种:检索(查询)和更新(插入、删除、修改)。
DML触发器即由DML语句激发,其触发事件包括insert(插入)、update(更新)和delete(删除)。无论哪种触发事件,都能为每种触发事件创建before触发器和after触发器。如可以在表上建立一个before insert 语句,表示在insert事件发生之前采取行动。

cache缓存

如果指定cache值,Oracle就可以预先在内存里面放置一些Sequence,这样存取的快些。cache里面的取完后,Oracle自动再取一组到cache。使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的Sequence就会丢失。举个例子:比如你的sequence中cache 100,那当你sequence取到90时突然断电,那么在你重启数据库后,sequence的值将从101开始。

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

推荐阅读更多精彩内容

  • 第一步 第二步 创建主键seq 第三步 绑定触发
    不懂i_阅读 318评论 0 0
  • 1.1 基本结构 PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分。 1.2 命名规则 1.3 记...
    慢清尘阅读 3,853评论 3 14
  • 范师傅提醒,表情表达不好,是不是图画的太小了。今天放大了画,果真不一样啊。只是油性笔涂色的时候有些晕染,用什么方法...
    柳成林888阅读 188评论 0 0
  • 别问我为什么知道这些,我看完了小说,而且目前而言,小说和电视剧契合度很高。除了老谭,书里的老谭可是个秃头大胖子,颜...
    岁月旅行阅读 735评论 0 1
  • 风景,令人愉快,心情舒畅。有一种风景却有另一番风味。他让我们享受了温暖的感觉。 ...
    期待关于我阅读 286评论 4 1