SQLite数据库管理的相关命令
SQLite 是一个类似Access的轻量级数据库系统,但是更【dàn shì gèng】🌎小👟、更快、容量更【róng liàng gèng】大,并发更高【gāo】🌏。为什么说 SQLite 最适合做 CMS (内容管🖐理系统【lǐ xì tǒng】)呢【ne】?并不是【bìng bú shì】说其他数据库不好【bú hǎo】👶, Oracle、MySQL、SQLServer 也都是非常优🛃秀的【xiù de】 DBS,只不过他们设【tā men shè】计目标🚪不同【bú tóng】🉑,特性不同【bú tóng】🉑,所以只【suǒ yǐ zhī】有更适⛽用某个👙应用场景🛬,没有绝💬对的好坏之分。
SQLite的技术【de jì shù】⛳特点【tè diǎn】:
SQLite 对💰 SQL92 标准的支持包【zhī chí bāo】☔括索引【kuò suǒ yǐn】🌵、限制【xiàn zhì】🦉、触发和查看。SQLite 不支持外键限🎳制【zhì】🦉,但支持原子的、一致的、独立和【dú lì hé】持久 (ACID) 的事务📿(后面会提供有🌉关🍨 ACID 的更多【de gèng duō】📆信息)。这意味【zhè yì wèi】🔊着事务是原子的,因为它们要么【men yào me】完全执【wán quán zhí】🔵行🆖,要么根【yào me gēn】🍵本不执【běn bú zhí】行🆖。事务也是一致✳的,因为在不一致的状态【de zhuàng tài】中,该数据【gāi shù jù】♎库从未【kù cóng wèi】♑被保留【bèi bǎo liú】。事务还🤜是独立【shì dú lì】 的,所以【suǒ yǐ】,如果在同一时间在同【jiān zài tóng】一数据【yī shù jù】🏤库上有🌴两个执行🆖操作的【cāo zuò de】事务📿,那么这两个事务是互不干扰🍤的。而且事【ér qiě shì】务是持久性的📋,所以【suǒ yǐ】,该数据【gāi shù jù】♎库能够🚱在崩溃和断电时幸免【shí xìng miǎn】 于难,不会丢【bú huì diū】失数据【shù jù】或损坏。SQLite 通过数据【shù jù】库级上的独🏥占性和🙊共享锁定【dìng】来实现独立【xiàn dú lì】🛹事务处🎟理。这意味【zhè yì wèi】🔊着当多【zhe dāng duō】个进程【gè jìn chéng】和线程可以在🚀同一时间从同【jiān cóng tóng】一数据【yī shù jù】🏤库读取数据【shù jù】,但只有一个可以写入数据【shù jù】。在某个进 程或线🎩程向数👁据库执行🆖写入操作之前【zuò zhī qián】,必须获得独占锁【dú zhàn suǒ】🐥定【dìng】。在发出独占锁【dú zhàn suǒ】🐥定后【dìng hòu】,其他的🤽读或写【dú huò xiě】操作将不会再👚发生😨。
1.创建数【chuàng jiàn shù】据库
启动命令行【lìng háng】🔁,通过输【tōng guò shū】入如下命令打开🍄Shell模式的【mó shì de】👈CLP:
sqlite3 test.db
虽然我🐼们提供了数据库【shù jù kù】🐲名称,但如果该数据【gāi shù jù】库【kù】🐲不存在,SQLite实际上就未创建该数【jiàn gāi shù】据库【jù kù】🐲,直到在【zhí dào zài】🔣数据库【shù jù kù】🐲内部创👠建一些内容时📴,SQLite才创建【cái chuàng jiàn】该数据【gāi shù jù】库【kù】🐲。
2.创建数据表
sqlite> create table Member(id integer primary key, name text, age integer,addr text);
注【zhù】:id为主键,该列默【gāi liè mò】认具备【rèn jù bèi】自动增💣长的属🎓性👩。
3.插入数据
sqlite> insert into Member values(0,'wwl',21,'上海');//id=0的列必【de liè bì】🍁须不存在,否则会【fǒu zé huì】🚵出错
或者【huò zhě】⏫sqlite> insert into Member(name,age,addr) values('wwl',21,'上海');
4.查询数据
sqlite>.mode column
sqlite>.headers on
sqlite> select * from Member;
注【zhù】:select语句前【yǔ jù qián】面的两🥃个命令😎(.headers和.mode)用于改【yòng yú gǎi】善显示格式,可以不🎨要。
5.创建视图和索引
sqlite> create view schema as select * from Member;
sqlite> create index Member_Idx on Member(id)
6.导出数据
使用.dump命令【mìng lìng】可以将数【yǐ jiāng shù】据库🥏对象导【duì xiàng dǎo】出成【chū chéng】SQL格式😎。不带任🔆何参数【shù】时,.dump将整个【jiāng zhěng gè】数【shù】据库🥏导出为📋数【shù】据库🥏定义语言🈵(DDL)和数【shù】据库🥏操作语言🈵(DML)命令【mìng lìng】,适合重新创建数【shù】据库🥏对象和其中的数【shù】据🙎。如果提供了参【gòng le cān】🈳数【shù】,Shell将参数【shù】解析作【jiě xī zuò】为表名🌑或视图【huò shì tú】,导出任何匹配【hé pǐ pèi】⤵给定参数【shù】的表或视图【huò shì tú】,那些不🔲匹配的【pǐ pèi de】将被忽【jiāng bèi hū】略【luè】🎋。
默认情【mò rèn qíng】🐗况下.dump 命令的输出定【shū chū dìng】向到屏🎁幕【mù】🎼。如:.dump
如果要【rú guǒ yào】将输出⛏重定向【chóng dìng xiàng】到文件🅿,请使用.dump[filename]命令,此命令【cǐ mìng lìng】👤将所有🏣的输出重定向【chóng dìng xiàng】到指定的文件中【zhōng】。若要恢复到屏【fù dào píng】幕的输出,只需要【zhī xū yào】🍕执行【zhí háng】🌒.output stdout命令就OK了🍕。
sqlite>.output file.sql
sqlite>.dump
sqlite>.output stdout
注📞:如果【rú guǒ】file.sql不存在【bú cún zài】🕓,将在当♑前工作目录中【mù lù zhōng】🍚创建该【chuàng jiàn gāi】文件。如果【rú guǒ】文件存在,它将被覆盖。
7.导入数据
有两种方法可❄以导入数据【shù jù】👓,用哪种🌱方法取⏹决于要【jué yú yào】导入的文件格式【shì】。如果文件由【jiàn yóu】SQL语句构成【chéng】,可以使💜用.read命令【lìng】导入文件【rù wén jiàn】中包🕴含的命【hán de mìng】令【lìng】。如果文件中包🕴含由逗🍾号或其【hào huò qí】他分隔符分割的值【de zhí】🏩(comma-swparated values,CSV)组成【chéng】,可使用.import[file][table]命令【lìng】,此命令【lìng】将解析🔰指定的文件并【wén jiàn bìng】🔤尝试将🚮数据【shù jù】👓插入到【chā rù dào】指🛬定的表【dìng de biǎo】中。
.read命令用🌩来导入.dump命令创【mìng lìng chuàng】🐓建的【de】🛺文件。如果使用前面【yòng qián miàn】作为备份文件所导出【suǒ dǎo chū】的【de】🛺file.sql,需要先🉑移除已经存在🚻的【de】数据✉库对象,然后用下面的【xià miàn de】🛺方法重【fāng fǎ chóng】新导入:
sqlite>drop table Member;
sqlite>drop view schema;
sqlite>.read file.sql
8.备份数据库
有两种方式可🕸以完成【yǐ wán chéng】👰数据库【shù jù kù】的备份【de bèi fèn】🚰,具体使用哪一种取决于你希【yú nǐ xī】望的备【wàng de bèi】份🚰类型。SQL转储许是移植👚性最好🛁的备份【de bèi fèn】🚰。
生成转😠储的标【chǔ de biāo】准方式是使用🚥CLP.dump命令【mìng lìng】:sqlite3 test.db .dump >test.sql
在💵Shell中【zhōng】,可以将输出重【shū chū chóng】🌗定向到外部文💛件⌚,执行命令【lìng】,恢复到屏幕输【píng mù shū】出,如:
sqlite>.output file.sql
sqlite>.dump
sqlite>.output stdout
sqlite>.exit
同样🌼,容易将🗾SQL转储作【zhuǎn chǔ zuò】为【wéi】CLP的输入流实现数据库【shù jù kù】导入🙍:
sqlite3 test.db <test.sql
备份二进制数🌄据库🛥知识比复制文【fù zhì wén】件【jiàn】🐝稍多做⏫一点工作。备份之前需要清理数【qīng lǐ shù】据库🛥,这样可【zhè yàng kě】以释放【yǐ shì fàng】一些已删除对【shān chú duì】🔣象不再【xiàng bú zài】使用的空间🔯。这数据库🛥文件就【wén jiàn jiù】会变【huì biàn】👘小,因此二进制的🙍副本也🦆会较小:
sqlite3 test.db vacuum
cp test.db test.Backup
9.其它命令
sqlite>select last_insert_rowid();//获得最【huò dé zuì】后插入的自动【de zì dòng】🔼增长量🧝值
sqlite>.tabes//返回所有的表和视图【hé shì tú】🌑
sqlite>.indices Member //查看一🌪个表的【gè biǎo de】索引
sqlite>.schema Member //得到一个表或🚀视图的【shì tú de】定义🐂(DDL)语句【yǔ jù】,如果没有提供【yǒu tí gòng】🎮表名🔥,则返回【zé fǎn huí】所有数⛑据库对象【xiàng】(table,view,index,triger)的定义🐂语句【yǔ jù】
关键词:SQLite,数据库
阅读本文后您有什么感想? 已有 人给出评价!
- 0
- 0
- 0
- 0
- 0
- 0