事务视图存储过程触发器数据备份

事务

通俗的说,事物指一组操作,要么都执行成功,要么都执行失败

使用事务:
    start transactino
        sql语句
    commit/rowllback
 
# 演示:
mysql> select * from t1;

+----+------+--------+
| id | name | salary |
+----+------+--------+
|  1 | aa   |   1000 |
|  2 | bb   |   2000 |
|  3 | dd   |   3000 |
+----+------+--------+

mysql> start transaction;
mysql> update t1 set salary=100 where name='aa';
mysql> select * from t1;
+----+------+--------+
| id | name | salary |
+----+------+--------+
|  1 | aa   |    100 |
|  2 | bb   |   2000 |
|  3 | dd   |   3000 |
+----+------+--------+
3 rows in set (0.00 sec)
mysql> commit;

事务的特性

原子性(Atomicity):

原子意为最小的粒子,即不能再分的事务,要么全部执行,要么全部取消

一致性(Consistency):

指事务发生前和发生后,数据的总额依然匹配#

隔离性(Isolation):

简单点说,某个事务的操作对其他事务不可见的#

持久性(Durability):

当事务完成后,其影响应该保留下来,不能撤消,只能通过“补偿性事务”来抵消之前的错误

存储引擎

InnoDB :保时捷引擎

Innodb 支持事务,支持行锁,颗粒型查找

MyIsam:奔奔引擎

MyIsam 不支持事务,支持表锁

# 建表的时候
create table user (
    id int auto_increment primary key,
    name varchar(32) not null default'',
    salary int not null default 0 
)engine=Innodb charset utf8

视图

使用

比如项目有100个SQL,其中80个SQL都是select * from user where name='xxx';

增加视图

create view 视图名 as SQL语句;

删除视图

drop view 视图名

触发器

# 两张表:
# 订单表     库存表
# 场景:
#   当我下一个订单的时候, 订单表中需要增加一个记录, 同时库存表中需要减1
#   这两个操作是同时发生的,  并且前一个操作出发后一个操作
#
# 使用方法:
#   增加:
        delimiter //
        create trigger 触发器名 before insert on t2 for each row
        begin
            insert into t3(name) values('aa');
        end//
        delimiter ;
### 当向tb1表中添加一条数据的同时, 向tb2表添加一条数据

#   删除
        drop trigger 触发器名称;

存储过程

像一个SQL函数

创建

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

call p1()

函数

#       CHAR_LENGTH(str)
#           返回值为字符串str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。
#           对于一个包含五个二字节字符集, LENGTH()返回值为 10, 而CHAR_LENGTH()的返回值为5。
#
#       CONCAT(str1,str2,...)
#           字符串拼接
#           如有任何一个参数为NULL ,则返回值为 NULL。

#       FORMAT(X,D)
#           将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形             式返回。若  D 为 0, 则返回结果不带有小数点,或不含小数部分。
#           例如:
#               SELECT FORMAT(12332.1,4); 结果为: '12,332.1000'

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

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

#       LOWER(str)
#           变小写

#       UPPER(str)
#           变大写

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

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

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

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

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

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

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

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

数据库的备份

语法

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

示列

# 单库备份
    mysqldump -uroot -p123 db1 > db.sql
    mysqldump -uroot -p123 table1 table2 >db1-table-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/hj59988326/p/11778733.html