Syntax
GO
Description
This statement will force all queries in the current transaction to be processed by the query optimizer. This is necessary to seperate DDL and DML queries. Without specifying GO, between DDL queries that define structures that subsequent DML queries rely on, the query optimizer will try and combine the queries into a single internal DQL transaction, but fail because not all databases, tables and column names have been defined yet.
GO does not affect the atomicity of any current transactions. That is, doing START TRANSACTION, CREATE TABLE, GO, INSERT, then ROLLBACK will still roll back creation of a table.
Examples
Simple GO example
Multi-table GO example
CREATE DATABASE IF NOT EXISTS example;
DROP TABLE IF EXISTS example.go1;
CREATE TABLE example.go1 (
go1_id INT NOT NULL PARTITION,
title VARCHAR(0),
CONSTRAINT pkey PRIMARY KEY (id));
DROP TABLE IF EXISTS example.go2;
CREATE TABLE example.go2 (
go2_id INT NOT NULL PARTITION,
go1_id INT,
CONSTRAINT pkey PRIMARY KEY (go2_id),
CONSTRAINT go1_fkey FOREIGN KEY (link) REFERENCES example.go1 (go1_id));
GO;
INSERT INTO example.go1 VALUES (1,'First');
INSERT INTO example.go2 VALUES (1,1);
INSERT INTO example.go2 VALUES (2,1);
INSERT INTO example.go1 VALUES (2,'Second');
INSERT INTO example.go2 VALUES (3,2);
INSERT INTO example.go2 VALUES (4,2);
SELECT go1.go1_id, go1.title, go2.go2_id
FROM example.go1 JOIN example.go2 ON go1.go1_id=go2.go1_id;CREATE TABLE followed by ALTER TABLE:
CREATE TABLE test_table1 (
col1 BIGINT NOT NULL PARTITION,
CONSTRAINT pkey PRIMARY KEY (id));
GO;
ALTER TABLE test_table1 (ADD col2 BIGINT);
Related