2015-05-02 2 views
0

Я создал эти таблицы:sqlite3 python3 удаление каскад не работает, как ожидалось

import sqlite3 
conn = sqlite3.connect('scheduler1111111.db') 
c = conn.cursor() 
c.execute('pragma foreign_keys = ON;') 
c.execute('''CREATE TABLE sections 
        (id_sect INTEGER PRIMARY KEY, name TEXT)''') 

c.execute('''DROP TABLE IF EXISTS subjects''') 
c.execute('''CREATE TABLE subjects 
        (id_subj INTEGER PRIMARY KEY, name TEXT, career TEXT)''') 


c.execute('''DROP TABLE IF EXISTS professors''') 
c.execute('''CREATE TABLE professors 
        (id_p INTEGER PRIMARY KEY, name TEXT, lastname TEXT, cedula TEXT)''') 

c.execute('''DROP TABLE IF EXISTS scheduler''') 
c.execute('''CREATE TABLE scheduler 
        (id_sch INTEGER PRIMARY KEY, id_sect INTEGER, id_subj INTEGER, id_p INTEGER, Day TEXT, From_time INTEGER, To_time INTEGER, 
        FOREIGN KEY (id_sect) REFERENCES sections (id_sect) 
        FOREIGN KEY (id_subj) REFERENCES subjects (id_subj), 
        FOREIGN KEY (id_p) REFERENCES professors (id_p) ON DELETE SET DEFAULT)''') 

Пусть я у профессора Mike X и John Z в таблицах профессоров, и у меня уже есть разделы в таблице разделов, и то же самое в таблицах объектов, если я попытаюсь добавить профессора в таблицу планировщика, которая не находится в таблице профессора, это не позволит мне, поэтому она работает, как и я ожидал, однако, если я заполню несколько строк в планировщик и ввод говорят, тот же профессор, Майк Х в трех строках, затем я ухожу и удаляю профессора Майка Х из таблицы профессоров, я думал, что эти три строки на таблице Scheduelr с Майком Х в нем будут удалены также, но я получаю NULL в столбце id_p, как я могу это сделать, чтобы он фактически удалял все строки, так что удаление каскада работает так, как ожидалось, а не только NULLS полей в дочерней таблице?

ответ

0

но то, что я получаю в колонке id_p

Ну NULL, да, потому что вы сказали SQLite, чтобы сделать это:

FOREIGN KEY (id_p) REFERENCES professors (id_p) ON DELETE SET DEFAULT 

ON DELETE SET DEFAULT часть означает, что «когда строка ссылки по id_p, установите столбец id_p в значение по умолчанию ", которое для столбца NOT NULL равно NULL, если не указано иное.

Изменить ON DELETE SET DEFAULTON DELETE CASCADE.

+0

О, интересно большое вам спасибо –

Смежные вопросы