|
Ошибка с каскадным удалением.
|
|||
---|---|---|---|
#18+
Сушествует база данных, в ней 4 таблицы Users UserPlaces Places UserAccounts Как отсюда следует поле User.Id = UserPlaces.UserId = UserAccounts.UserId Допустим потребовалось добавить guid таблицы. Так как поле уникальное то его нельзя просто добавить alter-ом. Создается новая таблица newUsers с новым полем. Туда записываются все данные из Users , заполняется guid, а затем следующий код. Код: plaintext 1. 2. 3.
По идеи мы отключаем каскадные удаления и изменения, дропаем безболезнено таблицу и подменяем её другой. Так вот. Такая штука прокатывает не везде. если я использую SqliteBrowser - то он вообще не дает в пределах сессии включить foregin_keys, более того, они всегда off, false, 0 Но при этом все таблицы замещаются и все хорошо. Как только я использую к примеру библиотеку на c# Sqlite.dll, то в не происходит каскадная очистка связующих таблиц ( при этом новая таблица с данными переименовывается и даже видит зависимости. ИМХО. Не хочется изобретать велосипед, ведь это лишь пример а в реальной базе там 40-50 связующих таблиц и каждую переделывать не вариант ( ну совсем грустный вариант ) Так вот подскажите, кто сталкивался с данной проблемой. От себя скажу, что разница в шрифте роль не играет Users и users эквивалентны. Хотя я грешил на то, что переменные названы из за того что два разных программиста писали UserId = userId = userid - но от перемены ничего не изменилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 00:53 |
|
Ошибка с каскадным удалением.
|
|||
---|---|---|---|
#18+
Klironce, Данные заполните любые. Скриптик CREATE TABLE Users ( Id INTEGER PRIMARY KEY AUTOINCREMENT, UserId INTEGER NOT NULL UNIQUE, FirstName TEXT, MiddleName TEXT, LastName TEXT ); CREATE TABLE IF NOT EXISTS usercards( id INTEGER PRIMARY KEY AUTOINCREMENT, userid INTEGER NOT NULL, rfid TEXT NOT NULL, FOREIGN KEY(userid) REFERENCES users(userid) ON UPDATE CASCADE ON DELETE CASCADE ); CREATE TABLE newUsers ( Id INTEGER PRIMARY KEY AUTOINCREMENT, UserId INTEGER NOT NULL UNIQUE, FirstName TEXT, MiddleName TEXT, LastName TEXT, Guid TEXT NOT NULL UNIQUE ); INSERT INTO newUsers(userid, firstname, middlename, lastname, guid) SELECT userid, firstname, middlename, lastname, (lower(hex(randomblob(16)))) from users; PRAGMA foreign_keys = off DROP TABLE Users; ALTER TABLE newUsers RENAME TO Users; PRAGMA foreign_keys = on; ... |
|||
:
Нравится:
Не нравится:
|
|||
01.04.2016, 00:59 |
|
|
start [/forum/topic.php?fid=54&msg=39205592&tid=2008608]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
others: | 271ms |
total: | 413ms |
0 / 0 |