Advertisement
Guest User

lr4

a guest
Oct 23rd, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.19 KB | None | 0 0
  1. #1 - количество поставленных товаров на организацию
  2. create or replace algorithm = temptable view _tmp as select организация.name, sum(поставки.count) as cnt from организация, поставки
  3. where поставки.idорганизации = организация.id
  4. group by поставки.idорганизации;
  5.  
  6. select max(cnt) from _tmp;
  7. select * from _tmp;
  8.  
  9. #1 - вывод поставок на организацию
  10. create or replace algorithm = undefined view tab as select организация.name, count(поставки.count) as cnt from организация, поставки
  11. where поставки.idорганизации = организация.id
  12. group by поставки.idорганизации;
  13.  
  14. select * from tab;
  15.  
  16. #2 - обновляемое представление, не позволяющее выполнить insert
  17. create or replace algorithm = merge view w (idтоварa, name, bonus) as select idтовара, name, (count+3) from товар;
  18.  
  19. select * from w;
  20. insert into w (idтоварa, name, bonus) values(77, 'jjj', 777);
  21.  
  22. #3 - обновляемое представление, позволяющее выполнить insert
  23. create or replace algorithm = merge view w (id, _name, _count) as select idтовара, name, count from товар
  24. where name like 'IPhone X%';
  25.  
  26. select * from w;
  27.  
  28. #4 - Создать вложенное обновляемое представление с проверкой ограничений (WITH CHECK OPTION)
  29. create or replace view _w as select id, _name, _count from w
  30. where _name like 'IPhone X%'
  31. with cascaded check option; # if local, то заносится в таблицу
  32.  
  33. insert into _w (id, _name, _count) values(13,'IPhone XS', 1);
  34.  
  35. select max(_count) from _w;
  36. select * from _w;
  37.  
  38. #5
  39. delimiter //
  40. create trigger trg
  41. after delete on организация
  42. for each row
  43. begin
  44. delete from поставки where поставки.idорганизации = old.id;
  45. end;
  46. //
  47.  
  48. delimiter ;
  49.  
  50. drop trigger trg;
  51.  
  52. insert into организация values(6, 'ggg', 'Rostov');
  53. insert into поставки values(6, 3, '2019-03-09', 9);
  54.  
  55. SET FOREIGN_KEY_CHECKS=0;
  56. delete from организация where id = 6;
  57. SET FOREIGN_KEY_CHECKS=1;
  58.  
  59. #6
  60. delimiter //
  61. create trigger _t before update on склад
  62. for each row
  63. begin
  64. if new.numячейки < 0 then signal sqlstate '45000' set message_text = 'error';
  65. elseif new.numячейки >= 0 then set new.numячейки = new.numячейки;
  66. end if;
  67. end;
  68. //
  69.  
  70. delimiter ;
  71.  
  72. drop trigger _t;
  73.  
  74. SET FOREIGN_KEY_CHECKS=0;
  75. update склад set numячейки = 55 where idтовара = 2;
  76. SET FOREIGN_KEY_CHECKS=1;
  77.  
  78. #7
  79. delimiter //
  80. create trigger trig
  81. before insert on склад
  82. for each row
  83. begin
  84. update товар set count = (count + 1) where товар.idтовара = new.idтовара and new.idтовара in (select idтовара from склад);
  85. end;
  86. //
  87.  
  88. delimiter ;
  89.  
  90. insert into товар values(10, 'iPhone 7', 1);
  91. insert into склад values(10,68);
  92. update товар set count = 2 where idтовара = 10;
  93.  
  94. drop trigger trig;
  95.  
  96. SET FOREIGN_KEY_CHECKS=0;
  97. insert into склад values(2, 75);
  98. SET FOREIGN_KEY_CHECKS=1;
  99.  
  100. #8.1
  101. delimiter //
  102. create trigger t1
  103. before insert on товар for each row
  104. begin
  105. if new.count < 0 then signal sqlstate '45000' set message_text = 'error';
  106. elseif new.count > 0 then set new.idтовара = new.idтовара, new.name = new.name, new.count = new.count;
  107. end if;
  108. end;
  109. //
  110. delimiter ;
  111.  
  112. drop trigger t1;
  113.  
  114. SET FOREIGN_KEY_CHECKS=0;
  115. insert into товар values(6, 'iPad mini', 3);
  116. SET FOREIGN_KEY_CHECKS=1;
  117.  
  118. #8.2
  119. delimiter //
  120. create trigger t2
  121. before insert on товар for each row
  122. begin
  123. if new.count >= 10 then signal sqlstate '45000' set message_text = 'error';
  124. elseif new.count < 10 and new.count > 0 then set new.idтовара = new.idтовара, new.name = new.name, new.count = new.count;
  125. end if;
  126. end;
  127. //
  128. delimiter ;
  129.  
  130. drop trigger t2;
  131.  
  132. SET FOREIGN_KEY_CHECKS=0;
  133. insert into товар values(6, 'iPad mini', 3);
  134. SET FOREIGN_KEY_CHECKS=1;
  135.  
  136. #9.1
  137. delimiter //
  138. create trigger _instime
  139. after insert on товар for each row
  140. follows t1
  141. begin
  142. insert into new_table
  143. (
  144. операция,
  145. data,
  146. idтовара_до,
  147. имя_товара_до,
  148. count_до,
  149. idтовара_после,
  150. имя_товара_после,
  151. count_после
  152. )
  153. values
  154. (
  155. 'Вставка',
  156. sysdate(),
  157. null,
  158. null,
  159. null,
  160. new.idтовара,
  161. new.name,
  162. new.count);
  163. end;
  164. //
  165. delimiter ;
  166.  
  167. drop trigger _instime;
  168.  
  169. SET FOREIGN_KEY_CHECKS=0;
  170. insert into товар values(7, 'iPhone XR', 1);
  171. insert into товар values(9, 'iPhone 8', 1);
  172. insert into склад values(9,27);
  173. SET FOREIGN_KEY_CHECKS=1;
  174.  
  175. #9.2
  176. delimiter //
  177. create trigger _upd
  178. after update on товар for each row
  179. begin
  180. insert into new_table
  181. (
  182. операция,
  183. data,
  184. idтовара_до,
  185. имя_товара_до,
  186. count_до,
  187. idтовара_после,
  188. имя_товара_после,
  189. count_после
  190. )
  191. values
  192. (
  193. 'Обновление',
  194. sysdate(),
  195. old.idтовара,
  196. old.name,
  197. old.count,
  198. new.idтовара,
  199. new.name,
  200. new.count);
  201. end;
  202. //
  203. delimiter ;
  204.  
  205. drop trigger _upd;
  206.  
  207. update товар set name = 'iPhone 6s' where idтовара = 3;
  208.  
  209. #9.3
  210. delimiter //
  211. create trigger _del
  212. after delete on товар for each row
  213. begin
  214. insert into new_table
  215. (
  216. операция,
  217. data,
  218. idтовара_до,
  219. имя_товара_до,
  220. count_до,
  221. idтовара_после,
  222. имя_товара_после,
  223. count_после
  224. )
  225. values
  226. (
  227. 'Удаление',
  228. sysdate(),
  229. old.idтовара,
  230. old.name,
  231. old.count,
  232. null,
  233. null,
  234. null);
  235. end;
  236. //
  237. delimiter ;
  238.  
  239. drop trigger _del;
  240.  
  241. SET FOREIGN_KEY_CHECKS=0;
  242. delete from товар where idтовара = 7;
  243. SET FOREIGN_KEY_CHECKS=1;
  244.  
  245. delete from товар where idтовара = 9;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement