SQL Features That SQLite Does Not Implement

[This information is courtesy www.sqlite.org.]

Rather than try to list all the features of SQL92 that SQLite does support, it is much easier to list those that it does not. Unsupported features of SQL92 are shown below.

The order of this list gives some hint as to when a feature might be added to SQLite. Those features near the top of the list are likely to be added in the near future. There are no immediate plans to add features near the bottom of the list.

CHECK constraints

 

CHECK constraints are parsed but they are not enforced. NOT NULL and UNIQUE constraints are enforced, however.

FOREIGN KEY constraints

 

FOREIGN KEY constraints are parsed but are not enforced.

Complete trigger support

 

There is some support for triggers but it is not complete. Missing subfeatures include FOR EACH STATEMENT triggers (currently all triggers must be FOR EACH ROW), INSTEAD OF triggers on tables (currently INSTEAD OF triggers are only allowed on views), and recursive triggers - triggers that trigger themselves.

Complete ALTER TABLE support

 

Only the RENAME TABLE and ADD COLUMN variants of the ALTER TABLE command are supported. Other kinds of ALTER TABLE operations such as DROP COLUMN, ALTER COLUMN, ADD CONSTRAINT, and so forth are omitted.

Nested transactions

 

The current implementation only allows a single active transaction.

The COUNT(DISTINCT X) function

 

You can accomplish the same thing using a subquery, like this:
  SELECT count(x) FROM (SELECT DISTINCT x FROM tbl);

RIGHT and FULL OUTER JOIN

 

LEFT OUTER JOIN is implemented, but not RIGHT OUTER JOIN or FULL OUTER JOIN.

Writing to VIEWs

 

VIEWs in SQLite are read-only. You may not execute a DELETE, INSERT, or UPDATE statement on a view. But you can create a trigger that fires on an attempt to DELETE, INSERT, or UPDATE a view and do what you need in the body of the trigger.

GRANT and REVOKE

 

Since SQLite reads and writes an ordinary disk file, the only access permissions that can be applied are the normal file access permissions of the underlying operating system. The GRANT and REVOKE commands commonly found on client/server RDBMSes are not implemented because they would be meaningless for an embedded database engine.