302 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			302 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!DOCTYPE html>
 | 
						|
<html><head>
 | 
						|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
						|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
 | 
						|
<link href="sqlite.css" rel="stylesheet">
 | 
						|
<title>CREATE INDEX</title>
 | 
						|
<!-- path= -->
 | 
						|
</head>
 | 
						|
<body>
 | 
						|
<div class=nosearch>
 | 
						|
<a href="index.html">
 | 
						|
<img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
 | 
						|
</a>
 | 
						|
<div><!-- IE hack to prevent disappearing logo --></div>
 | 
						|
<div class="tagline desktoponly">
 | 
						|
Small. Fast. Reliable.<br>Choose any three.
 | 
						|
</div>
 | 
						|
<div class="menu mainmenu">
 | 
						|
<ul>
 | 
						|
<li><a href="index.html">Home</a>
 | 
						|
<li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
 | 
						|
<li class='wideonly'><a href='about.html'>About</a>
 | 
						|
<li class='desktoponly'><a href="docs.html">Documentation</a>
 | 
						|
<li class='desktoponly'><a href="download.html">Download</a>
 | 
						|
<li class='wideonly'><a href='copyright.html'>License</a>
 | 
						|
<li class='desktoponly'><a href="support.html">Support</a>
 | 
						|
<li class='desktoponly'><a href="prosupport.html">Purchase</a>
 | 
						|
<li class='search' id='search_menubutton'>
 | 
						|
<a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
 | 
						|
</ul>
 | 
						|
</div>
 | 
						|
<div class="menu submenu" id="submenu">
 | 
						|
<ul>
 | 
						|
<li><a href='about.html'>About</a>
 | 
						|
<li><a href='docs.html'>Documentation</a>
 | 
						|
<li><a href='download.html'>Download</a>
 | 
						|
<li><a href='support.html'>Support</a>
 | 
						|
<li><a href='prosupport.html'>Purchase</a>
 | 
						|
</ul>
 | 
						|
</div>
 | 
						|
<div class="searchmenu" id="searchmenu">
 | 
						|
<form method="GET" action="search">
 | 
						|
<select name="s" id="searchtype">
 | 
						|
<option value="d">Search Documentation</option>
 | 
						|
<option value="c">Search Changelog</option>
 | 
						|
</select>
 | 
						|
<input type="text" name="q" id="searchbox" value="">
 | 
						|
<input type="submit" value="Go">
 | 
						|
</form>
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
<script>
 | 
						|
function toggle_div(nm) {
 | 
						|
var w = document.getElementById(nm);
 | 
						|
if( w.style.display=="block" ){
 | 
						|
w.style.display = "none";
 | 
						|
}else{
 | 
						|
w.style.display = "block";
 | 
						|
}
 | 
						|
}
 | 
						|
function toggle_search() {
 | 
						|
var w = document.getElementById("searchmenu");
 | 
						|
if( w.style.display=="block" ){
 | 
						|
w.style.display = "none";
 | 
						|
} else {
 | 
						|
w.style.display = "block";
 | 
						|
setTimeout(function(){
 | 
						|
document.getElementById("searchbox").focus()
 | 
						|
}, 30);
 | 
						|
}
 | 
						|
}
 | 
						|
function div_off(nm){document.getElementById(nm).style.display="none";}
 | 
						|
window.onbeforeunload = function(e){div_off("submenu");}
 | 
						|
/* Disable the Search feature if we are not operating from CGI, since */
 | 
						|
/* Search is accomplished using CGI and will not work without it. */
 | 
						|
if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
 | 
						|
document.getElementById("search_menubutton").style.display = "none";
 | 
						|
}
 | 
						|
/* Used by the Hide/Show button beside syntax diagrams, to toggle the */
 | 
						|
function hideorshow(btn,obj){
 | 
						|
var x = document.getElementById(obj);
 | 
						|
var b = document.getElementById(btn);
 | 
						|
if( x.style.display!='none' ){
 | 
						|
x.style.display = 'none';
 | 
						|
b.innerHTML='show';
 | 
						|
}else{
 | 
						|
x.style.display = '';
 | 
						|
b.innerHTML='hide';
 | 
						|
}
 | 
						|
return false;
 | 
						|
}
 | 
						|
</script>
 | 
						|
</div>
 | 
						|
<div class=fancy>
 | 
						|
<div class=nosearch>
 | 
						|
<div class="fancy_title">
 | 
						|
CREATE INDEX
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
<h1 id="syntax"><span>1. </span>Syntax</h1>
 | 
						|
<p><b><a href="syntax/create-index-stmt.html">create-index-stmt:</a></b>
 | 
						|
<button id='x1323' onclick='hideorshow("x1323","x1324")'>hide</button></p>
 | 
						|
 <div id='x1324' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram create-index-stmt" src="images/syntax/create-index-stmt.gif" />
 | 
						|
<p><b><a href="syntax/expr.html">expr:</a></b>
 | 
						|
<button id='x1325' onclick='hideorshow("x1325","x1326")'>show</button></p>
 | 
						|
 <div id='x1326' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram expr" src="images/syntax/expr.gif" />
 | 
						|
<p><b><a href="syntax/filter-clause.html">filter-clause:</a></b>
 | 
						|
<button id='x1327' onclick='hideorshow("x1327","x1328")'>show</button></p>
 | 
						|
 <div id='x1328' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram filter-clause" src="images/syntax/filter-clause.gif" />
 | 
						|
</div>
 | 
						|
<p><b><a href="syntax/literal-value.html">literal-value:</a></b>
 | 
						|
<button id='x1329' onclick='hideorshow("x1329","x1330")'>show</button></p>
 | 
						|
 <div id='x1330' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram literal-value" src="images/syntax/literal-value.gif" />
 | 
						|
</div>
 | 
						|
<p><b><a href="syntax/over-clause.html">over-clause:</a></b>
 | 
						|
<button id='x1331' onclick='hideorshow("x1331","x1332")'>show</button></p>
 | 
						|
 <div id='x1332' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram over-clause" src="images/syntax/over-clause.gif" />
 | 
						|
<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
 | 
						|
<button id='x1333' onclick='hideorshow("x1333","x1334")'>show</button></p>
 | 
						|
 <div id='x1334' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram frame-spec" src="images/syntax/frame-spec.gif" />
 | 
						|
</div>
 | 
						|
<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
 | 
						|
<button id='x1335' onclick='hideorshow("x1335","x1336")'>show</button></p>
 | 
						|
 <div id='x1336' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram ordering-term" src="images/syntax/ordering-term.gif" />
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
<p><b><a href="syntax/raise-function.html">raise-function:</a></b>
 | 
						|
<button id='x1337' onclick='hideorshow("x1337","x1338")'>show</button></p>
 | 
						|
 <div id='x1338' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram raise-function" src="images/syntax/raise-function.gif" />
 | 
						|
</div>
 | 
						|
<p><b><a href="syntax/select-stmt.html">select-stmt:</a></b>
 | 
						|
<button id='x1339' onclick='hideorshow("x1339","x1340")'>show</button></p>
 | 
						|
 <div id='x1340' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram select-stmt" src="images/syntax/select-stmt.gif" />
 | 
						|
<p><b><a href="syntax/common-table-expression.html">common-table-expression:</a></b>
 | 
						|
<button id='x1341' onclick='hideorshow("x1341","x1342")'>show</button></p>
 | 
						|
 <div id='x1342' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram common-table-expression" src="images/syntax/common-table-expression.gif" />
 | 
						|
</div>
 | 
						|
<p><b><a href="syntax/compound-operator.html">compound-operator:</a></b>
 | 
						|
<button id='x1343' onclick='hideorshow("x1343","x1344")'>show</button></p>
 | 
						|
 <div id='x1344' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram compound-operator" src="images/syntax/compound-operator.gif" />
 | 
						|
</div>
 | 
						|
<p><b><a href="syntax/join-clause.html">join-clause:</a></b>
 | 
						|
<button id='x1345' onclick='hideorshow("x1345","x1346")'>show</button></p>
 | 
						|
 <div id='x1346' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram join-clause" src="images/syntax/join-clause.gif" />
 | 
						|
<p><b><a href="syntax/join-constraint.html">join-constraint:</a></b>
 | 
						|
<button id='x1347' onclick='hideorshow("x1347","x1348")'>show</button></p>
 | 
						|
 <div id='x1348' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram join-constraint" src="images/syntax/join-constraint.gif" />
 | 
						|
</div>
 | 
						|
<p><b><a href="syntax/join-operator.html">join-operator:</a></b>
 | 
						|
<button id='x1349' onclick='hideorshow("x1349","x1350")'>show</button></p>
 | 
						|
 <div id='x1350' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram join-operator" src="images/syntax/join-operator.gif" />
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
<p><b><a href="syntax/ordering-term.html">ordering-term:</a></b>
 | 
						|
<button id='x1351' onclick='hideorshow("x1351","x1352")'>show</button></p>
 | 
						|
 <div id='x1352' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram ordering-term" src="images/syntax/ordering-term.gif" />
 | 
						|
</div>
 | 
						|
<p><b><a href="syntax/result-column.html">result-column:</a></b>
 | 
						|
<button id='x1353' onclick='hideorshow("x1353","x1354")'>show</button></p>
 | 
						|
 <div id='x1354' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram result-column" src="images/syntax/result-column.gif" />
 | 
						|
</div>
 | 
						|
<p><b><a href="syntax/table-or-subquery.html">table-or-subquery:</a></b>
 | 
						|
<button id='x1355' onclick='hideorshow("x1355","x1356")'>show</button></p>
 | 
						|
 <div id='x1356' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram table-or-subquery" src="images/syntax/table-or-subquery.gif" />
 | 
						|
</div>
 | 
						|
<p><b><a href="syntax/window-defn.html">window-defn:</a></b>
 | 
						|
<button id='x1357' onclick='hideorshow("x1357","x1358")'>show</button></p>
 | 
						|
 <div id='x1358' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram window-defn" src="images/syntax/window-defn.gif" />
 | 
						|
<p><b><a href="syntax/frame-spec.html">frame-spec:</a></b>
 | 
						|
<button id='x1359' onclick='hideorshow("x1359","x1360")'>show</button></p>
 | 
						|
 <div id='x1360' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram frame-spec" src="images/syntax/frame-spec.gif" />
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
<p><b><a href="syntax/type-name.html">type-name:</a></b>
 | 
						|
<button id='x1361' onclick='hideorshow("x1361","x1362")'>show</button></p>
 | 
						|
 <div id='x1362' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram type-name" src="images/syntax/type-name.gif" />
 | 
						|
<p><b><a href="syntax/signed-number.html">signed-number:</a></b>
 | 
						|
<button id='x1363' onclick='hideorshow("x1363","x1364")'>show</button></p>
 | 
						|
 <div id='x1364' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram signed-number" src="images/syntax/signed-number.gif" />
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
<p><b><a href="syntax/indexed-column.html">indexed-column:</a></b>
 | 
						|
<button id='x1365' onclick='hideorshow("x1365","x1366")'>show</button></p>
 | 
						|
 <div id='x1366' style='display:none;' class='imgcontainer'>
 | 
						|
 <img alt="syntax diagram indexed-column" src="images/syntax/indexed-column.gif" />
 | 
						|
</div>
 | 
						|
</div>
 | 
						|
 | 
						|
 | 
						|
<p>The CREATE INDEX command consists of the keywords "CREATE INDEX" followed
 | 
						|
by the name of the new index, the keyword "ON", the name of a previously
 | 
						|
created table that is to be indexed, and a parenthesized list of table column
 | 
						|
names and/or expressions that are used for the index key.
 | 
						|
If the optional WHERE clause is included, then the index is a "<a href="partialindex.html">partial index</a>".
 | 
						|
</p>
 | 
						|
 | 
						|
<p>If the optional IF NOT EXISTS clause is present and another index
 | 
						|
with the same name already exists, then this command becomes a no-op.</p>
 | 
						|
 | 
						|
<p>There are no arbitrary limits on the number of indices that can be
 | 
						|
attached to a single table.  The number of columns in an index is 
 | 
						|
limited to the value set by
 | 
						|
<a href="c3ref/limit.html">sqlite3_limit</a>(<a href="c3ref/c_limit_attached.html#sqlitelimitcolumn">SQLITE_LIMIT_COLUMN</a>,...).</p>
 | 
						|
 | 
						|
<p>Indexes are removed with the <a href="lang_dropindex.html">DROP INDEX</a> command.</p>
 | 
						|
 | 
						|
<a name="uniqueidx"></a>
 | 
						|
 | 
						|
<h2 id="unique_indexes"><span>1.1. </span>Unique Indexes</h2>
 | 
						|
 | 
						|
<p>If the UNIQUE keyword appears between CREATE and INDEX then duplicate
 | 
						|
index entries are not allowed.  Any attempt to insert a duplicate entry
 | 
						|
will result in an error.</p>
 | 
						|
 | 
						|
<p>For the purposes of unique indices, all NULL values
 | 
						|
are considered different from all other NULL values and are thus unique.
 | 
						|
This is one of the two possible interpretations of the SQL-92 standard
 | 
						|
(the language in the standard is ambiguous).  The interpretation used
 | 
						|
by SQLite is the same and is the interpretation
 | 
						|
followed by PostgreSQL, MySQL, Firebird, and Oracle.  Informix and
 | 
						|
Microsoft SQL Server follow the other interpretation of the standard, which
 | 
						|
is that all NULL values are equal to one another.</p>
 | 
						|
 | 
						|
<a name="indexexpr"></a>
 | 
						|
 | 
						|
<h2 id="indexes_on_expressions"><span>1.2. </span>Indexes on Expressions</h2>
 | 
						|
 | 
						|
<p>Expressions in an index may not reference other tables
 | 
						|
and may not use subqueries nor functions whose result might
 | 
						|
change (ex: <a href="lang_corefunc.html#random">random()</a> or <a href="lang_corefunc.html#sqlite_version">sqlite_version()</a>).
 | 
						|
Expressions in an index may only refer to columns in the table
 | 
						|
that is being indexed.
 | 
						|
Indexes on expression will not work with versions of SQLite prior
 | 
						|
to <a href="releaselog/3_9_0.html">version 3.9.0</a> (2015-10-14).
 | 
						|
See the <a href="expridx.html">Indexes On Expressions</a> document for additional information
 | 
						|
about using general expressions in CREATE INDEX statements.
 | 
						|
 | 
						|
<a name="descidx"></a>
 | 
						|
 | 
						|
</p><h2 id="descending_indexes"><span>1.3. </span>Descending Indexes</h2>
 | 
						|
 | 
						|
<p>Each column name or expression can be followed by one
 | 
						|
of the "ASC" or "DESC" keywords to indicate sort order.
 | 
						|
The sort order may or may not be ignored depending
 | 
						|
on the database file format, and in particular the <a href="fileformat2.html#schemaformat">schema format number</a>.
 | 
						|
The "legacy" schema format (1) ignores index
 | 
						|
sort order.  The descending index schema format (4) takes index sort order
 | 
						|
into account.  Only versions of SQLite 3.3.0 (2006-01-11)
 | 
						|
and later are able to understand
 | 
						|
the descending index format. For compatibility, version of SQLite between 3.3.0
 | 
						|
and 3.7.9 use the legacy schema format by default.  The newer schema format is
 | 
						|
used by default in version 3.7.10 (2012-01-16) and later.
 | 
						|
The <a href="pragma.html#pragma_legacy_file_format">legacy_file_format pragma</a> can be used to change set the specific
 | 
						|
behavior for any version of SQLite.</p>
 | 
						|
 | 
						|
<h2 id="nulls_first_and_nulls_last"><span>1.4. </span>NULLS FIRST and NULLS LAST</h2>
 | 
						|
 | 
						|
<p>The NULLS FIRST and NULLS LAST predicates are not supported
 | 
						|
for indexes.  For <a href="datatype3.html#sortorder">sorting purposes</a>, SQLite considers NULL values 
 | 
						|
to be smaller than all other values.  Hence NULL values always appear at
 | 
						|
the beginning of an ASC index and at the end of a DESC index.</p>
 | 
						|
 | 
						|
<a name="collidx"></a>
 | 
						|
 | 
						|
<h2 id="collations"><span>1.5. </span>Collations</h2>
 | 
						|
 | 
						|
<p>The COLLATE clause optionally following each column name
 | 
						|
or expression defines a
 | 
						|
collating sequence used for text entries in that column.
 | 
						|
The default collating
 | 
						|
sequence is the collating sequence defined for that column in the
 | 
						|
<a href="lang_createtable.html">CREATE TABLE</a> statement.  Or if no collating sequence is otherwise defined,
 | 
						|
the built-in BINARY collating sequence is used.</p>
 | 
						|
 |