DooX, ну в таблице данные уже какие-то есть, верно? вот они-то и противоречат... обрати внимание - у меня корень имеет папашку номер NULL, это можно, а у тебя ноль, что неправильно.
p.s. кстати если данных много и структура сложная, будет долго все это обрабатываться
я 'разрабатывал' но не реализовывал (так и не понадобилось) дерево на sql, и проще всего было хранить дополнительно списки потомков для каждого элемента в отдельной таблице кэше или колонке с сериализованными списками (в зависимости от требованиям по доступу и частоте обновлений), нереально развязывает руки, при минимальных накладных расходах (обновлять триггерами).
DooX, заменить нулевого родителя на NULL вместо числового нуля. И после этого создавать внешний ключ. Либо добавить фейковый элемент, имеющий id 0, в роли корня (а родителя назначить ему или NULL, или самого себя).