Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> что делает constraint, что делает constraint  
:(
    Опции темы
крылья
Дата 25.4.2015, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 24.3.2015

Репутация: нет
Всего: нет



ребят объясните очень простым понятным языком что такое  constraint, для чего он нужен, что он делает, желательно на примере с пояснением............
у меня есть первичное поле id и к нему привязаны записи parent, моя таблица имеет иерархичную структуру, дело в том что если я удалю любое id поле то привязанные записи потеряются, ну тупо память засорять будут, мне нужно сделать ограничение чтобы для начало нужно было удалить все привязанные записи а потом самого родителя!!!



PM MAIL   Вверх
Zloxa
Дата 26.4.2015, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(крылья @  26.4.2015,  00:11 Найти цитируемый пост)
мне нужно сделать ограничение чтобы для начало нужно было удалить все привязанные записи а потом самого родителя!!

О. И объяснять ничего не надо именно эту функцию и выполняет foreign key constraint (ограничение внешнего ключа)


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 26.4.2015, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 453



Цитата(крылья @  26.4.2015,  00:11 Найти цитируемый пост)
что такое  constraint

Условие на значение. При его невыполнении в проведении операции с данными будет отказано.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
крылья
Дата 27.4.2015, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 24.3.2015

Репутация: нет
Всего: нет



дело в том что у меня одна таблица, как бы мне не нужен внешний ключ
у меня это в одной таблице выражена, структура иерархичная....ну типа у меня есть id поле и еще есть поле parent , так вот, полt parent хранит в себе значения id номера, ия я не могу удалить id если в поле parent имеется его значение 
PM MAIL   Вверх
Akina
Дата 27.4.2015, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20570
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: нет
Всего: 453



Правильно. У тебя есть условие на значение - у записи должен быть родитель, или там должно быть NULL (родителя нет, запись является корнем). Поэтому операция удаления родителя не может быть выполнена, пока у него есть хоть один потомок - следует всех потомков или удалить, или приписать к другим родителям, или сделать корневыми, и только потом удалять.

Добавлено через 1 минуту и 15 секунд
Так что внешний ключ - нужен.

PS. Внешний - это не означает, что строго на другую таблицу. Можно и на себя - но всегда на другой индекс.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 27.4.2015, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3470
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Код

SQL> create table hier_example
  2  (
  3      id number primary key,
  4      parent_id number references hier_example(id)
  5  );
Table created
SQL> insert into hier_example(id, parent_id) values (1, null);
1 row inserted
SQL> insert into hier_example(id, parent_id) values (2, 1);
1 row inserted
SQL> delete from hier_example where id = 1;
delete from hier_example where id = 1
ORA-02292: integrity constraint (COM.SYS_C0018465) violated - child record found


PS. Если из таблицы предполагается возможность удаления, parent_id было бы неплохо индексировать.

Это сообщение отредактировал(а) Zloxa - 27.4.2015, 12:22


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.1246 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.