mysql实现自增函数

这两天在思考怎么生成数据库随机名称,思前想后觉得还是利用自增的逻辑主键是最方便快捷的,于是便尝试着获取一种自增的mysql函数

自增mysql函数

 1 BEGIN
 2 DECLARE id INT DEFAULT 0;
 3 SELECT cuid + 1 INTO id from uc_gen_number where table_key = tableKey for update;
 4 IF id = 0 THEN 
 5 SET id = 1;
 6 INSERT INTO uc_gen_number (table_key, cuid) VALUES (tableKey, id);
 7 ELSE UPDATE uc_gen_number SET cuid = id where table_key = tableKey;
 8 END IF;
 9 RETURN id;
10 END

查资料的时候看到了这个函数,觉得真的是刷新了我的三观,之前一直认为select出的结果集是不能够赋值给其他的,因为考虑毕竟是一个集合,但是今天发现却可以,只要保证结果集只有一条。

自己尝试着验证了这个原理:

update User set FSerialID=(select FSerialId from (select FSerialId from User ORDER BY FSerialId desc limit 1) a) where FSerialId=(select FSerialId from (select FSerialId from User ORDER BY FSerialId asc limit 1) b)

没想到真的可以。如果把select FSerialId from (select FSerialId from UserInfo ORDER BY FSerialId desc limit 1) a 这句直接改成select FSerialId from UserInfo ORDER BY FSerialId desc limit 1。会报错You can't specify target table <tbl> for update in FROM clause.错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。

原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/8067388.html