这两天在思考怎么生成数据库随机名称,思前想后觉得还是利用自增的逻辑主键是最方便快捷的,于是便尝试着获取一种自增的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这个表(在同一语句中)。