如何在 MySQL 中创建自定义主键?例如我有一个表,表名是X
,我有一个表字段为ID
, Code
, Name
。
恐怕如果我有 1000 个用户,当他们一起输入时会 导致破坏
我想:
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))
我没有尝试这段代码,但我的观点是:
- 用户插入
- 在插入之前我检查 LAST Primary
- IF Null 然后我设置 0,否则我剪切符号 (-) 并取最后一部分
- I 递增(使用 [+ 1])
- 最后,我连接
CODE
和新号码。
我被误导了吗?大声笑,如果是真的,如何创建这样的? (我想)我们可以做到,也许没有人知道这一点,MySQL 中的 AI 是如何完美地工作的?
不要创建
auto_increment
任何要显式操作的列。这可能会混淆发动机并导致严重问题。如果您没有用于主键的列,auto_increment
您可以通过触发器对它们做任何您想做的事情。如果它们违反主键的强制唯一性,肯定生成的值将被拒绝。