【问题标题】:Does this function conform to ANSI SQL standard?此函数是否符合 ANSI SQL 标准?
【发布时间】:2012-12-07 20:41:32
【问题描述】:

我想知道是否有人可以告诉我这个函数是否遵循 ANSI SQL 标准,为了将来参考,是否有任何资源可以用来查找我的 SQL 是否符合 ANSI 标准。我使用的 DBMS 是 MySQL。

CREATE FUNCTION INCREMENT()
RETURNS INT
BEGIN
    DECLARE oldVal INT;
    DECLARE newVal INT;
    SELECT currentVal INTO oldVal FROM atable FOR UPDATE;
    SET newVal=oldVal +1;
    UPDATE atable SET currentVal=newVal;
    RETURN newVal;
END;

【问题讨论】:

  • 一般来说,我只是建议获取一份 MS SQL Express 并在那里运行你的函数。如果它在 MySql 中运行并且在 MS SQL 中运行,那么你应该很好。
  • 这对 Linux 人员没有帮助,更重要的是仍然不能保证符合标准。
  • UPDATE table SET current = current + 1 有什么问题?
  • @BrandonMoore:MySQL 和 SQL Server 没有定义 SQL 标准。如果一个函数在那里运行,那么它肯定不会满足 ANSI 标准。
  • @jcs:没有 DBMS 完全符合 SQL 标准——尤其是在存储过程和函数方面(MySQL 确实经常偏离标准。DB2 和 PostgreSQL 更接近于比 MySQL 标准)。

标签: mysql sql function standards ansi-sql


【解决方案1】:

找到一个验证工具,可以检查您的 SQL 是否符合 SQL 2003。
http://developer.mimer.com/validator/parser200x/index.tml

【讨论】:

    【解决方案2】:

    基于此评论

    如果我执行更新,基本上我需要检索新的更新值 表 SET current = current + 1 然后执行选择以获取 新值,这可能会导致问题,例如如果另一笔交易 update 和 select 之间的更新。

    我认为您的问题与 SQL 标准没有任何关系。我认为您的问题与transactionstransaction isolation levels. 有关

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 1970-01-01
      • 2021-05-31
      相关资源
      最近更新 更多