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这个表(在同一语句中)。

  • 相关阅读:
    特征选择(四)- 分散度
    机器学习实践中的7种常见错误
    逻辑回归 vs 决策树 vs 支持向量机(I)
    逻辑回归 vs 决策树 vs 支持向量机(II)
    线性回归和逻辑回归
    Mac 下 python 环境问题
    Linux目录/usr结构说明
    Python 处理 json
    感知机、logistic回归 损失函数对比探讨
    SVM探讨
  • 原文地址:https://www.cnblogs.com/fnlingnzb-learner/p/8067388.html
Copyright © 2011-2022 走看看