Oracle中如何加入序号(oracle中加入序号)
Oracle中如何加入序号
在Oracle数据库中,经常需要加入一些自增的序号来标识数据的唯一性或者排序,即使这些序号未被服务器端所实现。本文将介绍如何在Oracle数据表中添加自增序号。
在Oracle中添加自增序号的最常见方式是使用序列(Sequence)。序列是一种自动的数字生成器,可以为表中的列生成唯一的序号。序列是一个独立对象,可以通过创建序列的方式在数据库中创建。我们可以在需要添加自增序号的表上创建一个序列,然后将序列绑定到相应的列上。
以下是创建一个名为”SEQ_EMPLOYEE”的序列的示例代码:
“`SQL
CREATE SEQUENCE SEQ_EMPLOYEE
MINVALUE 1
MAXVALUE 9999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 20;
接下来,我们可以将其绑定到表中的某列上,以确保在插入数据时该列始终具有唯一的值。以下是为名为“EMPLOYEE”的表创建一列名为“ID”的示例SQL:
```SQLCREATE TABLE EMPLOYEE
( ID NUMBER(10) NOT NULL, -- 添加的自增序号
NAME VARCHAR2(50 BYTE), AGE NUMBER(3),
ADDRESS VARCHAR2(200 BYTE), SALARY NUMBER(8, 2),
PRIMARY KEY (ID) -- 创建主键,将序号作为主键);
在这个示例中,我们把“ID”列作为表的主键,以确保每一行在插入时都有一个唯一的值。如果我们希望在插入新数据时,让Oracle自动为我们填充“ID”列,我们可以定义一个触发器(Trigger)。在触发器中,我们可以使用序列(Sequence)作为新增记录时的自动添加属性。
以下是一个示例触发器代码:
“`SQL
CREATE OR REPLACE TRIGGER TRG_EMPLOYEE
BEFORE INSERT ON EMPLOYEE
FOR EACH ROW
BEGIN
SELECT SEQ_EMPLOYEE.NEXTVAL INTO :NEW.ID FROM DUAL;
END;
这个触发器将在每个INSERT操作(每一行数据的添加)之前执行,并将在DUAL表中查询公用序列的下一个值。然后,它将这个值分配给“ID”列,以确保其唯一性。
在这里,“:NEW”其实是一个特殊的变量引用,“:OLD”表示删除的行,它们只能在触发器中使用,并表示要插入、更新或删除的数据。在这个示例中,“:NEW.ID”引用正在插入的行中的“ID”列。
现在让我们向上面的“EMPLOYEE”表中插入一些示例数据,看看自增序号是如何起作用的:
```SQLINSERT INTO EMPLOYEE (NAME, AGE, ADDRESS, SALARY)
VALUES ('John Smith', 25, '123 Mn St, Anytown USA', 6000.00);
INSERT INTO EMPLOYEE (NAME, AGE, ADDRESS, SALARY)VALUES ('Jane Doe', 30, '456 Second Ave, Anytown USA', 8000.00);
INSERT INTO EMPLOYEE (NAME, AGE, ADDRESS, SALARY)VALUES ('Joe Blow', 35, '789 Third Blvd, Anytown USA', 10000.00);
如果我们查询该表,就会发现序号已经自动添加到“ID”列中:
“`SQL
SELECT * FROM EMPLOYEE;
ID NAME AGE ADDRESS SALARY
———- ————– —— ————————– ——–
1 John Smith 25 123 Mn St, Anytown USA 6000
2 Jane Doe 30 456 Second Ave, Anytown USA 8000
3 Joe Blow 35 789 Third Blvd, Anytown USA 10000
通过自动赋值给每一行数据的自增序号,“ID”列成为表的主键,确保每个员工都唯一地标识。如果我们将更多员工添加到表中,Oracle将继续自动递增并分配唯一的“ID”值。