mysql数据库初学 三

十、创建索引查询:

  •      特点:① 索引创建是以列为单位的

    1、索引查询的目的:

      (1)目的:

                   可以提高数据库管理系统的查找速度,而且还可以保证字段的唯一性,从而实现数据库表的完整性

      (2)索引创建的条件:

                     以下情况下适合创建索引:

                         • 经常被查询的字段,即在WHERE子句中出现的字段。

                         • 在分组的字段,即在GROUP BY子句中出现的字段。

                         • 存在依赖关系的子表和父表之间的联合査询,即主键或外键字段。

                         • 设置唯一完整性约束的字段。

                     以下情况下,不适合创建索引:

                         • 在查询中很少被使用的字段。

                         • 拥有许多重复值的字段。

    2、索引(index)查询的操作:增、删、改、查

     (1)创建索引(index)与 unique key:

                ① 在创建表的时候创建

                ② 表已经存在时,用 create 创建索引 :

                    用法:create 索引类型 索引名 on 表名(字段名[(长度)] [asc|desc])    

                    实例:create index date_index on depositer(dep_date);

                               create unique index date_index on depositer(dep_date);

                  ③ 修改表语句 创建  alter:

                        用法:  alter table 表名  add 索引类型 索引名(字段名[(长度)] [asc|desc])         

                        其中: 索引类型:insex  普通键 ;unique key 唯一键 

                                    如果想要删除 primary key 与 foreign key 方法 查看:

                                             https://blog.csdn.net/qq_16555103/article/details/86011130#t48 --- 第七节

                        实例:alter table depositer add index amount_index(amount);             

        (2)修改索引:

                           删了重建

        (3)删除索引:

                    ① 删除普通索引:

                           1) drop:

                                      drop index 索引名 on 表名;  

                           2)alter:

                                      alter table 表名 drop index  索引名;    

                    ②删除 主键、唯一键、外键:

                                      https://blog.csdn.net/qq_16555103/article/details/86011130#t48 --- 第七节

   3、创建全文索引(fulltext index): 

     (1)目的:

                       能够更加快速地查询数据量较大的字符串类型的字段

     (2)创建方法:

                      create fulltext index 索引名 on table名 ([(长度)] [asc | desc]);

       (3)  创建全文索引后关键字查询的方法:

                      select * from table名 where match(fulltext的字段名) against("关键字");

  •                       注意:数据库 关键字 默认字符数 >= 3,小于这个数目 无法搜索。

     (4)删除全文索引:

                 drop index fulltext索引名 on table名;

十一、存储过程的操作:

  •         特点:相当于函数,将sql 语句封装起来,存储到 mysql 服务器 的硬盘里,客户端直接调用传参即可执行。

   1、mysql 定义变量:

      (1)用户变量(全局变量)定义方法:                  

set @user_name = "张三"        ---------- @是固定格式,使用变量时要加@
select @user_name              --------- select 打印到控制台

      (2)存储过程(函数)中定义变量:               

create procedure procedure_test(in uname varchar(20))
begin
    DECLARE test VARCHAR;            --------- 声明变量,过程中的变量不必加 @   
    set test = '1';                    --------- 赋值
    select test;
end

   2、创建 procedure:

     (1)定义 变量 类型 为 in (输入) 的存储过程:

// 定义 变量 类型 为 in (输入) 的存储过程
----------------------------------------------------------------
创建格式:

创建  存储过程 存储过程名字(输入还是输出 变量 变量类型,....)
	开始
		你要执行的sql语句
	结束
--------------------------------------------------------------------
create procedure name_get_info(in uname varchar(11))
BEGIN
	 select info from customer where name = uname;
END

调用 存储过程名字(参数);
call name_get_info("郭富城");
call name_get_info("刘德华");

    (2)out 类型(输出)存储过程 :

                题目:获取所有人的总钱数,保存在变量里

create procedure getTotalMoney(out umoney dec(8,2))
BEGIN
    SELECT sum(amount) into umoney from depositer;

END;

call getTotalMoney(@totalmoney);
select @totalmoney;

    (3)inout 类型  -- 输入兼输出

                  题目:输入一个人的id 返回这个人的月薪

create procedure id_get_salary(inout id_wage int)  ------- 兼输入(in)和输出(out)
BEGIN
    select salary into id_wage from customer where c_id = id_wage;
END

set @suibian=1005;
call id_get_salary(@suibian);
select @suibian;

  3、查看存储过程:

                        show procedure status where db = "查询存储过程的数据库名";

  4、删除存储过程:

                        drop procedure 过程名;

  5、sql 中的条件语句 与 循环语句:

    (1)条件语句: if else

 ----- if else
create procedure poorandrich(in uname varchar(10))
BEGIN
DECLARE money int;
select wage into money from staff where name = uname;
    IF money>=5000 THEN                 -----    IF  THEN -----
        select concat(uname,'富人'); 
    ELSE 
        SELECT concat(uname,'穷人');
    end if;
END;

		call poorandrich('张星');

     (2)循环语句: loop

十二、触发器:

  •          特点:① 创建以后存储在硬盘上
  •                     ② 触发器只作用于 insert 、update、delete 这三个语句

       创建规则:

               create trigger trigger名

               after | before 触发器事件 on 触发器table名 for each row

               begin

                       触发器作用于其他table的sql语句

               end 

  1、插入触发器:insert 语句

当添加一条订单的时候,商品表中的库存数据更新
create trigger order_insert_goods_delete
after insert on goodsorder for each ROW
BEGIN
    update goods set goods_num=goods_num - new.num where id=new.gid;
    ------- new 指的是 触发器表 当前触发事件 的数据行,new.num是触发数据行的 新数据行的 num字段内容------ 
END;

  2、更新触发器:update

当更新一条订单的时候,商品表中的库存数据更新
create trigger update_order 
after update on goodsorder for each ROW
BEGIN
    update goods set goods_num=goods_num + (old.num-new.num) where id = new.gid;
           ----在 更新的时候 new 代表 更新后的数据  old 代表 原来的数据------
END

  3、 删除触发器 :delete

在删除一条订单的时候,把订单的数量还原到 商品表 
create trigger delete_order 
after delete on goodsorder for each row
BEGIN
    update goods set goods_num=goods_num + old.num where id=old.gid;
END

   4、查看触发器:

            show triggers;

   5、删除触发器:

           drop trigger trigger_name;

十三、事务:

 

              

 

      

没有更多推荐了,返回首页