这两天在思考怎么生成数据库随机名称,思前想后觉得还是利用自增的逻辑主键是最方便快捷的,于是便尝试着获取一种自增的mysql函数
自增mysql函数
1 BEGIN2 DECLARE id INT DEFAULT 0;3 SELECT cuid + 1 INTO id from uc_gen_number where table_key = tableKey forupdate;4 IF id = 0THEN5 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 for update in FROM clause.错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。