主键生成有两种方式
一种是使用oracle提供的sys_guid() 生成16个字节的原始值
一种是使用序列加上触发器
第一种sys_guid()
首先执行查看一下
select sys_guid() from dual;
能看到打印出来的是一个32位字符串
在创建表的时候给需要作为主键的字段加上一个默认值default设置
create table test_user
(
guid varchar2(36) default sys_guid() NOT NULL PRIMARY KEY
);
第二种使用Sequence
首先创建一张表,名为TEST_USER
CREATE TABLE TEST_USER
(
ID NUMBER(11) NOT NULL PRIMARY KEY,
USER_ID VARCHAR2(11),
USER_NAME VARCHAR2(11),
CREATED_BY VARCHAR2(11),
GMT_CREATE DATE,
MODIFIED_BY VARCHAR2(11),
GMT_MODIFIED DATE,
IS_DELETED NUMBER(1)
);
给TEST_USER表添加注释说明
-- 添加表注释
COMMENT ON TABLE TEST_USER IS '测试用户表';
-- 添加字段注释
COMMENT ON COLUMN TEST_USER.ID IS '主键';
COMMENT ON COLUMN TEST_USER.USER_ID IS '用户ID';
COMMENT ON COLUMN TEST_USER.USER_NAME IS '用户名称';
COMMENT ON COLUMN TEST_USER.CREATED_BY IS '创建人';
COMMENT ON COLUMN TEST_USER.GMT_CREATE IS '创建时间';
COMMENT ON COLUMN TEST_USER.MODIFIED_BY IS '修改人';
COMMENT ON COLUMN TEST_USER.GMT_MODIFIED IS '修改时间';
COMMENT ON COLUMN TEST_USER.IS_DELETED IS '1 表示删除,0 表示未删除';
创建一个序列号
CREATE SEQUENCE TEST_USER_ID -- 序列号名称
MINVALUE 1 -- 最小值
MAXVALUE 999999999 -- 最大值
INCREMENT BY 1 -- 自增步长为1
START WITH 1; -- 初始值
为TEST_USER表创建一个主键ID字段自动增长的触发器
CREATE OR REPLACE TRIGGER TRIGGER_TEST_USER_ID
BEFORE INSERT -- 添加数据前
ON TEST_USER -- 触发器作用的对象
FOR EACH ROW -- 指定创建的是行级触发器
BEGIN
SELECT TEST_USER_ID.nextval -- 使用名为TEST_USER_ID的序列号
INTO :NEW.ID FROM dual;
END;