powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / При удалении элемента из родительской таблицы, не удаляются элементы из дочерних таблиц
5 сообщений из 5, страница 1 из 1
При удалении элемента из родительской таблицы, не удаляются элементы из дочерних таблиц
    #38122849
nvrrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, уважаемые форумчане!

Есть три таблицы связанные между собой, ниже скрипты создания этих таблиц (кусок скрипта в lua):

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CreateClassificators = ""
	.."    CREATE TABLE  IF NOT EXISTS CLASSIFICATORS ("
	.."      [CL_ID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,"
	.."      [CL_NAME] TEXT, "
	.."      [CL_FOREIGN_OWNER] INTEGER);",
	CreateTrees = ""
	.."   CREATE TABLE IF NOT EXISTS TREES ("
	.."    [TREE_ID] INTEGER NOT NULL PRIMARY KEY ON CONFLICT ROLLBACK AUTOINCREMENT CONSTRAINT [PART] UNIQUE ON CONFLICT ROLLBACK,    "
	.."    [CL_ID] INTEGER CONSTRAINT [FK_TREES_REFERENCE_CLASSIFICATORS] REFERENCES [CLASSIFICATORS]([CL_ID]) ON DELETE CASCADE ON UPDATE CASCADE,"
	.."    [PARENT_TREE_ID] INTEGER, "
	.."    [TREE_NAME] TEXT, "
	.."    [DATE_OF_CREATION] DATA, "
	.."    [EXTERNAL_ID] INTEGER, " 
	.."    [TREE_CHANGEABLE] INTEGER, " 
	.."    [SIGNATURE_STAMP] INTEGER, " 
	.."    [TYPE_ID] INTEGER, " 
	.."    [TREE_PROPERTIES_ID] INTEGER, " 
	.."    [CLOSED] INTEGER);", 
	CreateAccords = ""
	.."    CREATE TABLE  IF NOT EXISTS ACCORDS ("
	.."    [AC_ID] INTEGER NOT NULL PRIMARY KEY ON CONFLICT ROLLBACK AUTOINCREMENT,  "
	.."    [DOC_ID] INTEGER NOT NULL CONSTRAINT [FK_ACCORDS_REFERENCE_DOCUMENTS] REFERENCES [DOCUMENTS]([DOC_ID]) ON DELETE CASCADE ON UPDATE CASCADE,"
    	.."    [TREE_ID] INTEGER NOT NULL CONSTRAINT [FK_ACCORDS_REFERENCE_TREES] REFERENCES [TREES]([TREE_ID]) ON DELETE CASCADE ON UPDATE CASCADE);",



Таблицы связаны между собой - CLASSIFICATORS - Родительская таблица
связана с дочерней TREES, через CL_ID
а TREES в свою очередь связана с дочерней ACCORD, через TREE_ID


добавляю в эти таблицы связанные элементы
удаляю элемент из CLASSIFICATOR двумя способами:
1) через выполнение запроса из скрипта Lua

DELETE FROM CLASSIFICATORS WHERE CL_ID = :CL_ID;

в резьтате удаляется элемент из таблицы CLASSIFICATOR, НО СВЯЗАННЫЕ С НИМ ЭЛЕМЕНТЫ ИЗ ДОЧЕРНИХ ТАБЛИЦ (TREES, ACCORDS)НЕ УДАЛЯЮТСЯ

2) через СУБД sqllite
в результате получаю ошибку: "foreign key mismatch"


Кто-нибудь сталкивался с этой проблемой? Подскажите, пожалуйста, решение.
Буду очень признателен...
...
Рейтинг: 0 / 0
При удалении элемента из родительской таблицы, не удаляются элементы из дочерних таблиц
    #38122942
pit_alex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nvrrus,

Все должно работать, может с настройками базы проблемы?
...
Рейтинг: 0 / 0
При удалении элемента из родительской таблицы, не удаляются элементы из дочерних таблиц
    #38123558
nvrrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В итоге добился того, что созданная и заполненная через скрипты lua БД

ведет себя по разному при выполнении одного и того же запроса:

Код: python
1.
DELETE FROM CLASSIFICATOR WHERE CL_ID = 1;



один раз выполняю запрос через SQL Expert - все выполняется как нужно - удаляется запись из основной таблицы CLASSIFICATOR и связанные с ней записи из дочерних табилц - TREE, ACCORD

второй раз выполняю запрос через lua - удаляется только запись из основной таблицы CLASSIFICATOR - из дочерних ничего не удаляется

в чем может быть проблема?
...
Рейтинг: 0 / 0
При удалении элемента из родительской таблицы, не удаляются элементы из дочерних таблиц
    #38123763
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
При удалении элемента из родительской таблицы, не удаляются элементы из дочерних таблиц
    #38125856
nvrrus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

спасибо!!!

заработало так:

До создания таблиц, выполняю

Код: sql
1.
db:exec("PRAGMA foreign_keys = ON;")



и перед удалением из родительской таблицы

Код: sql
1.
2.
3.
db:exec("PRAGMA foreign_keys = ON;")

ExecuteTransactionSQL("DELETE FROM CLASSIFICATOR WHERE CL_ID = '1';")



в этом случае дочерние элементы удаляются!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / При удалении элемента из родительской таблицы, не удаляются элементы из дочерних таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]