1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<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>Last Insert Rowid</title>
</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_div("searchmenu")'>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">
<span class="desktoponly">Search for:</span> <input type="text" name="q">
<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 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.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>
<!-- keywords: sqlite3_last_insert_rowid -->
<div class=nosearch>
<a href="intro.html"><h2>SQLite C Interface</h2></a>
<h2>Last Insert Rowid</h2>
</div>
<blockquote><pre>
sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
</pre></blockquote>
<p>
Each entry in most SQLite tables (except for <a href="../withoutrowid.html">WITHOUT ROWID</a> tables)
has a unique 64-bit signed
integer key called the <a href="../lang_createtable.html#rowid">"rowid"</a>. The rowid is always available
as an undeclared column named ROWID, OID, or _ROWID_ as long as those
names are not also used by explicitly declared columns. If
the table has a column of type <a href="../lang_createtable.html#rowid">INTEGER PRIMARY KEY</a> then that column
is another alias for the rowid.</p>
<p>The sqlite3_last_insert_rowid(D) interface returns the <a href="../lang_createtable.html#rowid">rowid</a> of the
most recent successful <a href="../lang_insert.html">INSERT</a> into a rowid table or <a href="../vtab.html">virtual table</a>
on database connection D.
Inserts into <a href="../withoutrowid.html">WITHOUT ROWID</a> tables are not recorded.
If no successful <a href="../lang_insert.html">INSERT</a>s into rowid tables
have ever occurred on the database connection D,
then sqlite3_last_insert_rowid(D) returns zero.</p>
<p>If an <a href="../lang_insert.html">INSERT</a> occurs within a trigger or within a <a href="../vtab.html">virtual table</a>
method, then this routine will return the <a href="../lang_createtable.html#rowid">rowid</a> of the inserted
row as long as the trigger or virtual table method is running.
But once the trigger or virtual table method ends, the value returned
by this routine reverts to what it was before the trigger or virtual
table method began.</p>
<p>An <a href="../lang_insert.html">INSERT</a> that fails due to a constraint violation is not a
successful <a href="../lang_insert.html">INSERT</a> and does not change the value returned by this
routine. Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK,
and INSERT OR ABORT make no changes to the return value of this
routine when their insertion fails. When INSERT OR REPLACE
encounters a constraint violation, it does not fail. The
INSERT continues to completion after deleting rows that caused
the constraint problem so INSERT OR REPLACE will always change
the return value of this interface.</p>
<p>For the purposes of this routine, an <a href="../lang_insert.html">INSERT</a> is considered to
be successful even if it is subsequently rolled back.</p>
<p>This function is accessible to SQL statements via the
<a href="../lang_corefunc.html#last_insert_rowid">last_insert_rowid() SQL function</a>.</p>
<p>If a separate thread performs a new <a href="../lang_insert.html">INSERT</a> on the same
database connection while the <a href="../c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a>
function is running and thus changes the last insert <a href="../lang_createtable.html#rowid">rowid</a>,
then the value returned by <a href="../c3ref/last_insert_rowid.html">sqlite3_last_insert_rowid()</a> is
unpredictable and might not equal either the old or the new
last insert <a href="../lang_createtable.html#rowid">rowid</a>.
</p><p>See also lists of
<a href="objlist.html">Objects</a>,
<a href="constlist.html">Constants</a>, and
<a href="funclist.html">Functions</a>.</p>
|