美文网首页
数据库第五天

数据库第五天

作者: 红颜心雨 | 来源:发表于2017-03-22 17:16 被阅读0次

    //局部变量

    create procedure getNum()

    begin

    declare number int;

    set number = 10;

    select number;

    end

    (1)查询任意id的图书信息

    注意:参数的名称不能和表中字段名相同

    select * from books where id = ?;

    create procedure getBooksByID(in bid int)

    begin

    select * from books where id = bid;

    end

    (2)查询任意图书类型的图书信息

    注意:varchar,char类型需要定义长度

    select * from books where type_id = (select type_id from book_type where type_name = '黑客');

    方法一

    create procedure getBooksByName(in tname varchar(50))

    begin

    select * from books where type_id = (select type_id from book_type where type_name = tname);

    end

    方法二

    create procedure getBooksByName2(in tname varchar(50))

    begin

    declare tid int;

    set tid = (select type_id from book_type where type_name = tname);

    select * from books where type_id = tid;

    end

    insert into comment (aid,com_content,com_time)

    values(13,'回复内容13',null);

    //获取最近一次存入数据表的ID

    注意:必须保证id是自动增长;不能指定下一个递增的ID值

    last_insert_id();

    (3)在评论表insert一条评论之后,实现article表中的评论数量+1

    create procedure getComs(a int,b text,c datetime)

    begin

    declare pid int;//评论表id

    declare wid int;//文章表id

    //向评论表存入一条数据

    insert into comment(aid,com_content,com_time)

    values(a,b,c);

    //获取刚存入的评论id

    set pid =(select last_insert_id());

    //根据评论id获取到文章id

    set wid = (select aid from comment where cid = pid);

    //根据上一步获取到的文章id,更新文章表的评论数量

    update article set coms = coms + 1 where aid = wid;

    end

    call getComs(10,'太棒了','2017-1-1');

    //在学生表存入一条数据之后,在成绩表中存入一条此学生的语文成绩

    //用存储过程向一个表中存入100条数据

    create procedure pro_add100()

    begin

    declare i int;

    declare max int;

    set i = 0;

    set max = 100;

    while i <= 100 do

    insert into course(co_name) values('course');

    set i = i+1;

    end while;

    end

    //删除存储过程

    drop procedure 存储过程的名字;

    //总结

    (1)存储过程包含单条或者多条sql,都需要写在begin end之间

    (2)在存储过程中的每条sql语句结束时都要加';';

    (3)存储过程中的参数没有默认值,在调用时,不能省略这个参数,可以用null代替

    //事务

    定义:MySQL 事务主要用于处理操作量大,复杂度高的数据。

    一句话概括:可以回滚,可以提交,程序没有问题,则提交,有问题就回滚

    一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)

    1、事务的原子性:一组事务,要么成功;要么撤回。

    2、稳定性 : 有非法数据(外键约束之类),事务撤回。

    3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。

    4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。

    事务(transaction)的语法:

    (1)开启事务:begin; //start transaction;

    (2)进行相关的操作

    (3)提交事务:commit;

    (4)撤销事务(回滚):rollback;

    使用事务的注意事项:

    (1)表必须是innodb存储引擎

    (2)常用于金额、库房等行业,一般行业不使用

    mysql中的存储引擎:

    mysql数据类型很多,表很多,在处理数据上存在差异

    针对不同的处理要求,mysql提供多种不同的存储引擎

    (1)innodb

    a)事务型存储引擎,支持事务,有崩溃恢复能力

    b)表只有一个.frm文件,索引和数据是紧密相连的,降低mysql运行效率

    c)mysql版本是5.5及之后的,默认存储引擎是innodb

    (2)myisam

    a)表分成三个文件存储(.frm,.myd,.myi),索引和数据是分开的,提高mysql运行效率

    b)不支持事务

    c)mysql版本是5.5之前,默认存储引擎是myisam

    mysql根据功能不同,划分了一些类型:

    DCL:mysql用户的管理、权限分配、数据库的备份、还原

    (1)mysql用户管理

    a)root是mysql默认的用户(超级管理员),才有权限去创建其他mysql用户

    b)mysql用户信息是存储在mysql库中的user表中

    //如何创建mysql用户

    create user 用户名@服务器名称 identified by '密码';

    create user xiaoming@localhost identified by '123';

    //修改密码(root或者当前登录用户都可以修改密码)

    set password for 用户名@服务器名称 = password('新密码');

    set password for xiaoming@localhost = password('12345');

    //删除用户(在root账户下)

    drop user 用户名@服务器名称

    drop user xiaoming@localhost;

    //用户权限(在root账户下)

    //赋予权限

    grant 权限列表 on 对象列表 to 用户列表;

    权限列表:

    (1)All:所有权限(增删改查)

    (2)Create 创建权限

    (3)drop 删除权限

    (4)alter 修改权限

    (5)select 查询权限

    (6)insert 数据的添加权限

    (7)update

    (8)delete

    对象列表(数据库或数据表)

    *.*  //第一个*是数据库,第二个*是数据表

    数据库名称.*  //数据库中的所有表

    数据库名称.表名 //一个数据中的某个表

    grant All on *.* to xiaoming@localhost;

    grant All on demo.* to xiaoming@localhost;

    收回权限(在root账户下)

    revoke 权限列表 on 对象列表 from 用户列表;

    revoke All on *.* from xiaoming@localhost;

    revoke All on demo.* from xiaoming@localhost;

    (2)mysql数据的备份与还原(导出导入),不需要登录数据库

    返回上一级:cd ..或cd ../

    进入下一级: cd 文件夹名字

    在mysql/bin目录下:

    备份:

    mysqldump -uroot -p 数据库名称>路径(存放sql文件)

    mysqldump -uroot -p demo>c:/demo.sql

    还原(不用dump):

    mysql -uroot -p demo4

    相关文章

      网友评论

          本文标题:数据库第五天

          本文链接:https://www.haomeiwen.com/subject/gaoonttx.html