Могу ли я выполнить команду внешнего ключа на основе регистра (каскадную или нулевую)? - PullRequest
0 голосов
/ 11 июля 2020

Я хотел бы дать пользователю возможность, когда он удаляет элемент в родительской таблице, либо каскадно удалять, либо устанавливать значение null для элементов в дочерней таблице, которая ссылается на внешний ключ, возможно ли это в SQLITE? или мне нужно сделать это в моем коде? Это команды, которые я в настоящее время использую при создании обеих таблиц, в настоящее время при удалении категории элементы, которым была назначена эта категория, имеют значение null, в основном я хотел бы дать пользователю возможность удалить все из них, предпочтительно в пределах SQL код.

    await database.execute(
      "CREATE TABLE $TABLE_CATEGORIES ("
      "$COLUMN_CATEGORYID INTEGER PRIMARY KEY,"
      "$COLUMN_CATEGORYNAME TEXT"
      ")",
    );
    await database.execute(
      "CREATE TABLE $TABLE_GROCERIES ("
      "$COLUMN_ID INTEGER PRIMARY KEY,"
      "$COLUMN_NAME TEXT,"
      "$COLUMN_PPU REAL,"
      "$COLUMN_BASE REAL,"
      "$COLUMN_STOCK REAL,"
      "$COLUMN_CATEGORYID INTEGER,"
      "FOREIGN KEY($COLUMN_CATEGORYID) REFERENCES $TABLE_CATEGORIES($COLUMN_CATEGORYID) ON DELETE SET NULL"
      ")",
    );

1 Ответ

0 голосов
/ 11 июля 2020

Вам нужно решить это в своем коде. Вы можете настроить базу данных только на «SET NULL» или «CASCADE DELETE». Если бы это было моей задачей, я бы использовал «ON DELETE SET NULL» и разрешил бы пользователю удалять дочерние строки, запустив второй запрос sql, например DELETE FROM child_table WHERE parent_id = $parentid

...