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前の後
本質的には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
--保存プロセスを起動する
記憶中に複数の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
事務の基本操作
一時テーブルを繰り返し使用すると、この仮テーブルに別名を付けて、後で使いやすくなります。ビューを作成することができます。別名はビューの名前です。ビューは仮想のテーブルです。データは物理テーブルから動的に読み取られますので、物理テーブルの変更はビューを変更します。
作成:
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 ;
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。