- create table menu( menuId number(10) not null primary key,
- name varchar2(40) not null,
- id_parent number(10) not null,
- url varchar2(300) null);
- create sequence menu_autoinc_seq
- minvalue 1
- maxvalue 99999999
- start with 1
- increment by 1
- nocycle
- nocache
- order;
- create or replace trigger menu_autoinc_tg
- before insert on menu for each row
- begin
- select menu_autoinc_seq.nextval into :new.menuId from dual;
- end menu_autoinc_tg;
测试:
- insert into menu values('','个人事务',0,'indi.php');
- insert into menu values('','公共事务',0,'public.php');
- insert into menu(name, id_parent, url) values('个人事务',0,'indi.php');
- insert into menu(name, id_parent, url) values('公共事务',0,'public.php');
目录
PL/SQL如何设置主键自动递增
在关系型数据库中,主键是用于唯一标识表中记录的字段。通常情况下,主键的值需要手动指定或者通过某种方式生成。PL/SQL是Oracle数据库中的一种编程语言,本文将介绍如何在PL/SQL中设置主键自动递增。
1. 什么是自动递增主键
自动递增主键是指主键字段的值会自动递增。当插入一条新记录时,数据库会自动为主键字段生成一个唯一的值,而不需要手动指定或者通过其他方式获取。
2. 使用序列(Sequence)实现自动递增主键
在PL/SQL中,我们可以使用序列(Sequence)来实现主键的自动递增。序列是一个对象,它可以生成唯一的数字序列。通过在插入数据时使用序列的NEXTVAL属性,我们可以获取下一个序列值作为主键的值。 以下是一个使用序列实现自动递增主键的示例代码:
sqlCopy codeCREATE SEQUENCE my_sequence START WITH 1 INCREMENT BY 1;
CREATE TABLE my_table (
id NUMBER PRIMARY KEY,
name VARCHAR2(50)
);
INSERT INTO my_table (id, name) VALUES (my_sequence.NEXTVAL, 'John');
在上面的示例中,我们首先创建了一个名为my_sequence
的序列,起始值为1,递增值为1。然后,我们创建了一个包含id
和name
字段的表my_table
,其中id
字段作为主键。最后,我们使用my_sequence.NEXTVAL
作为主键的值插入一条新记录。
3. 使用触发器(Trigger)实现自动递增主键
除了序列,我们还可以使用触发器来实现主键的自动递增。触发器是一种在数据库操作发生时自动触发的特殊程序。 以下是一个使用触发器实现自动递增主键的示例代码:
sqlCopy codeCREATE TABLE my_table (
id NUMBER PRIMARY KEY,
name VARCHAR2(50)
);
CREATE SEQUENCE my_sequence START WITH 1 INCREMENT BY 1;
CREATE OR REPLACE TRIGGER my_trigger
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
:NEW.id := my_sequence.NEXTVAL;
END;
在上面的示例中,我们首先创建了一个包含id
和name
字段的表my_table
,其中id
字段作为主键。然后,我们创建了一个名为my_trigger
的触发器,该触发器在每次向my_table
表插入数据之前被触发。触发器中的代码将序列my_sequence
的下一个值赋给新插入的记录的id
字段。
4. 总结
在PL/SQL中,我们可以使用序列或触发器来实现主键的自动递增。使用序列,我们可以在插入数据时直接获取下一个序列值作为主键的值。使用触发器,我们可以在插入数据之前自动为主键字段赋值。通过使用自动递增主键,我们可以简化数据插入操作,并确保主键的唯一性。