MySQL更新将插入的主键自动递增为自定义值

MySQL更新将插入的主键自动递增为自定义值,mysql,database,triggers,Mysql,Database,Triggers,插入新行时,将保存一个自动增量ID,如1,2,3。。 我需要使用触发器对其进行自定义,这样它将像201712017220173一样保存。此触发器将执行此操作 CREATE DEFINER=`root`@`%` TRIGGER `test_before_insert` BEFORE INSERT ON `test` FOR EACH ROW BEGIN SET NEW.id = ( SELECT CONCAT(YEAR(CURDATE()),IFNULL(MAX(CAST(ids.id

插入新行时,将保存一个自动增量ID,如1,2,3。。
我需要使用触发器对其进行自定义,这样它将像201712017220173一样保存。

此触发器将执行此操作

CREATE DEFINER=`root`@`%` TRIGGER `test_before_insert` BEFORE INSERT ON `test` FOR EACH ROW BEGIN

SET NEW.id = (
    SELECT CONCAT(YEAR(CURDATE()),IFNULL(MAX(CAST(ids.id AS UNSIGNED))+1,1))
    FROM (
        SELECT RIGHT(t.id,LENGTH(t.id)-4) AS id
        FROM test t
        WHERE LEFT(t.id,4) = YEAR(CURDATE())
    ) ids
);

END

但是有很多理由你不想这么做。当插入行时,这将以指数形式增加成本,并且无法提供可行的排序等。

似乎有些奇怪,但还行。您希望该系列的第十个价值是什么,201710?谢谢您的评论。2017257没关系:)我想让它像2017年一样+旧的伊多克,明白了。现在你可能有理由需要它了。我只是想指出,除非使用字符,否则索引的顺序不会按年份分组。你可以这么做。也许我没弄明白,但我相信用扳机就可以做到,对吧?非常感谢,我到办公室后会尽快测试