MYSQL事务、视图、索引、备份恢复

一、事务 

      MySQL的事务处理在处理实际问题中有着广泛且重要的应用,最常见的应用如银行转账业务、电子商务支付业务等等。但是,值得注意的是,MySQL的事务处理功能在MYSIAM存储引擎中是不支持的,在InnoDB存储引擎中是支持的。

原子性:事务处理时里面的几个DML语句是一个整体,不能单独执行其中一条,要么全部成功,要么全部结束   

一致性:确保数据库正确地改变状态后,成功提交的事务.要么都是改变前的状态,要么都是改变后的状态。   

隔离性:一个数据库中会存在很多的事务处理,每个事务之间不会相互影响。 一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务隔离、彼此独立的和透明的

持久性:事务成功提交后则数据就永久被修改并保留。如果是回滚了,则相当于没有操作过。事务结束后,必须重新启动一个新的事务才能修改数据。

1.网上支付案例

#事务的操作
DROP DATABASE IF  EXISTS dafeng ;
CREATE DATABASE IF NOT EXISTS dafeng;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
#建表
CREATE TABLE bank(
custname VARCHAR(10),
currentMoney DECIMAL(9,2)
)ENGINE INNODB;
INSERT INTO bank(custname,currentMoney)VALUE ('张三',1000);
INSERT INTO bank(custname,currentMoney)VALUE ('李四',3000);

#用事务解决转账问题
SET autocommit=0;
START TRANSACTION;#begin;
UPDATE bank SET currentMoney =currentMoney-500 WHERE custname='张三';
UPDATE bank SET currentMoney =currentMoney+500 WHERE custname='李四';
COMMIT;#提交
#ROLLBACK;#回退,撤销
SET autocommit=1;
#操作表
SELECT *FROM bank;
DROP 
TABLE bank;

二.添加索引

CREATE TABLE `student` (
  `StudentNo` INT(4) NOT NULL COMMENT '学号',
  `LoginPwd` VARCHAR(20) DEFAULT NULL,
  `StudentName` VARCHAR(20) DEFAULT NULL COMMENT '学生姓名',
  `Sex` TINYINT(1) DEFAULT NULL COMMENT '性别,取值0或1',
  `GradeId` INT(11) DEFAULT NULL COMMENT '年级编号',
  `Phone` VARCHAR(50) NOT NULL COMMENT '联系电话,允许为空,即可选输入',
  `Address` VARCHAR(255) NOT NULL COMMENT '地址,允许为空,即可选输入',
  `BornDate` DATETIME DEFAULT NULL COMMENT '出生时间',
  `Email` VARCHAR(50) NOT NULL COMMENT '邮箱账号,允许为空,即可选输入',
  `IdentityCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
  PRIMARY KEY (`StudentNo`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;


SHOW  INDEX  FROM sutdent;
ALTER TABLE student ADD PRIMARY KEY(`StudentNo`);
ALTER TABLE student ADD UNIQUE INDEX(IdentityCard);
ALTER TABLE student ADD INDEX (Email);
/*先修改为MyISAM类型数据表*/
ALTER TABLE student ENGINE=MYISAM;
ALTER TABLE student ADD FULLTEXT(StudentName);


 

EXPLAIN语句使用

/* 创建一个表 aricles */
DROP TABLE IF   EXISTS  articles; 
CREATE TABLE  IF NOT EXISTS articles (
      id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
      title VARCHAR(200), 
      body TEXT,
      FULLTEXT (title,body)
 )ENGINE = MYISAM;

 
INSERT INTO articles (title,body) VALUES
     ('MySQL Tutorial','DBMS stands for DataBase ...'),
     ('How To Use MySQL Well','After you went through a ...'),
     ('Optimizing MySQL','In this tutorial we will show ...'),
     ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
     ('MySQL vs. YourSQL','In the following database comparison ...'),
     ('MySQL Security','When configured properly, MySQL ...');


 INSERT INTO articles (title,body)  ( SELECT title,body FROM articles);



/* 使用全文索引查询 */
SELECT * FROM articles  WHERE MATCH (title,body) AGAINST ('database');
   

/*EXPLAIN 函数 分析 select  语句*/

EXPLAIN SELECT * FROM articles  WHERE MATCH (title,body) AGAINST ('databa
se') \G

/*结果*/
/* 
mysql> EXPLAIN SELECT * FROM articles  WHERE MATCH (title,body) AGAINST ('databa
se') \G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: articles
         type: fulltext
possible_keys: title
          key: title
      key_len: 0
          ref:
         rows: 1
        Extra: Using where
1 row in set (0.00 sec)
*/


/*不使用全文检索*/
 EXPLAIN SELECT * FROM articles  WHERE  title like '%databa%' or body like "%databa%" \G;

/*
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: articles
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 6
        Extra: Using where
1 row in set (0.00 sec)

ERROR:
No query specified


*/

三、数据恢复和备份

1 (1) mysqldump备份   **:mysqldump和mysql同级的命令 mysqldump --help|more  帮助你查看mysqldump的可选参数

   (2)source命令恢复  mysql>use test;  

            mysql>source 脚本路径

mysql命令恢复

mysql -uroot -pkgc test<脚本路径

2  使用SQLyog工具来备份和恢复
注意实现:打钩的选项看清楚,别影响恢复

3  使用SQL命令方式来备份和恢复

#将school数据库student表中的学号、姓名两列备份出去
USE school;

#注意:备份出去的文件不可以提前存在
SELECT studentno,studentname INTO OUTFILE 'h:/chenxuan/student.sql' FROM student;

#将备份出去的数据恢复到test数据库的stutab表中来
USE test;
CREATE TABLE stutab(
    id INT(4),
    sname VARCHAR(20)
)

LOAD DATA INFILE 'h:/chenxuan/student.sql' INTO TABLE stutab(id,sname);

SELECT * FROM stutab;

四、数据的导出和导入

#备份数据库myschool中的student表中的studentno及studentname列到文件myschool3.sql中
USE myschool;
SELECT  studentno,  studentname  INTO  OUTFILE  'e:/myschool3.sql'  FROM  student;

#恢复文件myschool3.sql中的数据到test数据库的t2表中来
USE test;
CREATE TABLE t2(
	id INT(4),
	sname VARCHAR(20)
)
LOAD  DATA  INFILE  'e:/myschool3.sql'  INTO  TABLE  t2(id, sname);

SELECT * FROM t2;

六、视图

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。

您可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。

SQL CREATE VIEW 语法

CREATE VIEW view_name AS SELECT column_name(s)
FROM table_name WHERE condition

1.更新视图

SQL CREATE OR REPLACE VIEW 语法

CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name WHERE condition

现在,我们希望向 "Current Product List" 视图添加 "Category" 列。我们将通过下列 SQL 更新视图:

CREATE VIEW [Current Product List] AS SELECT ProductID,ProductName,Category
FROM Products WHERE Discontinued=No
  • schema_name: 视图所属架构的名称。
  • view_name: 要更改的视图。
  • column: 将成为指定视图的一部分的一个或多个列的名称(以逗号分隔)。

2.撤销视图

可以通过 DROP VIEW 命令来删除视图。

SQL DROP VIEW 语法

DROP VIEW view_name

整体回顾:
mysql数据库环境搭建(环境变量  目录)
mysql命令行使用(开启服务、连接数据库、恢复和备份、SQL语句。。。。。。)
DDL(Create、drop)
DML(insert     update    delete)
DQL(select   where  join  group  having  order  limit.....)
事务 索引
数据恢复和备份

猜你喜欢

转载自blog.csdn.net/weixin_43779926/article/details/84442093