当前位置: 澳门新濠3559 > 数据库 > 正文

要么都不执行澳门新濠3559

时间:2019-12-27 19:58来源:数据库
事务 关于MySQL 事务,视图,索引,数据库备份,恢复,mysql数据库备份 CREATE DATABASE `mybank`; /*创建表*/ USE mybank; CREATE TABLE `bank`(     `customerName` CHAR(10),        #用户名     `currentMoney` DEC

                事务

关于MySQL 事务,视图,索引,数据库备份,恢复,mysql数据库备份

CREATE DATABASE `mybank`;
/*创建表*/
USE mybank;
CREATE TABLE `bank`(
    `customerName` CHAR(10),        #用户名
    `currentMoney` DECIMAL(10,2)         #当前余额
);
/*插入数据*/
INSERT INTO `bank` (`customerName`,`currentMoney`) VALUES ('张三',1000);
INSERT INTO `bank` (`customerName`,`currentMoney`) VALUES ('李四',1);

 

  2. --转账测试:张三希望通过转账,直接汇钱给李四500元

UPDATE `bank` SET `currentMoney` =`currentMoney`-500
    WHERE `customerName` = '张三';
UPDATE `bank` SET `currentMoney` =`currentMoney`+500
    WHERE `customerName` = '李四';

 

 3. 执行事务 并提交事务

USE mybank;

/*设置结果集以gbk编码格式显示*/
SET NAMES gbk;

/*开始事务*/
BEGIN;
UPDATE `bank` SET `currentMoney` =`currentMoney`-500
    WHERE `customerName` = '张三';
UPDATE `bank` SET `currentMoney` =`currentMoney`+500
    WHERE `customerName` = '李四';
COMMIT;        #提交事务,写入硬盘

 

 

 4. 开始事务  回滚事务
BEGIN;
UPDATE `bank` SET `currentMoney` = `currentMoney` -1000 WHERE `customerName` = '张三';
/*回滚*/
ROLLBACK;

 

5.设置自动提交关闭或开启

/*关闭事务自动提交*/
SET autocommit = 0;

/*转账*/
UPDATE `bank` SET `currentMoney` =`currentMoney`-500
    WHERE `customerName` = '张三';
UPDATE `bank` SET `currentMoney` =`currentMoney`+500
    WHERE `customerName` = '李四';
    /*提交*/
COMMIT;
UPDATE `bank` SET `currentMoney` = `currentMoney` -1000 WHERE `customerName` = '张三';

/*回滚事务*/
ROLLBACK;

 

 6. 创建视图

/*当前数据库*/
USE myschool;

DROP VIEW IF EXISTS `view_student_result`;

/*创建视图*/
CREATE VIEW `view_student_result`
AS

/*需要创建视图的数据*/
SELECT `studentName`要么都不执行澳门新濠3559。 AS 姓名,student.`studentNo` 学号,`studentResult` AS 成绩,`subjectName` AS 课程名称.`examDate` AS 考试日期
FROM `student`
INNER JOIN `result` ON `student`.`studentNo` = `result`.`studentNo`
INNER JOIN `subject` ON `result`.`subjectNo` = `subject`.`studentNo`
WHERE `subject`.`subjectNo`=(
    SELECT `subjectNo` FROM `subject` WHERE `subjectName` = 'Logic Java'
)AND `examDate` =(
    SELECT MAX(`examDate`) FROM `result`.`subject` WHERE `result`.`subjectNo` = `subject`.`subjectNo`
    AND `subjectName` = 'Logic Java'
);

 

7. 创建索引

USE myschool;

/*创建索引*/
CREATE INDEX `index_student_studentName`
ON `student`(`studentName`);

 

 

8. 使用DOS命令备份数据库

mysqldump -u username -h -ppassword

dbname[tbname1 [,tbname2]........] > filename.sql

 

例:

mysqldump -u root -p myschool student > d:backupmyschool.sql

EnterPassword:

 

9. 使用后DOS命令恢复数据库

  1) .恢复数据库前先在MySQL服务器中创建新的数据库.

  2). 执行 mysql -u username -p [dbname]  <filename.sql

 

例:

mysql -u root -p schoolDB <  d:backupmyschool.sql

 

10. 使用source命令恢复数据库

  语法:   source  filename;

 

例:

/*创建数据库*/
CREATE DATABASE myschoolDB2;
USE myschoolDB2;
/*恢复数据库*/
source 'd:backupmyschool.sql';

 

11. 将表数据导出到文本文件

 语法: select 列名 from 表名 [where 条件,条件2......]

into outfile 'filename' ;

 

例:

SELECT * FROM `result` WHERE `subjectNo` = 

  (SELECT  `subjectNo` FROM `subject`  WHERE `subjectName` = 'Logic Java')

  INTO OUTFILE 'd: /backup/result.txt';

 

 

12. 将文本文件导入到数据表

语法: LOAD DATA INFILE 'filename' INTO TABLE 'tablename ';

  1) . 先创建导入数据的表结构

    USE myschoolDB2;
    /*创建result表结构*/
    CREATE TABLE `result`
    (
    `studentNo` INT(4) NOT NULL COMMENT '学号',
    `subjectNo` INT(4) NOT NULL COMMENT '课程编号',
    `examDate` DATETIME NOT NULL COMMENT '考试日期',
    `studentResult` INT(4) NOT NULL COMMENT '考试成绩',
    PRIMARY KEY (`studentNo`,`subjectNo`,`examDate`)
    )ENGINE = INNODB DEFAULT CHARSET utf8;

  2).导入数据
    LOAD DATA INFILE '路径.txt' INTO TABLE result;
    /*查看result表数据*/
    SELECT * FROM result;

 

事务,视图,索引,数据库备份,恢复,mysql数据库备份 CREATE DATABASE `mybank`; /*创建表*/ USE mybank; CREATE TABLE `bank`( `customerName` CHAR(10), #用户...

1.概念

一条或者多条sql语句的集合!
 事务:就是一堆操作的集合,他们同生共死。要么都执行成功,要么都执行失败
2.事务的特性  ACID
  A:原子性  完整的,不可分割的

  原子性 (Atomicity):在事务中的操作,要么都执行,要么都不执行!

  C: 一致性  事务执行完毕后,数据的状态是一致的()

  一致性(Consistency):事务必须保证数据库从一个一致性的状态变成另一个一致性的状态!

  I: ISOLation 隔离性  两个事务执行互不影响

  隔离性(Isolation):每个事务之间互不干扰!哪怕是并发执行也不干扰!

  D: 永久性  事务执行完后,对数据的影响是永久的。

  持久性(Durability):事务一旦被改变,那么对数据库中数据的影响是永久性的!

3.事务操作的关键字
  自动提交事务开关set autocommit=0
  开始事务 start transaction /begin
  提交事务 commit
  回滚事务 rollback
  set autocommit=1
4.事务+++存储过程 转账的例子
 
DELIMITER $$
CREATE PROCEDURE usp_transfer()
    BEGIN 
    ##错误总数默认是0
    DECLARE t_error INTEGER DEFAULT 0; 
    ## continue 继续  hanlder 执行   并且对 t_error重新赋值为1
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; 
    SET autocommit=0;
        START TRANSACTION; 
        UPDATE bank SET balance=balance-100 WHERE cid=1;   
        UPDATE bank SET balance =balance+100 WHERE cid=2;
        IF t_error > 0 THEN 
            ROLLBACK; 
        ELSE 
            COMMIT; 
        END IF; 
     SET autocommit=1;
    END$$ 
DELIMITER ; 
 
CALL test_sp800()

 

定义一个存储过程的最简易的语法是
delimiter $$
create procedure usp_stulist()
begin
  select * from student
end$$
delimiter;

 

          模拟 银行转账!                          

--   创建数据库
CREATE DATABASE  myBank;
--  切换指定的数据库
USE myBank;
--  创建表
CREATE  TABLE  IF NOT  EXISTS bank(
customerName  VARCHAR(10) NOT NULL  COMMENT '用户名',
currentMoney  DECIMAL(10,2) NOT NULL  COMMENT '账户余额'
);
-- 插入数据
INSERT INTO bank  VALUES('小黑',50000),('小白',500000);

--  小黑  给小白  转账10000
--   修改两条数据
--    01.小黑-10000
--    02.小白+10000

UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName='小黑';
 --  故意写错字段名称  让02  报错
UPDATE bank SET currentMoneysss=currentMoney+10000
 WHERE customerName='小白';  

--  开启事务   START TRANSACTION 或者 BEGIN
--  01.02  为一个事务
BEGIN
 UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName='小黑';
 UPDATE bank SET currentMoneysss=currentMoney+10000
 WHERE customerName='小白';
--  事务回滚  ROLLBACK
--  提交事务 COMMIT

UPDATE bank SET currentMoney=500000
 WHERE customerName='小黑';
--  证明mysql是默认提交事务的!

SET  autocommit=0(关闭事务自动提交) | 1(开启事务自动提交)

-- 关闭事务自动提交
SET  autocommit=0;

BEGIN;   --  开启事务
 UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName='小黑';
 UPDATE bank SET currentMoney=currentMoney+10000
 WHERE customerName='小白';
COMMIT;  --  手动提交事务
  UPDATE  bank SET currentMoney=10000;
ROLLBACK;   -- 事务回滚

SET  autocommit=1;  -- 恢复自动提交

1.概念

一条或者多条sql语句的集合!
 事务:就是一堆操作的集合,他们同生共死。要么都执行成功,要么都执行失败
2.事务的特性  ACID
  A:原子性  完整的,不可分割的

  原子性 (Atomicity):在事务中的操作,要么都执行,要么都不执行!

  C: 一致性  事务执行完毕后,数据的状态是一致的()

  一致性(Consistency):事务必须保证数据库从一个一致性的状态变成另一个一致性的状态!

  I: ISOLation 隔离性  两个事务执行互不影响

  隔离性(Isolation):每个事务之间互不干扰!哪怕是并发执行也不干扰!

  D: 永久性  事务执行完后,对数据的影响是永久的。

  持久性(Durability):事务一旦被改变,那么对数据库中数据的影响是永久性的!

3.事务操作的关键字
  自动提交事务开关set autocommit=1
  开始事务 start transaction /begin
  提交事务 commit
  回滚事务 rollback
  set autocommit=1
4.事务+++存储过程 转账的例子
 
DELIMITER $$
CREATE PROCEDURE usp_transfer()
    BEGIN 
    ##错误总数默认是0
    DECLARE t_error INTEGER DEFAULT 0; 
    ## continue 继续  hanlder 执行   并且对 t_error重新赋值为1
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1; 
    SET autocommit=0;
        START TRANSACTION; 
        UPDATE bank SET balance=balance-100 WHERE cid=1;   
        UPDATE bank SET balance =balance+100 WHERE cid=2;
        IF t_error > 0 THEN 
            ROLLBACK; 
        ELSE 
            COMMIT; 
        END IF; 
     SET autocommit=1;
    END$$ 
DELIMITER ; 
 
CALL test_sp800()

 

定义一个存储过程的最简易的语法是
delimiter $$
create procedure usp_stulist()
begin
  select * from student
end$$
delimiter;

 

          模拟 银行转账!                          

--   创建数据库
CREATE DATABASE  myBank;
--  切换指定的数据库
USE myBank;
--  创建表
CREATE  TABLE  IF NOT  EXISTS bank(
customerName  VARCHAR(10) NOT NULL  COMMENT '用户名',
currentMoney  DECIMAL(10,2) NOT NULL  COMMENT '账户余额'
);
-- 插入数据
INSERT INTO bank  VALUES('小黑',50000),('小白',500000);

--  小黑  给小白  转账10000
--   修改两条数据
--    01.小黑-10000
--    02.小白+10000

UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName='小黑';
 --  故意写错字段名称  让02  报错
UPDATE bank SET currentMoneysss=currentMoney+10000
 WHERE customerName='小白';  

--  开启事务   START TRANSACTION 或者 BEGIN
--  01.02  为一个事务
BEGIN
 UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName='小黑';
 UPDATE bank SET currentMoneysss=currentMoney+10000
 WHERE customerName='小白';
--  事务回滚  ROLLBACK
--  提交事务 COMMIT

UPDATE bank SET currentMoney=500000
 WHERE customerName='小黑';
--  证明mysql是默认提交事务的!

SET  autocommit=0(关闭事务自动提交) | 1(开启事务自动提交)

-- 关闭事务自动提交
SET  autocommit=0;

BEGIN;   --  开启事务
 UPDATE bank SET currentMoney=currentMoney-10000
 WHERE customerName='小黑';
 UPDATE bank SET currentMoney=currentMoney+10000
 WHERE customerName='小白';
COMMIT;  --  手动提交事务
  UPDATE  bank SET currentMoney=10000;
ROLLBACK;   -- 事务回滚

SET  autocommit=1;  -- 恢复自动提交

            视图

1.视图: 就是一张虚拟表,本质上存储的是一对SQL的集合

--  视图 是一张虚拟的表
   01.表示一张表的部分数据或者是多张表的综合数据!
   02.结构和数据都是建立在对真表的查询基础之上的!
   03.视图中存放的数据其实就是对真实表的引用!
     对视图中的数据进行添加,更新删除都会影响到真实的表!
   04.一个真实的表可以创建N个视图!
   05.如果视图关联了多表,不允许增 删!单表可以增删改
   06.视图一般都是使用查询!

2.定义视图的语法:
create view VW_stulist(VW_视图的功能)
as
sql语句
 小Tip:当多表中有同名列的时候,在视图这个虚拟表中,只能有一列。手工指定该列是哪个表的

澳门新濠3559,3.视图的使用 和检索基本表一样,直接通过select
select * from VW_stulist

4.删除视图
drop view 视图名
drop table
drop database
drop index
drop constraint
归根结底:drop  删除是结构   delete 删除数据

 

5.查看所有库所有视图

 5.1.切换到系统数据库
  use information_schema

 5.2.select * from views G;

 6.查看当前库的所有视图
   show tables status where comment='view'

 7.视图注意事项
1)视图可以查询多表数据
2)视图可以嵌套
3)update,insert,delete不能封装成视图内容,通过图形化界面可以操作数据(操作视图数据,影响的是基本表)。
4)删除视图数据的时候,有一定的限定,数据结果来源于多表的时候,不能删除

 

--  创建一个视图  只获取 学生姓名 编号 以及考试成绩
CREATE  VIEW view_student_result
AS
SELECT s.studentNo 学生编号,studentName 学生姓名,
studentResult 考试成绩
FROM  student s,result r
WHERE s.`studentNo`=r.`studentNo`
--  查询视图中的内容
SELECT * FROM view_student_result
-- 查询mysql数据库中所有的视图
SELECT * FROM information_schema.views;
--  删除视图
DROP  VIEW view_student_result;

--  创建一个表的视图  学生姓名,地址,手机号
CREATE VIEW  view_student
AS
SELECT  studentName 学生姓名,address 地址,phone 手机号
FROM  student

-- 查询视图

SELECT  * FROM view_student 

 

编辑:数据库 本文来源:要么都不执行澳门新濠3559

关键词:

  • 上一篇:没有了
  • 下一篇:没有了