📄 sqlite.tcl
字号:
sqlite> (((select * from tbl1;)))INSERT INTO 'new_table' VALUES('hello',10);INSERT INTO 'new_table' VALUES('goodbye',20);sqlite>}puts {<p>The last output mode is "html". In this mode, sqlite3 writesthe results of the query as an XHTML table. The beginning<TABLE> and the ending </TABLE> are not written, butall of the intervening <TR>s, <TH>s, and <TD>sare. The html output mode is envisioned as being useful forCGI.</p>}puts {<h3>Writing results to a file</h3><p>By default, sqlite3 sends query results to standard output. Youcan change this using the ".output" command. Just put the name ofan output file as an argument to the .output command and all subsequentquery results will be written to that file. Use ".output stdout" tobegin writing to standard output again. For example:</p>}Code {sqlite> (((.mode list)))sqlite> (((.separator |)))sqlite> (((.output test_file_1.txt)))sqlite> (((select * from tbl1;)))sqlite> (((.exit)))$ (((cat test_file_1.txt)))hello|10goodbye|20$}puts {<h3>Querying the database schema</h3><p>The sqlite3 program provides several convenience commands thatare useful for looking at the schema of the database. There isnothing that these commands do that cannot be done by some othermeans. These commands are provided purely as a shortcut.</p><p>For example, to see a list of the tables in the database, youcan enter ".tables".</p>}Code {sqlite> (((.tables)))tbl1tbl2sqlite>}puts {<p>The ".tables" command is similar to setting list mode thenexecuting the following query:</p><blockquote><pre>SELECT name FROM sqlite_master WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'UNION ALL SELECT name FROM sqlite_temp_master WHERE type IN ('table','view') ORDER BY 1</pre></blockquote><p>In fact, if you look at the source code to the sqlite3 program(found in the source tree in the file src/shell.c) you'll findexactly the above query.</p><p>The ".indices" command works in a similar way to list all ofthe indices for a particular table. The ".indices" command takesa single argument which is the name of the table for which theindices are desired. Last, but not least, is the ".schema" command.With no arguments, the ".schema" command shows the original CREATE TABLEand CREATE INDEX statements that were used to build the current database.If you give the name of a table to ".schema", it shows the originalCREATE statement used to make that table and all if its indices.We have:</p>}Code {sqlite> (((.schema)))create table tbl1(one varchar(10), two smallint)CREATE TABLE tbl2 ( f1 varchar(30) primary key, f2 text, f3 real)sqlite> (((.schema tbl2)))CREATE TABLE tbl2 ( f1 varchar(30) primary key, f2 text, f3 real)sqlite>}puts {<p>The ".schema" command accomplishes the same thing as settinglist mode, then entering the following query:</p><blockquote><pre>SELECT sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master)WHERE type!='meta'ORDER BY tbl_name, type DESC, name</pre></blockquote><p>Or, if you give an argument to ".schema" because you onlywant the schema for a single table, the query looks like this:</p><blockquote><pre>SELECT sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master)WHERE type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'ORDER BY substr(type,2,1), name</pre></blockquote><p>You can supply an argument to the .schema command. If you do, thequery looks like this:</p><blockquote><pre>SELECT sql FROM (SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master)WHERE tbl_name LIKE '%s' AND type!='meta' AND sql NOT NULL AND name NOT LIKE 'sqlite_%'ORDER BY substr(type,2,1), name</pre></blockquote><p>The "%s" in the query is replace by your argument. This allows youto view the schema for some subset of the database.</p>}Code {sqlite> (((.schema %abc%)))}puts {<p>Along these same lines,the ".table" command also accepts a pattern as its first argument.If you give an argument to the .table command, a "%" is bothappended and prepended and a LIKE clause is added to the query.This allows you to list only those tables that match a particularpattern.</p><p>The ".databases" command shows a list of all databases open inthe current connection. There will always be at least 2. The firstone is "main", the original database opened. The second is "temp",the database used for temporary tables. There may be additional databases listed for databases attached using the ATTACH statement.The first output column is the name the database is attached with, and the second column is the filename of the external file.</p>}Code {sqlite> (((.databases)))}puts {<h3>Converting An Entire Database To An ASCII Text File</h3><p>Use the ".dump" command to convert the entire contents of adatabase into a single ASCII text file. This file can be convertedback into a database by piping it back into <b>sqlite3</b>.</p><p>A good way to make an archival copy of a database is this:</p>}Code {$ (((echo '.dump' | sqlite3 ex1 | gzip -c >ex1.dump.gz)))}puts {<p>This generates a file named <b>ex1.dump.gz</b> that contains everythingyou need to reconstruct the database at a later time, or on anothermachine. To reconstruct the database, just type:</p>}Code {$ (((zcat ex1.dump.gz | sqlite3 ex2)))}puts {<p>The text format is pure SQL so youcan also use the .dump command to export an SQLite databaseinto other popular SQL database engines. Like this:</p>}Code {$ (((createdb ex2)))$ (((sqlite3 ex1 .dump | psql ex2)))}puts {<h3>Other Dot Commands</h3><p>The ".explain" dot command can be used to set the output modeto "column" and to set the column widths to values that are reasonablefor looking at the output of an EXPLAIN command. The EXPLAIN commandis an SQLite-specific SQL extension that is useful for debugging. If anyregular SQL is prefaced by EXPLAIN, then the SQL command is parsed andanalyzed but is not executed. Instead, the sequence of virtual machineinstructions that would have been used to execute the SQL command arereturned like a query result. For example:</p>}Code {sqlite> (((.explain)))sqlite> (((explain delete from tbl1 where two<20;)))addr opcode p1 p2 p3 ---- ------------ ----- ----- ------------------------------------- 0 ListOpen 0 0 1 Open 0 1 tbl1 2 Next 0 9 3 Field 0 1 4 Integer 20 0 5 Ge 0 2 6 Key 0 0 7 ListWrite 0 0 8 Goto 0 2 9 Noop 0 0 10 ListRewind 0 0 11 ListRead 0 14 12 Delete 0 0 13 Goto 0 11 14 ListClose 0 0 }puts {<p>The ".timeout" command sets the amount of time that the <b>sqlite3</b>program will wait for locks to clear on files it is trying to accessbefore returning an error. The default value of the timeout is zero sothat an error is returned immediately if any needed database table orindex is locked.</p><p>And finally, we mention the ".exit" command which causes thesqlite3 program to exit.</p><h3>Using sqlite3 in a shell script</h3><p>One way to use sqlite3 in a shell script is to use "echo" or"cat" to generate a sequence of commands in a file, then invoke sqlite3while redirecting input from the generated command file. Thisworks fine and is appropriate in many circumstances. But asan added convenience, sqlite3 allows a single SQL command to beentered on the command line as a second argument after thedatabase name. When the sqlite3 program is launched with twoarguments, the second argument is passed to the SQLite libraryfor processing, the query results are printed on standard outputin list mode, and the program exits. This mechanism is designedto make sqlite3 easy to use in conjunction with programs like"awk". For example:</p>}Code {$ (((sqlite3 ex1 'select * from tbl1' |)))> ((( awk '{printf "<tr><td>%s<td>%s\n",$1,$2 }')))<tr><td>hello<td>10<tr><td>goodbye<td>20$}puts {<h3>Ending shell commands</h3><p>SQLite commands are normally terminated by a semicolon. In the shell you can also use the word "GO" (case-insensitive) or a slash character "/" on a line by itself to end a command. These are used by SQL Server and Oracle, respectively. These won't work in <b>sqlite3_exec()</b>, because the shell translates these into a semicolon before passing them to that function.</p>}puts {<h3>Compiling the sqlite3 program from sources</h3><p>The sqlite3 program is built automatically when you compile theSQLite library. Just get a copy of the source tree, run"configure" and then "make".</p>}footer $rcsid
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -