满口金牙 2021-10-13 11:19 采纳率: 90.4%
浏览 48
已结题

请教用什么方案, 一个mysql数据库 30多个表, 共用序列Id, Id且不重复, 这个表怎么设计:

请教用什么方案, 一个数据库 30多个表, 共用Id, Id且不重复, 这个表怎么设计:

我目前是想建一个只存ID的主表,
每次增加分表记录, 先在ID主表生成ID,再给分表用.

30多个分表的主键Id, 同时 一对一外键 ID主表

这样行不行,有什么更好的方案

  • 写回答

1条回答 默认 最新

  • 神仙别闹 2021-10-13 11:31
    关注

    采用主id表+触发器的方式进行设计,以下是设计思路。
    1.使用Sequence表维护id

    DROP TABLE IF EXISTS `sequence`;
    CREATE TABLE `sequence` (
    `tablename` varchar(64) NOT NULL,
    `nextid` bigint(20) DEFAULT NULL,
    PRIMARY KEY (`tablename`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    

    2.创建主键策略函数

    DROP FUNCTION IF EXISTS `auto_seq`;
    CREATE DEFINER = `root`@`localhost` FUNCTION `auto_seq`(tb_purpose VARCHAR(64))
    RETURNS int(11)
    BEGIN
    DECLARE reid int;
    set reid = (select `nextid` from `sequence` where `tablename`=tb_purpose limit 1);
    update `sequence` set `nextid`=reid + 1;
    return reid;
    end;
    

    3.在分表中创建触发器,此触发器为插入前触发,调用主键策略函数返回的结果赋予id

    DROP TRIGGER `auto_seq`;
    CREATE TRIGGER `auto_seq` BEFORE INSERT ON `item`
    FOR EACH ROW begin
    set new.id = auto_seq('item');
    end;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月21日
  • 已采纳回答 10月13日
  • 创建了问题 10月13日