• 第五天,存储过程,查询区分大小,事务处理(回滚,提交)


    ※存储过程
    存储过程是保存在数据库上的一段可执行代码。
    1、定义存储过程的语法是:
    Create procedure sp_name (参数..)
    Begin
    SQL语句
    End;
    2、调用它的方法:
    Call sp_name(参数…); //空参时则括号中不填内容

    3、演示
    1)不带参数
    定义(delimiter用于定义结束符):
    DELIMITER $$
    CREATE PROCEDURE p1()
    BEGIN
    INSERT INTO person2 VALUES('P05','李四',0);
    SELECT * FROM person2;
    END$$
    DELIMITER ;
    调用:
    call p1();

    2)带输入参数
    DELIMITER $$
    CREATE PROCEDURE p2(in id varchar(32), in nm varchar(30) )
    BEGIN
    INSERT INTO person2 VALUES(id,nm,0);
    SELECT * FROM person2;
    END$$
    DELIMITER ;

    call p2('P06','张飞');
    CALL p2('P07','刘备');

    3) 带输入、输出参数
    定义:
    DELIMITER $$
    CREATE PROCEDURE p3(in id varchar(32), in nm varchar(30), out num int )
    BEGIN
    INSERT INTO person2 VALUES(id,nm,0);
    SELECT count(*) into num FROM person2;
    END$$
    DELIMITER ;

    调用:
    CALL p3('P08','关羽',@aa); //一个@为用户变量,两个@为系统变量
    输出返回值(输出参数)
    SELECT @aa;

    //输出系统变量“@@version”的值
    SELECT @@VERSION

    ※查询内容区分大小写
    mysql查询默认是不区分大小写的 如:
    select * from table_name where a like 'a%'   
    select * from table_name where a like 'A%'   
    select * from table_name where a like 'a%'
    select * from table_name where a like 'A%'
    效果是一样的。
    要让mysql查询区分大小写,可以:
    select * from table_name where binary a like 'a%'  
    select * from table_name where binary a like 'A%'   
    select * from table_name where binary a like 'a%'
    select * from table_name where binary a like 'A%'
    也可以在建表时,加以标识 
    create table table_name(
    a varchar(20) binary
    );

    ※事务: 一个事务只会有一个结果,要么成功,要么失败。
    举例:
    P09,'赵子龙' 一次买了两辆车,需要把赵子龙的信息存储到person2表,同时还要把两辆车的信息存储到car表-----两个表的存储动作就是一个事务,要么成功(两个表的信息都成功存储), 要么失败(只要其中一个表的一条数据存储失败,其它表的信息都不能存储进去,如果存进去则要还原)。
    类似的例子,还有:银行转账! 销售单和销售明细!

    SQL演示:
    START TRANSACTION; //开启事务
    DELETE FROM person2 WHERE id='P04';
    DELETE FROM person2 WHERE id='P05';
    ROLLBACK/COMMIT; //回滚/提交


    START TRANSACTION; //开启事务
    INSERT INTO person2 VALUES('P09','赵子龙','1');
    INSERT INTO car VALUES('C007','BMW',50,'P09');
    INSERT INTO car VALUES('C008','QQ',7,'P09');
    ROLLBACK/COMMIT; //回滚/提交

    DELETE FROM car WHERE id='C007';
    DELETE FROM car WHERE id='C008';
    DELETE FROM person2 WHERE id='P09';

    ※事务的隔离

  • 相关阅读:
    判断回车键自动提交
    WCF开发使用证书文件配置基于自定义X509证书
    递归算法
    Web网站开发常用正则表达式
    WINDSOW2003 IIS配置后无法显示 ASP网页的问题
    如何写好软件开发需求文档
    Bitmap Drawable Canvas Paint比较
    Android开发:LayoutParams的用法
    华为投身互联网:吹了冲锋号 就要往前冲
    android 获取手机号问题
  • 原文地址:https://www.cnblogs.com/1314wamm/p/6750112.html
Copyright © 2020-2023  润新知