Hi Dan,

Yeah, I took a closer look to my script today (fresh mind), and indeed
there was a typo. I've been on it so closely yesterday that I couldn't see
this huge error.

I'm sorry, to all the mailing list, for such an useless post...

Anyway, thanks again Dan, have a nice day guys

2017-07-26 13:04 GMT+02:00 Dan Kennedy <danielk1...@gmail.com>:

> On 07/25/2017 08:42 PM, Bubu Bubu wrote:
>
>> I'm having trouble with foreign key constraints et cascade clauses and I
>> don't really know where could be the problem.
>> I'm working on sqlite version 3.8.11.1 (I can't update it, work
>> restriction), but I checked and such functionnalities are enabled (correct
>> me if I'm wrong).
>>
>> I've renamed everything, hope this will be readable :
>>
>> PRAGMA foreign_keys = true;
>>
>> CREATE TABLE T_A (
>> id_t_a INTEGER PRIMARY KEY,
>> label TEXT
>> );
>>
>> CREATE TABLE T_B (
>> id_t_b INTEGER PRIMARY KEY,
>> fk_t_a_id INTEGER NOT NULL,
>> label TEXT,
>> FOREIGN KEY(fk_t_a_id) REFERENCES T_A(id_t_a) ON DELETE CASCADE ON UPDATE
>> CASCADE
>> );
>>
>> CREATE TABLE T_C (
>> id_t_c INTEGER PRIMARY KEY,
>> fk_t_a_id INTEGER NOT NULL,
>> fk_t_b_id INTEGER,
>> FOREIGN KEY(fk_t_a_id) REFERENCES T_A(id_t_a) ON DELETE CASCADE ON UPDATE
>> CASCADE,
>> FOREIGN_KEY(fk_t_b_id) REFERENCES T_B(id_t_b) ON DELETE SET NULL ON UPDATE
>> CASCADE
>> );
>>
>> CREATE TABLE T_D (
>> id_t_d INTEGER PRIMARY KEY,
>> fk_t_c_id INTEGER NOT NULL,
>> fk_t_b_id INTEGER,
>> FOREIGN KEY(fk_t_c_id) REFERENCES T_C(id_t_c) ON DELETE CASCADE ON UPDATE
>> CASCADE,
>> FOREIGN KEY(fk_t_b_id) REFERENCES T_B(id_t_b) ON DELETE SET NULL ON UPDATE
>> CASCADE
>> );
>>
>> And then I'm doing this :
>>
>> INSERT INTO T_A(label) VALUES("A1");                       // id_t_a -> 1
>> INSERT INTO T_B(label, fk_t_a_id) VALUES("B1", 1);
>> INSERT INTO T_B(label, fk_t_a_id) VALUES("B2", 1);
>>
>> At this point, tables T_D and T_C are and will remain empty, then I do :
>> DELETE FROM T_A WHERE id_t_a = 1;
>>
>> I get this error :
>> foreign key mismatch - "T_D" referencing "T_C"
>>
>
> This script runs without error in the shell.
>
> The error indicates that there is no index t_c(id_t_c). Which is not the
> case in the above - it's an INTEGER PRIMARY KEY. Maybe there is a typo in
> the actual db schema that you fixed when transcribing. Or it could be a bug
> in some older version of SQLite that has been fixed since.
>
> Try opening the db with the shell tool and running ".lint fkey" - it will
> tell you if it thinks there is an index missing. Also check the entry for
> table T_C in the sqlite_master table - there might be a typo in the
> declaration of column id_t_c.
>
> Dan.
>
>
>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to