MySqlビュー触発器の記憶プロセスの詳細


表示:
一時テーブルを繰り返し使用すると、この仮テーブルに別名を付けて、後で使いやすくなります。ビューを作成することができます。別名はビューの名前です。ビューは仮想のテーブルです。データは物理テーブルから動的に読み取られますので、物理テーブルの変更はビューを変更します。
作成:
create view v 1 as SQL
例えば、create view v 1 as select*from student where sid<10
作成後にmysql端末を使えばv 1というテーブルが見えます。navicateを使えばv 1が生成されたビューが見えます。
再利用の場合は、直接にクエリーテーブルを使用することができます。例えば:select*from v 1
変更:ビューのsql文のみを変更できます。
alter viewビュー名as sql
削除:
drop viewビューの名前
トリガー:
あるテーブルを添削して調べると、フリップフロップを使ってユーザー定義の関連行為ができます。
sql文の終端記号delimiterを修正します。
before after前の後

-- delimiter //
  
-- before  after    (insert   )        
-- on                  
 
-- CREATE TRIGGER t1 BEFORE INSERT on teacher for EACH row
-- BEGIN
-- INSERT into course(cname) VALUES('   ');
-- END //
-- delimiter ;
 
 
-- insert into teacher(tname) VALUES('triggertest111')
--
-- delimiter // 
-- CREATE TRIGGER t1 BEFORE INSERT on student for EACH row
-- BEGIN
-- INSERT into teacher(tname) VALUES('   ');
-- END //
-- delimiter ;
 
 
-- insert into student(gender,sname,class_id) VALUES(' ','1  111',3);
--      
-- drop trigger t1;
 
 
-- NEW   OLD              
-- delimiter //
-- create TRIGGER t1 BEFORE insert on student for each row
-- BEGIN
 
--   new           ,old    delete 
 
-- insert into teacher(tname) VALUES(NEW.sname);
-- end //
-- delimiter ;
insert into student(gender,sname,class_id) VALUES(' ','      ',3);
保存プロセス:
本質的にはsqlの集合であり、これに別名を集合させる。viewとの違いは、ビューがsqlクエリ文であり、テーブルとして扱われています。
方式:
1 msyql----保存プロセスは、プログラムの呼び出しに使用されます。
2 msyql---保存プロセスをしないで、プログラムはsqlを書きます。
3 mysql--格納プロセスを行わず、プログラム作成類と対象(sql文に変換)
作成方法:
--1パラメータなしの格納プロセスを作成する
--delimiter//
--create PROCEURE p 1()
--BEGIN
--select*from student;
--insert into teacher(tname)VALES('ccc')
--end///
--delimiter
--保存プロセスを起動する

 call p2(5,2)<br data-filtered="filtered"><br data-filtered="filtered"><em id="__mceDel"> pymysql  cursor.callproc('p1',(5,2))</em>

--  2     in   
 
-- delimiter //
-- create PROCEDURE p2(
--  in n1 int,
-- in n2 int
-- )
-- BEGIN
--  select * from student where sid<n1;
-- 
-- end //<br data-filtered="filtered"><br data-filtered="filtered"> call p2(5,2)<br data-filtered="filtered"><br data-filtered="filtered"><em id="__mceDel"> pymysql  cursor.callproc('p1',(5,2))</em>

-- 3  out              out              
--           return                 out
-- delimiter //
-- create PROCEDURE p3(
--  in n1 int,
-- out n2 int
-- )
-- BEGIN
--  set n2=444444;
--  select * from student where sid<n1;
-- 
-- end //
--
-- delimiter ;
--
-- set @v1=999       session         
-- set @v1=999; 
-- call p3(5,@v1);
-- select @v1; #         ,                        
 
-- pymsyql 
--  
-- cursor.callproc('p3',(5,2))
-- r2=cursor.fetchall()
-- print(r2)
--
--       out               cursor.execute('select @_p3_0,@_p3_1')
-- #    'select @_p3_0,@_p3_1'      select @_      _      
-- cursor.execute('select @_p3_0,@_p3_1')
-- r3=cursor.fetchall()
-- print(r3)
--
どうして結果集があって、またoutが偽造して帰る価値がありますか?
記憶中に複数のsql文が含まれているので、すべてのsqlが実行されたとは判断できません。outの特性を利用してsqlが実行されたかどうかを識別します。
例えば、成功した場合には、成功した部分の識別2が失敗した場合には、3となる。
保存中のトランザクション:
トランザクション:
原子的操作となる。DMML(insert、udate、delete)文は共同で完成して、物事はDML文と関連していますか?それともロックはDMLしかないです。
事務の特徴:
原子性A:事務は最小単位で、分割できません。
一致性C:事務はすべてのdml文の操作を要求する時、全部の成功または失敗を保証しなければなりません。
隔離性I:事務Aと事務Bの間に分離性がある
耐久性D:事務の保証であり、事務終了のフラグ(メモリ中のデータは完全にハードディスクに保存されています)
トランザクションのキーワード:
オープン事務:start transpaction
事業終了:end transaction
提出事項:comit transaction
ロールバック事務:rollback traction
事務の基本操作

delimiter //
 create procedure p5(
 in n1 int,
 out n2 int
 )
 begin
 1           (
   set n2=1;
   rollback;
  )
  2     
          -100
            +100
        commit
  3   
    set n2=2
   end //
   
   delimiter ;
   
         n2             
  
         
delimiter //
  create procedure p6(
  out code TINYINT
  )
  begin
         sqlexception           
   DECLARE exit HANDLER for SQLEXCEPTION
   begin
    --error
      set code=1;
      rollback;
   end;
   START TRANSACTION;
       delete from tb1;
       insert into tb2(name)values('slkdjf')
   commit;
   ---success
   code=2
   end //
delimiter ;
ラベルの保存中の使用:

delimiter //
create procedure p7()
 begin
    declare row_id int;
     declare row_num int;
     declare done int DEFAULT FALSE;
         
     declare my_cursor cursor for select id,num from A;
                done  True
     declare continue handler for not found set done=True;
     
     
     open my_cursor;      
         xxoo;LOOP        xxoo
            fetch my_cursor into row_id,row_num;
              if done then   done True     
                leave xxoo;
              end if;
              set temp=row_id+row_num;
       insert into B(number)VALUES(temp);
            end loop xxoo;     
      close my_cursor;
    end //
     
delimiter ;
 
 
        python 
for row_id,row_num in my_cursor:
             ,        break
    break
    insert into B(num) values(row_id+row_num)
動的な実行sql、データベースレベルの放置sql注入:

delimiter \\
create procedure p6(
 in nid int)
 begin
  1    (   )     sql     
   2 sql=   tpl+arg
    3   sql
 
  set @nid=nid
    prepare prod from 'select * from student where sid>?'
    EXECUTE prod using @ nid;
    deallocate prepare prod
  end \\
  delimiter ;
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。