mysql - 如何为同一数据库中的所有表设置唯一的主键

标签 mysql sql database database-design

如何给数据库的所有表设置一个唯一的主键?
例如,我不想重复不同表的任何主键。

table A:
----------
id | name
----------
1  | aaa
3  | bbb
5  | ccc

table B:
-------------
id | surname
-------------
7  | ddd
2  | eee
9  | fff

table C:
-------------
id | nickname
-------------
4  | ggg
6  | hhh
8  | iii

所有id都是primary keyauto_increment。 所有数据都是动态输入的。我在 PHPMYADMIN 中使用 MYSQL

最佳答案

您可以向您的架构添加一个名为 ID_Table 的新表,当向任何添加新行时,该表将只有一个名为 current_id 的数字列,默认值为 0您必须调用 ID_Table 上的选择的模式的其他表返回 ID_Table.current_id + 1 作为新的 id 值。 然后必须更新 ID_Table

Update ID_Tableset ID_Table.current_id = ID_Table.current_id + 1 

GetNewId 函数可以通过以下方式实现 锁定 ID_Table
更新 ID_Table
返回 NewID

是这样的(我用过Oracle语法)

create table ID_Table(
   current_id number
); 

Insert into ID_Table values(0);

CREATE OR REPLACE Function GetNewId RETURN number is
  new_id    ID_Table.current_id%type;
  row_count number;
begin
  select nvl(ID_Table.current_id, 0) + 1
    INTO new_id
    FROM ID_Table
     for update;
  update ID_Table set ID_Table.Current_Id = new_id;
  commit;

  RETURN new_id;
end GetNewId;

关于mysql - 如何为同一数据库中的所有表设置唯一的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16494624/

相关文章:

sql - 如何使用 case 语句将多个值放入一列中?

mysql - SQL查询中的多个聚合函数

database - 是否可以监听关系数据库更新?

mysql - 在 MySQL 中循环遍历结果集

mysql - 升级到 mysql 5.7 后日期函数不工作

MySQL 查询按字母顺序 A-Z 但 "AA"之后是 "Z"

database - PFILE 在 Oracle 中的位置

php - php中的下拉框从mysqli数据库获取部分值

mysql - 以计算值为条件的 SQL

sql - Oracle 克隆用户的方法