<title>SQL Features That SQLite Does Not Implement</title>

<h2>SQL Features That SQLite Does Not Implement</h2>

<p>
SQLite implements most of the common features of SQL.
Rather than try to list all the features of SQL that SQLite does
support, it is much easier to list those that it does not.
Unsupported features of SQL are shown below.</p>

<table cellpadding="10">

<tcl>
proc feature {name desc} {
  hd_puts "<tr><td valign=\"top\"><b><nobr>$name</nobr></b></td>"
  hd_puts "<td width=\"10\">&nbsp;</th>"
  hd_puts "<td valign=\"top\">$desc</td></tr>"
}

feature {RIGHT and FULL OUTER JOIN} {
  LEFT OUTER JOIN is implemented, but not RIGHT OUTER JOIN or
  FULL OUTER JOIN.
}

feature {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.
}

feature {Complete trigger support} {
  FOR EACH ROW triggers are supported but not FOR EACH STATEMENT
  triggers.
}

feature {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.
}

feature {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.
}
</tcl>
</table>
