zoukankan      html  css  js  c++  java
  • mysql深入

    使用存储过程
    create procedure productpricing() begin select avg(prod_price) as priceaverage from products; end;   创建一个新的存储过程productpricing

    执行存储过程
    call productpricing();

    删除存储过程
    drop procedure productpricing;不需要后面的()了

    存储过程使用参数
    create procedure productpricing(
    out pl decimal(8,2),
    out ph decimal(8,2),
    out pa decimal(8,2)
    )

    begin
    select min(prod_price)
    into p1
    from products;
    select max(prod_price)
    into ph
    from products;
    select  avg(prod_price)
    into pa
    from products;
    end;

    注释:关键字out指出相应的参数用来从存储过程传出一个值(返回给调用者),decimal是定义精度用的,第一个参数可存储的十位进制数总数,第二个是小数点右侧最大十进制位数,into 值传入值


    调用存储过程

    call productpricing(@pricelow,@pricehigh,@priceaverage);

    select @priceaverage;显示平均价格

    create procedure ordertotal(

    int onumber int,

    out ototal decimal(8,2)

    )

    begin

    select sum(item_price*quantity)

    from orderitems

    where order_num=onumber

    into ototal;

    end;

    调用上面的存储过程

    call ordertotal(2017,@total);

    select @total;显示结果


    游标:
    create procedure processorders()
    begin
    declare ordernumbers cursor
    for
    select order_num from orders;
    open ordernumbers;
    close ordernumbers;
    end;

    注释:定义游标cursor为ordernumbers,open打开游标,close关闭游标

    使用游标
    create procedure processorders()
    begin
    declare o int;
    declare ordernumbers cursor
    for
    select order_num from orders;
    open ordernumbers;
    fetch ordernumbers into o;
    close ordernumbers;
    end;

    注释;fetch 分别访问游标的每一行


    创建触发器
          create trigger insert_check before insert on student for each row insert into bp(id,name) values(111,'111');在对student执行插入操作前,对bp表插入数据,因为版本问题加入begin和end可能会提示错误

    drop trigger newproduct;删除触发器


    管理事物处理

    select * from student;
    start transaction;
    delete from student;删除student表全部数据
    select * from student;
    rollback;回滚

    select * from student;
    commit;在后面加上这句话的话,如果上面的操作没有错误,那么将rollback没有效果


    使用保留点
    savepoint delete1;
    rollback to delete1;我的显示找不到,神奇


    全球化和本地化
    show character set;查看支持哪些字符集
    show collation; 查看支持校对的完整列表
    show variables like 'character%';查看默认字符集
    show variables like 'collation%';查看默认校对
    create table mytable(
    id int,
    name varchar(20),
    addr varchar(20) character set latin1 collate latin1_general_ci
    )default character set hebrew collate hebrew_general_ci;


    用户管理
    use mysql;
    select user from user;
    create user bp identified by 'p@123456';创建一个bp用户,密码为123456
    rename user bp to user1;重命名bp用户为user1
    drop user user1;删除user1用户
    show grants for user1;显示user1的权限
    grant select on test.* to user1;授权bp对test数据库下的所有表有select权限
    revoke select on test.* from user1;收回user1对tset数据库下的所以表的select权限
    set password for user1=password('你的密码');修改user1的密码,如果不指定用户,就是修改当前登录用户密码

    数据库维护
    analyze table student;查看表键是否正常
    check table mytable,student;发现和修复问题

    导出数据库:mysqldump -u 用户名 -p 数据库名 > 导出的文件名
    例如mysqldump -u root -p news > news.sql   (输入后会让你输入进入MySQL的密码)
    (如果导出单张表的话在数据库名后面输入表名即可)

    1,将要导入的.sql文件移至bin文件下,这样的路径比较方便
    2,同上面导出的第1步
    3,进入MySQL:mysql -u 用户名 -p
    如我输入的命令行:mysql -u root -p   (输入同样后会让你输入MySQL的密码)
    4,在MySQL-Front中新建你要建的数据库,这时是空数据库,如新建一个名为news的目标数据库
    5,输入:mysql>use 目标数据库名
    如我输入的命令行:mysql>use news;
    6,导入文件:mysql>source 导入的文件名;
    如我输入的命令行:mysql>source news.sql;

    或者mysql -u root -p voice<voice.sql,输入密码即可。



  • 相关阅读:
    @atcoder
    @loj
    @AGC037
    @uoj
    @uoj
    @loj
    @loj
    @loj
    @loj
    @loj
  • 原文地址:https://www.cnblogs.com/biaopei/p/7730667.html
Copyright © 2011-2022 走看看