【问题标题】:What is the equivalent of 'go' in MySQL?MySQL 中“go”的等价物是什么?
【发布时间】:2010-10-20 06:59:22
【问题描述】:

我可以在 TSQL 中声明:

insert into myTable (ID) values (5)
GO
select * from myTable

在 MySQL 中我无法编写相同的查询。

在 MySQL 中编写此查询的正确方法是什么?

【问题讨论】:

  • Sybase ASE 和 SQL Server 中的“go”关键字是批处理分隔符。它标志着一个批次的结束。 SQL Server 和 MySQL 实现的分号是语句分隔符(终止单个语句)。据我所知,MySQL 没有批处理分隔符(MySQL 中没有“GO”等价物)。

标签: sql mysql tsql


【解决方案1】:

分号在行尾。

INSERT INTO myTable (ID) values (5);

【讨论】:

  • 它甚至不必在行尾,就在语句的末尾
  • 我创建了一个 ID = 0 的插入语句,然后将字段更改为自动递增。它被添加为 ID = 1..
【解决方案2】:

分号是默认分隔符。 但是,您可以使用 DELIMITER 关键字将其重新定义为您想要的任何内容。来自 MySQL 手册:

mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
    -> BEGIN
    ->   SELECT COUNT(*) INTO param1 FROM t;
    -> END;
    -> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)

这当然不限于存储过程定义。

【讨论】:

    【解决方案3】:

    我认为问题在于 GO 是批处理终止符,而不是语句终止符。在明确设置事务之后,我执行了这段代码,而没有告诉我该过程已经存在。如果没有事务语句,我会收到一个错误,表明该过程已经存在。

    开始交易; 如果存在 usp_test,则删除程序; 犯罪; 开始交易; 创建过程 usp_test() 从书籍中选择 *; 犯罪; 调用 usp_test();

    【讨论】:

    • 这是正确答案。 Transaction 块在其中提交查询,在 MySql 中产生与 SQLServer 中的“GO”批处理分隔符类似的“批处理分隔符”效果。两者并不完全相同,但是为了定义一个存储过程,然后调用它,这很好用。
    【解决方案4】:

    只是一个简单的;

    所以试试

    insert into myTable(ID) values (5);
    select * from myTable;
    

    【讨论】:

      【解决方案5】:

      使用分号 (;)。它会将您的陈述分开。

      【讨论】:

        猜你喜欢
        • 2015-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多