ATTACH DATABASE语句添加另外一个数据库文件到当前的连接中,如果文件名为":memory:",我们可以将其视为内存数据库,内存数据库无法持久化到磁盘文件上。如果 *** 作Attached数据库中的表,则需要在表名前加数据库名,如dbname.table_name。最后需要说明的是,如果一个事务包含多个Attached数据库 *** 作,那么该事务仍然是原子的。见如下示例:
sqlite> CREATE table testtable (first_col integer);
sqlite> INSERT INTO testtable VALUES(1);
sqlite>.backup'D:/mydb.db' --将当前连接中的主数据库备份到指定文件。
sqlite>.exit
--重新登录sqlite命令行工具:
sqlite> INSERT INTO testtable VALUES(2);
sqlite>ATTACH DATABASE'D:/mydb.db'ASmydb;
sqlite>.header on--查询结果将字段名作为标题输出。
sqlite>.mode column --将每列都分开显示。
sqlite> SELECT t1.first_col FROM testtable t1,mydb.testtablet2 WHERE t.first_col = t2.first_col;
first_col
----------
1
二、Detach数据库:
卸载将当前连接中的指定数据库,注意main和temp数据库无法被卸载。见如下示例:
--该示例承载上面示例的结果,即mydb数据库已经被Attach到当前的连接中。
sqlite>DETACH DATABASEmydb;
Error: no such table: mydb.testtable
三、事务:
在sqlite中,如果没有为当前的sql命令(SELECT除外)显示的指定事务,那么sqlite会自动为该 *** 作添加一个隐式的事务,以保证该 *** 作的原子性和一致性。当然,sqlite也支持显示的事务,其语法与大多数关系型数据库相比基本相同。见如下示例:
sqlite>BEGIN TRANSACTION;
sqlite> INSERT INTO testtable VALUES(1);
sqlite> INSERT INTO testtable VALUES(2);
sqlite>COMMIT TRANSACTION;--显示事务被提交,数据表中的数据也发生了变化。
sqlite> SELECT COUNT(*) FROM testtable;
COUNT(*)
----------
2
sqlite>BEGIN TRANSACTION;
sqlite> INSERT INTO testtable VALUES(1);
sqlite>RolLBACK TRANSACTION;--显示事务被回滚,数据表中的数据没有发生变化。 sqlite> SELECT COUNT(*) FROM testtable; COUNT(*) ---------- 2 总结
以上是内存溢出为你收集整理的SQLite学习手册(数据库和事务)全部内容,希望文章能够帮你解决SQLite学习手册(数据库和事务)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)