powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
7 сообщений из 7, страница 1 из 1
MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
    #33461173
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется следующая БД:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
create table firstk
(
id bigint unsigned not null auto_increment,
name char( 20 ),
primary key(id)
)type = InnoDB;

create table secondk
(
id bigint unsigned not null auto_increment,
fktest bigint unsigned,
name char( 20 ),
primary key(id),
foreign key(fktest) references firstk(id) on update cascade,
foreign key(fktest) references firstk(id) on delete set null
)type = InnoDB;

create table main_table
(
id bigint unsigned not null auto_increment,
fktest1 bigint unsigned, 
sktest1 bigint unsigned,
param_test double( 15 , 5 ) not null,
primary key(id),

foreign key(fktest1) references firstk(id) on update cascade,
foreign key(fktest1) references firstk(id) on delete set null,
foreign key(sktest1) references secondk(id) on update cascade,
foreign key(sktest1) references secondk(id) on delete set null
)type = InnoDB;

как сделать так, чтобы при вставке в таблицу
main_table запись проверялась на следующие условия:

1) в таблице second запись номер main_table.sktest должна иметь значение
поля fktest равным значению main_table.fktest1

2) main_table.param_test должен равняться const/main_table.firstk

если запись неудовлетворяет условиям, вставка должна быть отменена.
...
Рейтинг: 0 / 0
MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
    #33461216
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в триггере после вставки main_table я прописал следующее:
if const/new.firstk<> new.param_test then delete from main_table where main_table_id= new.id.
не заработало.
...
Рейтинг: 0 / 0
MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
    #33464193
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решено.
если кому интересно-
могу рассказать как я это сделал
...
Рейтинг: 0 / 0
MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
    #33464274
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>могу рассказать как я это сделал
рассказывайте.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
    #33465044
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наткнулся на ссылки
http://dev.mysql.com/tech-resources/articles/evaluating-mysql-5.0-rus.html
http://dev.mysql.com/tech-resources/articles/mysql-storedprocedures.pdf
http://dev.mysql.com/tech-resources/articles/mysql-views.pdf
http://dev.mysql.com/tech-resources/articles/mysql-triggers.pdf
...
Рейтинг: 0 / 0
MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
    #33465055
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
далее
1) я попытался воспользовался курсорами.
из триггера это не завелось почему-то, и я решил написать функцию проверки.
Она получает входной параметр - первичный ключ таблицы secondk, а
возвращает соответствующий ему fktest в этой же таблице.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE FUNCTION `test_key_secondk`(pk BIGINT)
    RETURNS BIGINT
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
DECLARE buf BIGINT UNSIGNED;
DECLARE CURMY CURSOR FOR SELECT 'secondk'.'fktest' FROM 'secondk' WHERE  'secondk'.'id'=pk;
OPEN CURMY;
FETCH CURNAME INTO buf;
RETURN buf;
END; 

ЗАМЕЧАНИЕ
сначала надо объявить переменные попроще, типа целые, после этого курсоры, наоборот будет ругаться матом. Запрос в курсоре ВСЕГДА возвращает одну запись для указанной БД
...
Рейтинг: 0 / 0
MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
    #33465069
ОКТОГЕН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
работающая функция
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE FUNCTION `testkey_secondk`(fk BIGINT)
    RETURNS bigint( 20 )
    NOT DETERMINISTIC
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
DECLARE buf BIGINT UNSIGNED;
DECLARE cru CURSOR FOR SELECT secondk.fktest FROM secondk
WHERE  secondk.id=fk;
OPEN cru;
FETCH cru INTO buf;
CLOSE cru;
RETURN buf;
END;
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MySQL 5.0.16 тригеры, процедуры, функции - сложная проверка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]