|
|
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
Есть таблица books: id quan 1 10 2 5 3 1 1 8 2 3 Нужно триггером запретить вставку определённого id, где есть хоть одна строка с quan = NULL Например, в таблицу books в данном случае запретить вставку строк со значением id = 2 и id = 3, не запрещать вставку строки id = 1 так как нету строки id = 1 с quan = NULL. Пожалуйста, помогите составить условие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2015, 17:57:46 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
drunja, 1) триггер BEFORE INSERT 2) в триггере одна проверка: если EXISTS в BOOKS строка, где ID=NEW.ID и QUAN IS NULL, то выдать SIGNAL о недопустимости INSERT Все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 10:32:07 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
Надежно и только триггером, пожалуй, никак. Сценарий: Сессия 1Сессия 2Начало транзакцииНачало транзакцииINSERT INTO books (id,quan) VALUES (10,NULL)INSERT INTO books (id,quan) VALUES (10,1)COMMITCOMMITВ результате в таблице две записи с NULL и с 1 в поле quan. Пока нет триггеров на COMMIT, защититься от такого сценария невозможно. Как вариант решения - писать свою процедуру, с полной блокировкой таблицы, а прямую запись в таблицу запретить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 10:40:07 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
miksoft, Монстр ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 10:54:51 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 12:34:47 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
скукотища Код: sql 1. Это лишнее. А вообще - против моего сценария не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 12:37:44 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
miksoft, насчет того, что new.quan is null согласен. Я неверно понял ТС. Что триггер не обеспечит выполнение ограничения при инсертах из разных сессий полгостью согласен. Возражу только о необходимости полной блокировки таблицы - можно использовать lock (не знаю как оно по-русски в контексте MySQL). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 13:18:56 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
скукотищаВозражу только о необходимости полной блокировки таблицы - можно использовать lock (не знаю как оно по-русски в контексте MySQL).Это как замок, который помогает только от честного человека. Если таблицу модифицирует только доверенное приложение, отлаженное в достаточной степени, тогда - да, GET_LOCK() может помочь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 13:23:13 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
miksoft, GET_LOCK() разрешен в хранимых процедурах / функциях, LOCK_TABLES - нет (MySQL 5.5). И получется, что LOCK_TABLES это как замок, который помогает только от честного человека... :'( и как с этим жЫть... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 14:16:58 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
скукотищаLOCK_TABLES - нетХм, действительно. "Ненавижу компьютеры!" (с) Один из сотрудников с моей работы. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 15:18:32 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
скукотища Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Работает. Благодарю, в самую точку! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:31:05 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
drunjaРаботает.В единственной сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 17:37:46 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
miksoftскукотища Код: sql 1. Это лишнее. А вообще - против моего сценария не поможет. Так же меня интересует, Код: sql 1. при нем я так понимаю нельзя вставлять в строку только id, а обязательно id и quan. Но у меня это не работает, могу вставлять таким запросом Код: sql 1. 2. 3. и запрет триггера не срабатывает, как сделать чтоб он срабатывал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 18:44:43 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
drunjaпри нем я так понимаю нельзя вставлять в строку только id, а обязательно id и quanФормулировка некорректна. В реляционных СУБД нельзя вставлять отдельное поле, всегда вставляется запись со всеми полями целиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 18:49:03 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
> drunja, > при нем я так понимаю нельзя вставлять в строку только id, а обязательно id и quan. Понимаете неправильно Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. > ... и запрет триггера не срабатывает, как сделать чтоб он срабатывал? закоментировать часть Код: sql 1. НО ЭТО НЕ РЕШАЕТ ПРОБЛЕМУ конкуретного добавление записей из разнючих сессий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 20:08:04 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
скукотища> drunja, -- то проверить наличие записи с ИД равным ИД добавляемой записи и пустым полем `quan` Как заменить "то" на "и", чтоб было 2 условия: Первое условие if exists (select 'x' from books where id = new.id and quan is null) - с этим разобрались. Второе условие new.quan is null как сделать чтоб оно работало? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 20:18:25 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
скукотища, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. По отдельности всё работает, а так чтоб в одном триггере было 2 условия как сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 20:32:43 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
drunja, про OR читать не приходилось? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 20:53:33 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
> drunja, > Как заменить "то" на "и", чтоб было 2 условия: > {skipped,reason:многа вроде-бы и понятных букав но смысл ускользает} > По отдельности всё работает, а так чтоб в одном триггере было 2 условия как сделать? $#%$!& .... Отсюда 18157968 . Код убран, оставлены только комментарии. Почти все. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 21:03:35 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
Cygapb-007 ОФФ> drunja, про OR читать не приходилось? ... не читатель, ... стихийный копи-пастер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 21:08:55 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
скукотища, Разобрался Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 21:17:12 |
|
||
|
Триггер с условием запрета insert
|
|||
|---|---|---|---|
|
#18+
drunja, уточни, выполнение каких ты хочешь добиться. Для упрощения представим, что в таблицу только одно поле QUAN. Тебе надо: - запретить наличие более одной "пустой" одной записи или - после добавления первой "пустой" записи запретить добавление новых записей до тех пор, пока "пустая" запись не будет заполнена либо удалена или - что-то совсем другое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2015, 21:20:12 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39052699&tid=1832709]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
75ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 423ms |

| 0 / 0 |
