mysql関数、トランザクション、ビュー、トリガー

1.機能

CREATE FUNCTION f_name(paramters) returns dataType; return value; 

パラメータはでのみ入力できます。入力パラメータパラメータ名タイプに
は戻り値が必要です。開始リターン
と終了
リターンは追加できません。戻り値タイプはここでは追加されません。
リターンは返される値です。
例:2つの数値を追加します。

create function addfuntion(a int,b int) 
returns int return a + b; 
#执行函数 
select addfuntion(1,1); 

注:この
関数は1つの値のみを返すことができます。この
関数は通常、データの追加、削除、変更、およびチェックを含みません。これは一般的な関数です。
カスタム関数の呼び出しは、呼び出し元のシステムと一貫性があります。呼び出しは必要ありません。selectを使用して戻り値を取得します
。関数でSQLステートメント
使用することはできません。
count()、sum()、avg()、max()、min()など、javaで認識できないSQLステートメントと同じです。

2.事務

トランザクションは、同時に成功または失敗する分割できないユニットのグループです
。トランザクションの前後のデータの整合性は一貫している必要があります。
複数のユーザーが同時にデータにアクセスする場合、1人のユーザーのトランザクションが他のユーザーのトランザクションによって妨害されることはありません。複数の同時トランザクション間のデータは、互いに分離する必要があります。
送信されたものは、データへの変更が永続的であり、データベースに障害が発生した場合でも、影響を与えることはありません。

MySQLでは、Innodbデータベースエンジンを使用するデータベースまたはテーブルのみがトランザクションをサポートします。BEGIN
、ROLLBACK、COMMITを使用して、BEGIN
がトランザクションを開始することを実現し
ます。ROLLBACKトランザクションロールバック
COMMITトランザクションの確認

pythonの例:

import pymysql

try:
conn = pymysql.connect(host="ip",user="user",password="password",db="test1")
print("连接服务器成功!")

cursor = conn.cursor()
sql = "update student set name = \"jack2\" where s_id = 2 ;"
sql2 = "update student set name = rose21 where s_id = 3;" # money打错了将导致执行失败
try:
cursor.execute(sql)
cursor.execute(sql2)
conn.commit()
print("执行成功 提交")
except:
print("发送错误 回滚..")
conn.rollback()

except Exception as e:
print("连接服务器失败.....")
print(type(e),e)
finally:
if cursor:cursor.close()
if conn:conn.close()

スリービュー

ビューを使用して、データのアクセス許可を制御したり、接続クエリを簡素化したりできます。ビューへの追加、削除、変更は元のテーブルに同期されますが、ビューは通常フィールドの一部であるため、通常は失敗します。
ビューは仮想テーブルであるため、使用法は通常と同じです。テーブルは何の違いもありません

ビューを作成して、データフィールドのアクセス許可を制御したり、複数のテーブルのクエリステートメントを簡略化したりします

CREATE VIEW car_location (车架号,layer,地区) as 
SELECT 
vehicle_purchase_invoice.frame_num,vehicle_purchase_invoice.layer,sys_location.name
from vehicle_purchase_invoice,sys_location
WHERE vehicle_purchase_invoice.layer = sys_location.layer;
#查看视图 
SELECT * from car_location WHERE 车架号 ='20B0062R9Y2548197';
#删除视图
DROP VIEW car_location;

第四に、トリガー

1.データを準備します

CREATE TABLE cmd (
id INT PRIMARY KEY auto_increment,
USER CHAR (32),
priv CHAR (10),
cmd CHAR (64),
sub_time datetime, #提交时间
success enum ('yes', 'no') #0代表执行失败
);

2.エラーログテーブル

CREATE TABLE errlog (
id INT PRIMARY KEY auto_increment,
err_cmd CHAR (64),
err_time datetime
);

3.トリガーを作成します

delimiter //
create trigger trigger1 after insert on cmd for each row
FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器,也就是说触发器的触发频率是针对每一行数据触发一次。
begin
if new.success = "no" then
insert into errlog values(null,new.cmd,new.sub_time);
end if;
end//
delimiter ;

DROP trigger trigger1;

4.テーブルcmdにレコードを挿入し、トリガーをトリガーして、IFの条件に従ってエラーログを挿入するかどうかを決定します。

INSERT INTO cmd (
USER,
priv,
cmd,
sub_time,
success
)
VALUES
('egon','0755','ls -l /etc',NOW(),'yes'),
('egon','0755','cat /etc/passwd',NOW(),'no'),
('egon','0755','useradd xxx',NOW(),'no'),
('egon','0755','ps aux',NOW(),'yes');

5.エラーログテーブルのレコードが自動的に挿入されるかどうかを確認します

select *from errlog;

おすすめ

転載: blog.csdn.net/Krystal_RonghuiLi/article/details/108000089