将blob字段移动到新表(id,blob),并将其替换为新表中的id

时间:2014-08-18 16:56:13

标签: sql sqlite

我有一个BLOB字段,其中包含1-2 MB的图像。我想创建一个只有2个字段的新表 - 一个带有引用ID的主键和BLOB,然后将保存BLOB的字段替换为一个字段,该字段保存新表中相同BLOB的引用ID。 / p>

我不太了解SQL,我甚至不确定这是否只能使用SQL。或者我是否需要制作C ++ / Python程序?

注意:我在数据库中使用SQLite,并且由于他们没有强制执行字段类型,我甚至不需要创建新字段,我只需要替换BLOB带有身份证。

1 个答案:

答案 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;