如何获取SQLite中外键引用表的列ID?PHP转MySQL遇阻
SQLite转MySQL:获取外键关联列ID的解决方案
问题本质
你遇到的情况是因为部分SQLite数据库(比如来自mAiList的这个)的外键约束可能未显式指定关联列,或者元数据未完整存储这些信息。SQLite允许定义外键时省略目标列,此时默认关联目标表的主键列——这也是SQLiteStudio生成的CREATE语句里只有表名的原因。
可行解决方法
通过主键推断关联列:SQLite外键省略目标列时,默认关联目标表的主键。用以下命令获取目标表的主键:
PRAGMA table_info(foreign_table_name);返回结果中
pk值为1的列就是主键列,也就是你需要的column_id_of_foreign_table。验证外键元数据:如果
PRAGMA foreign_key_list(table_name)的to字段为NULL,说明该外键确实没有显式指定目标列,此时只能依赖主键推断,这是SQLite的默认行为。结合SQLiteStudio的可视化信息:虽然无法直接在PHP脚本中调用SQLiteStudio的扩展模式,但可以通过它展示的外键关联列,在脚本中对应处理——先获取目标表主键,再作为外键关联列。
针对mAiList数据库的脚本逻辑
在PHP脚本中可以按以下步骤处理:
- 对每个表执行
PRAGMA foreign_key_list(table_name),获取外键的源列(from字段)和目标表名(table字段); - 对每个目标表名执行
PRAGMA table_info(table_name),找到pk值为1的主键列; - 拼接MySQL的外键语句:
FOREIGN KEY (from_column) REFERENCES foreign_table(pk_column)。
内容的提问来源于stack exchange,提问作者Georgio
相关产品推荐
相关产品推荐

