我有一个BLOB字段,其中包含1-2 MB的图像。我想创建一个只有2个字段的新表 - 一个带有引用ID的主键和BLOB,然后将保存BLOB的字段替换为一个字段,该字段保存新表中相同BLOB的引用ID。 / p>
我不太了解SQL,我甚至不确定这是否只能使用SQL。或者我是否需要制作C ++ / Python程序?
注意:我在数据库中使用SQLite,并且由于他们没有强制执行字段类型,我甚至不需要创建新字段,我只需要替换BLOB带有身份证。
答案 0 :(得分:1)
您必须将所有blob复制到另一个表,并使用新行的ID更新旧字段。 后者可以使用last_insert_rowid(),但仅适用于单行,因此您必须使用一种机制来逐步执行插入和更新。
这可以通过触发器(和虚拟视图)完成,这样触发复制的UPDATE实际上不会更新表格:
CREATE TABLE NewTable (ID INTEGER PRIMARY KEY, Blob);
CREATE TEMPORARY VIEW OldTable_view AS
SELECT * FROM OldTable;
CREATE TEMPORARY TRIGGER move_blob
INSTEAD OF UPDATE ON OldTable_view
BEGIN
INSERT INTO NewTable(Blob)
SELECT Blob FROM OldTable WHERE ID = OLD.ID;
UPDATE OldTable
SET Blob = last_insert_rowid()
WHERE ID = OLD.ID;
END;
UPDATE OldTable_view SET ID = ID;
DROP VIEW OldTable_view;