php通过pdo连上了sqlite,如何获取所有表及表结构

php通过pdo连上了sqlite,如何获取所有表及表结构,第1张

如果想列出该数据库中的所有表,可:.table如果想查看这些表的结构:select * from sqlite_master where type="table"可以看到类似: 默认情况下,不会出现红框中的表头,需要之前设置,命令为:.header on如果只想查看具体一张表的表结构,比如查看emperors表,命令为:select * from sqlite_master where type="table" and name="emperors"另外,也可以这样:sqlite>.schema emperors

CREATE TABLE emperors( id integer primary key autoincrement, name text,dynasty text,start_year text)

SQLite最大的特点在于其数据类型为无数据类型(typelessness)。这意味着可以保存任何类型的数据到所想要保存的任何表的任何列中,无论这列声明的数据类型是什么。虽然在生成表结构的时候,要声明每个域的数据类型,但SQLite并不做任何检查。开发人员要靠自己的程序来控制输入与读出数据的类型。这里有一个例外,就是当主键为整型值时,如果要插入一个非整型值时会产生异常。

虽然,SQLite允许忽略数据类型,但是,仍然建议在Create Table语句中指定数据类型,因为数据类型有利于增强程序的可读性。另外,虽然在插入或读出数据的时候是不区分类型的,但在比较的时候,不同数据类型是有区别的。

对于SQLite数据库而言有两个问题:

(1) 可以增加一列,但是该列只能是表的最后一列。

(2)不能删除一列。

如果想删除表A中的一列或者一行,首先通过SQL创建一个临时表,然后把表A中期望保留的数据存储到临时表中,然后把表A删除,再通过SQL的create语句创建表A,最后将临时表中的数据再复制回来

例1:在表coordinate中增加一列自动增长的id列。

BEGIN TRANSACTION  

CREATE TEMPORARY TABLE ptemp(provinceID int, longitude double, latitude double)  

INSERT INTO ptemp SELECT provinceID,longitude, latitude FROM coordinate  

DROP TABLE coordinate  

CREATE TABLE provincecoordinate(id INTEGER PRIMARY KEY AUTOINCREMENT, provinceID int, longitude double, latitude double)  

INSERT INTO provincecoordinate(provinceID, longitude, latitude) SELECT provinceID, longitude, latitude FROM ptemp  

DROP TABLE ptemp  

COMMIT

例2:在表china中增加一列自动增长的id列。

BEGIN TRANSACTION  

CREATE TEMPORARY TABLE ptemp(longitude double, latitude double)  

INSERT INTO ptemp SELECT longitude, latitude FROM china  

DROP TABLE china  

CREATE TABLE china(id INTEGER PRIMARY KEY AUTOINCREMENT, longitude double, latitude double)  

INSERT INTO china(longitude, latitude) SELECT longitude, latitude FROM ptemp  

DROP TABLE ptemp  

COMMIT


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6764059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存