我已经实现了存储在SQLite
数据库中的简单缓存。对于一个客户端,数据库中有一个表。我想自动创建这个表,如果它不存在。什么是更好的解决方案,使用查询检查表是否存在:SELECT name FROM sqlite_master WHERE type='table' AND name='table_name';
或使用CREATE TABLE IF NOT EXISTS table_name (...)
?每次我需要缓存时我都必须这样做,所以我想知道哪种方式更有效,更正确。
我正在使用PDO
,所以也许有一些更聪明的方法可以做到这一点?
解决方案:
使用PDO::errorCode
查找表是否不存在。
答案 0 :(得分:4)
我会选择create table if not exists
,因为如果你需要它,它会与其他数据库兼容(如果是sqlite,特别是你不太可能切换,但仍然)。
此外,如果您检查sqlite_master
但未在那里找到您的表,则需要发送另一个查询来创建它。对于create table
,您只发送一个查询,尽管其中定义了表结构,但如果您的表结构不难生成或预定义,那么每次使用{{1}时都不会出现问题。 }}
它还取决于您的桌子不存在的可能性。如果这不太可能,并且您只是希望您的应用程序安全且自我维护,您可以假设它们存在并在查询假设它们存在失败时处理异常以创建表。