You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle插入记录时如何自动生成Name与Id组合的唯一键Registration Number

解决方案

不同数据库的实现方式略有差异,以下是主流数据库的可落地实现方案:

1. MySQL 5.7+/8.0+ 版本

推荐使用**计算列(Generated Column)**实现,无需额外写触发器,性能更稳定:

-- 新建表时直接定义字段
CREATE TABLE your_table (
    Id INT AUTO_INCREMENT PRIMARY KEY,
    Name VARCHAR(255) NOT NULL,
    Result CHAR(1) NOT NULL,
    `Registration Number` VARCHAR(255) GENERATED ALWAYS AS (CONCAT(Name, '-', Id)) STORED UNIQUE
);

-- 已存在的表可以直接修改新增字段
ALTER TABLE your_table 
ADD COLUMN `Registration Number` VARCHAR(255) GENERATED ALWAYS AS (CONCAT(Name, '-', Id)) STORED UNIQUE;

插入数据时不需要给Registration Number传值,直接写入Name和Result即可:

INSERT INTO your_table (Name, Result) VALUES ('John', 'P');

2. Oracle 版本

12c及以上版本(推荐虚拟列方案)

CREATE TABLE your_table (
    Id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    Name VARCHAR2(255) NOT NULL,
    Result CHAR(1) NOT NULL,
    "Registration Number" VARCHAR2(255) GENERATED ALWAYS AS (Name || '-' || Id) VIRTUAL UNIQUE
);

11g及更低版本(触发器兼容方案)

-- 第一步建表
CREATE TABLE your_table (
    Id NUMBER PRIMARY KEY,
    Name VARCHAR2(255) NOT NULL,
    Result CHAR(1) NOT NULL,
    "Registration Number" VARCHAR2(255) UNIQUE
);
-- 第二步建自增序列
CREATE SEQUENCE your_table_id_seq START WITH 1 INCREMENT BY 1;
-- 第三步建触发器自动赋值
CREATE OR REPLACE TRIGGER trg_reg_num_generate
BEFORE INSERT ON your_table
FOR EACH ROW
BEGIN
    IF :NEW.Id IS NULL THEN
        :NEW.Id := your_table_id_seq.NEXTVAL;
    END IF;
    :NEW."Registration Number" := :NEW.Name || '-' || :NEW.Id;
END;
/

3. PostgreSQL 版本

使用生成列实现:

CREATE TABLE your_table (
    Id SERIAL PRIMARY KEY,
    Name VARCHAR(255) NOT NULL,
    Result CHAR(1) NOT NULL,
    "Registration Number" VARCHAR(255) GENERATED ALWAYS AS (Name || '-' || Id) STORED UNIQUE
);

注意:所有方案下插入记录时都不需要手动维护Registration Number字段,数据库会自动按规则生成,且天然满足唯一键约束要求,不会出现重复值。

内容的提问来源于stack exchange,提问作者Piku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:06:04