Enforce unique values across two tables

后端 未结 7 1256
慢半拍i
慢半拍i 2021-01-01 20:48

Is it possible to enforce uniqueness across two tables in MySQL?

I have two tables, both describing users. The users in these tables were for two different systems p

7条回答
  •  轮回少年
    2021-01-01 21:02

    You could add an extra table with a single column as a primary key. Then create a trigger on each of your old user tables to insert the id into this extra table.

    create table users1 (
        user_id integer primary key,
        username varchar(8) not null unique
    );
    create table users2 (
        user_id integer primary key,
        username varchar(8) not null unique
    );
    create table all_usernames (
        username varchar(8) primary key
    );
    create trigger users1_insert before insert on users1 for each row
        insert into all_usernames values(new.username);
    create trigger users2_insert before insert on users2 for each row
        insert into all_usernames values(new.username);
    create trigger users1_update before update on users1 for each row
        update all_usernames set username = new.username
        where username = old.username;
    create trigger users2_update before update on users2 for each row
        update all_usernames set username = new.username
        where username = old.username;
    create trigger users1_delete before delete on users1 for each row
        delete from all_usernames where username = old.username;
    create trigger users2_delete before delete on users2 for each row
        delete from all_usernames where username = old.username;
    

    You can then populate the table with

    insert into all_usernames select username from users1;
    insert into all_usernames select username from users2;
    

提交回复
热议问题