取引、ビュー、トリガ、ストアドプロシージャ、関数、バックアップ

業務

重要なのです

トランザクション(トランザクション)は、データベースにアクセスして各種データ入力プログラム実行部(ユニット)を更新することができます。取引は通常、書かれた高度なデータベース操作言語やユーザプログラムのプログラミング言語の実装によって引き起こされます。総務は、トランザクション(開始で始まる
トランザクションを)し、すべての操作は、トランザクション(トランザクション終了)は、組成物の端部との間に行きました。

人気の用語は、トランザクションが成功するか、両方が失敗したのいずれかに実行される一連の操作を指します。

理論的根拠:

MySQLのトランザクションが一時的に直接ではなく、データシート(更新)に、保存された統合管理(ストレージエンジンINNODB)、ユーザによる操作を可能にする、続行する前に結果を確認した後まで待ちます。

使用

start transaction;
sql 语句
commit(成功提交)/rollback(回滚,清空操作);

例:

--模拟银行转账

--先准备数据
create table user(
    id int auto_increment primary key,
    name varchar(32) not null default '',
    salary int not null default 0
)charset utf8;

insert into user(name,salary) values ('cwz',1000),('张三',2000);

--开启事务
start transaction;

--修改数据
update user set salary=1800 where name='张三';
update user set salary=1200 where name='cwz';

--提交
commit;   # 这样整个事务结束,上述修改数据的操作才会生效




--若是不想让操作生效,在修改数据操作后
rollback;  # 此时整个事务结束,上述所有操作不执行

取引の特徴

  • 最小の原子の粒子、すなわち、細分化されないトランザクションを意味アトミック(不可分)。開始トランザクションからトランザクションプレイが(コミットまたはロールバック)トランザクションをコミット、どちらかのすべての操作が成功するか、すべての操作が失敗したこと。
  • 一貫性(整合性):データの総量が依然として一致し、発生前と後に発生した取引を指します。
  • 絶縁(アイソレーション):簡単に言えば:トランザクションの動作は、他のトランザクションからは見えません
  • 永続性(耐久性):トランザクションが完了すると、その影響を保持する必要があるが、のみで前にエラーを相殺するために、元に戻すことはできません「補償業務。」

ストレージエンジン

InnoDBテーブルとMyISAMテーブル

テーブルのストレージエンジンの際に建設を指定

create table user(
    id int auto_increment primary key,
    name varchar(32) not null default ''
)engine=InnoDB charset utf8;

上記MySQL5.5では、InnoDBがデフォルトです

InnoDBエンジンとMyISAMの2つの違い:

  1. InnoDBはトランザクションをサポートし、MyISAMテーブルは、トランザクションをサポートしていません。
  2. InnoDBは、行ロック、MyISAMの支持テーブルロックをサポートしています

ビュー

ビューを作成します。

create view 视图名 as SQL语句;

--例子:
create view v1 as select * from user;

ビューを削除します。

drop view vi;

ビュービュー

select * from v1;

トリガー

场景:
    当我下一个订单的时候, 订单表中需要增加一个记录, 同时库存表中需要减1
    这两个操作是同时发生的,  并且前一个操作出发后一个操作

どのように使用するには:

mysql> delimiter //
mysql> create trigger tri_t22_t33 before insert on t22 for each row
    -> begin
    -> insert into t33 (name) values ('aa');
    -> end //
Query OK, 0 rows affected (0.02 sec)

mysql> delimiter ;

insert into t22 (name) valuess

ビュー:

show triggers \G

*************************** 1. row ***************************
             Trigger: tri_t22_t33
               Event: INSERT
               Table: t22
           Statement: begin
insert into t33 (name) values ('asd');
end
              Timing: BEFORE
             Created: 2019-11-01 18:59:20.19
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
             Definer: cwz@%
character_set_client: gbk
collation_connection: gbk_chinese_ci
  Database Collation: latin1_swedish_ci

ストアドプロシージャ

SQL関数のように

初出:

delimiter //
create procedure p1()
begin
    select * from user where id=2;
end //

delimiter;

削除:

drop procedure p1;

機能

--返回字符串长度
select char_length('cwzadas');

--字符串拼接
select concat('hello','world');

--format(X, D)  将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若  D 为 0, 则返回结果不带有小数点,或不含小数部分。
select format(12312.236,2);


--返回字符串 str 中子字符串的第一个出现位置。
INSTR(str,substr)

--返回字符串str 从开始的len位置的子序列字符。
LEFT(str,len)

--变小写
LOWER(str)

--变大写
UPPER(str)

--返回字符串 str ,其引导空格字符被删除。
LTRIM(str)

--返回字符串 str ,结尾空格字符被删去。
RTRIM(str)

--获取字符串子序列
SUBSTRING(str,pos,len)

--获取子序列索引位置
LOCATE(substr,str,pos)

--返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。
--若 count <= 0,则返回一个空字符串。
--若str 或 count 为 NULL,则返回 NULL 。
REPEAT(str,count)


--返回字符串str 以及所有被字符串to_str替代的字符串from_str 
REPLACE(str,from_str,to_str)


--返回字符串 str ,顺序和字符顺序相反。
REVERSE(str)


--从字符串str 开始,返回从后边开始len个字符组成的子序列
RIGHT(str,len)

データベースのバックアップ

# 语法
mysqldump -h 服务器 -u用户名 -p密码 数据库名 表名,  表名,.... > aaa.sql

#示例:

#单库备份
mysqldump -uroot -p123 db1 > db1.sql
mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql

#多库备份
mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql

#备份所有库
mysqldump -uroot -p123 --all-databases > all.sql
        
            
# 导入:
mysql> source D:/test3.sql;

おすすめ

転載: www.cnblogs.com/setcreed/p/11783710.html