Supported Statements#

Data manipulation statements#

StatementSupportedNotes and limitations
CALL
CREATE TABLE AS
CREATE TABLE LIKE
DO
DELETENo support for referring to more than one table in a single DELETE statement.
HANDLER
IMPORT TABLEUse dolt table import
INSERTIncluding support for ON DUPLICATE KEY clauses.
LOAD DATA
LOAD XMLUse dolt table import
REPLACE
SELECTMost select statements, including UNION and JOIN, are supported.
SELECT FROM AS OFSelecting from a table as of any known revision or commit timestamp is supported.
SELECT FOR UPDATERow-level locks are not supported.
SUBQUERIESSubqueries work, but must be given aliases. Some limitations apply.
TABLE
TRUNCATE
UPDATENo support for referring to more than one table in a single UPDATE statement.
VALUES
WITH
SELECT INTOCharset/Collation specification not supported.

Data definition statements#

StatementSupportedNotes and limitations
ADD COLUMN
ADD CHECK
ADD CONSTRAINT
ADD FOREIGN KEY
ADD PARTITION
ALTER COLUMN🟠Name and order changes are supported. Some but not all type changes are supported.
ALTER DATABASE
ALTER EVENTMoving events across databases using RENAME TO clause is not supported yet.
ALTER INDEXIndexes can be created and dropped, but not altered.
ALTER PRIMARY KEY
ALTER TABLENot all ALTER TABLE statements are supported. See the rest of this table for details.
ALTER TYPE🟠Some type changes are supported but not all.
ALTER VIEWViews can be created and dropped, but not altered.
CHANGE COLUMN
CREATE DATABASECreates a new dolt database rooted relative to the server directory
CREATE EVENT
CREATE FUNCTION
CREATE INDEX
CREATE SCHEMACreates a new dolt database rooted relative to the server directory
CREATE TABLE
CREATE TABLE AS
CREATE TRIGGER
CREATE VIEW
DESCRIBE TABLE
DROP COLUMN
DROP CONSTRAINT
DROP DATABASEDeletes the dolt data directory. This is unrecoverable.
DROP EVENT
DROP FUNCTION
DROP INDEX
DROP SCHEMADeletes the dolt data directory. This is unrecoverable.
DROP TABLE
DROP PARTITION
DROP PROCEDURE
DROP TRIGGER
DROP VIEW
MODIFY COLUMN
RENAME COLUMN
RENAME CONSTRAINT
RENAME DATABASEDatabase names are read-only, but can be configured in the server config.
RENAME INDEX
RENAME TABLE
SHOW COLUMNS
SHOW CONSTRAINTS
SHOW CREATE FUNCTION
SHOW CREATE PROCEDURE
SHOW CREATE TABLE
SHOW CREATE VIEW
SHOW DATABASES
SHOW FUNCTION CODE
SHOW FUNCTION STATUS
SHOW GRANTS🟠Database privileges, table privileges, and role assumption are not yet implemented.
SHOW INDEX
SHOW PRIVILEGES
SHOW PROCEDURE CODE
SHOW PROCEDURE STATUS
SHOW SCHEMAS
SHOW TABLESSHOW FULL TABLES reveals whether a table is a base table or a view.
TRUNCATE TABLE

Transactional statements#

Dolt supports atomic transactions like other SQL databases. It’s also possible for clients to connect to different heads, which means they will never see each other’s edits until a merge between heads is performed. See Using Branches for more detail.

Dolt has two levels of persistence:

  1. The SQL transaction layer, where a COMMIT statement atomically updates the working set for the connected head

  2. The Dolt commit layer, where commits are added to the Dolt commit graph with an author, a parent commit, etc.

StatementSupportedNotes and limitations
BEGINSynonym for START TRANSACTION
COMMIT
CALL DOLT_COMMIT()DOLT_COMMIT() creates a new Dolt commit using the content of the STAGED HEAD. See docs on DOLT_COMMIT() for details.
LOCK TABLESLOCK TABLES parses correctly but does not prevent access to those tables from other sessions.
ROLLBACK
SAVEPOINT
RELEASE SAVEPOINT
ROLLBACK TO SAVEPOINT
@@autocommit
SET TRANSACTIONDifferent isolation levels are not yet supported.
START TRANSACTION
UNLOCK TABLES🟠UNLOCK TABLES parses correctly, but since LOCK TABLES doesn’t prevent concurrent access it’s essentially a no-op.

Prepared statements#

StatementSupportedNotes and limitations
PREPAREPrepared statements do not work inside of a STORED PROCEDURE.
EXECUTEExecute statments do not work inside of a STORED PROCEDURE.

Access management statements#

More information on how Dolt handles access management may be found in the access management page.

StatementSupportedNotes and limitations
ALTER USER
CREATE ROLE
CREATE USER🟠Only supports basic user creation with an optional password
DROP ROLE
DROP USER
GRANT🟠Only handles static privileges down to the table level
RENAME USER
REVOKE🟠Only handles static privileges down to the table level
SET DEFAULT ROLE
SET PASSWORD
SET ROLE

Session management statements#

StatementSupportedNotes and limitations
SET
SET CHARACTER SET
SET NAMES
KILL QUERY

Utility statements#

StatementSupportedNotes and limitations
EXPLAIN
USE

Compound statements#

StatementSupportedNotes and limitations
BEGIN END
STATEMENT LABELS🟠Labels are only supported for LOOP.
DECLAREFully supports declaring variables.
DECLARE ... CONDITION
DECLARE ... HANDLER🟠Partially supports handling the NOT FOUND condition when using cursors.
DECLARE ... CURSOR
SET
CASE
IF
ITERATE
LEAVE
LOOP
REPEAT
RETURN
WHILE
CLOSE
FETCH
OPEN

Other administrative statements#

StatementSupportedNotes and limitations
BINLOGInternal-use statement that replays base64-encoded binary log events. Generated by mysqlbinlog or similar utilities. Concurrent BINLOG statements can corrupt each other’s states; execute through one client at a time only.