zoukankan      html  css  js  c++  java
  • 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这个表(在同一语句中)。

  • 相关阅读:
    proc文件系统面面谈
    如何创建,增加SWAP?
    使用linux中的fdisk无损坏合并分区
    QEMU+Accelerator
    QEMU网络配置
    Linux主机设NAT
    试用QEMU,安装个FreeBSD 5.3
    QEMU简介
    使用Vesa2
    BugFree介绍
  • 原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/8067388.html
Copyright © 2011-2022 走看看