mysql - 在 MySQL 中自定义主键

标签 mysql auto-increment

如何在 MySQL 中创建自定义主键?,例如我有一个表,表名是 X,我有一个表字段为 IDCode ,姓名

I am afraid if I have 1000 users and when they input together will result in destruction

我想:

INSERT INTO `X` (`ID`,`Code`,`Name`) VALUES 
('P3K','Alex'), // this primary key is "P3K-1"
('SOS','Force'), // this primary key is "SOS-1"
('P3K','Bash'), // this primary key is "P3K-2"

现在,我为此使用 TRIGGER(BEFORE INSERT),如下所示:

SET NEW.`ID` = CONCAT(NEW.`Code`,'-',IFNULL(SUBSTRING_INDEX((
  SELECT `x`.`Code` FROM `X` WHERE 
    X.`Code` = NEW.`Code` and 
ORDER BY X.`Code` DESC
LIMIT 1 ),'-',-1),0) + 1))

我没有尝试这段代码,但我的观点是:

  1. 用户插入
  2. 在插入之前我检查最后一个主节点
  3. IF Null then i set 0, else I cut the symbol (-) and take the last part
  4. 我递增(使用 [+ 1])
  5. 最后,我连接 CODE 和新号码。

我错了吗?大声笑,如果是真的,如何创造这样的? (我认为)我们可以做到,也许没有人知道这一点,MySQL 中的 AI 如何工作得如此完美?

最佳答案

他的回答(https://stackoverflow.com/users/1133682/mjh)

InnoDB 非常依赖PRIMARY KEY 使用Auto Increment,如果不使用Auto Increment 就会耗费空间。每行添加至少 6-8 个字节只是为了制作“HIDDEN PRIMARY KEY”,innoDB 的最佳用途是使用自动增量并且不要打扰该键,如果你想添加 UNIQUE KEY 那么你只需要 CONCAT

关于mysql - 在 MySQL 中自定义主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46406311/

相关文章:

php - 在 mysql 中创建一个更长的唯一自动增量列,第一行有 6 个字符

mysql - 当大量已经存在时重置 MySQL auto_increment?

mysql - 在包含表的自动递增 "id"中插入 'id' 的后果是什么?

mysql - 将第二个 MySQL 表中的数据添加到第一个表的结果中

sql - MYSQL枚举: @rownum,奇偶记录

mysql - 字段列表中的列 `D1` 不明确

php - 通过数据库修改用户密码

mysql - CakePHP 1.3 未保存到数据库,但 sql 语句正确且 insertID 正确增加

sql - Oracle SQL 字符自动递增

php - 计算具有相同 ID 的多个列