mysql颠覆实战笔记(二)-- 用户登录(一):唯一索引的妙用

版权声明:笔记整理者亡命小卒热爱自由,崇尚分享。但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的《web级mysql颠覆实战课程 》。如需转载请尊重老师劳动,保留沈逸老师署名以及课程来源地址。

一、首先我们用上节课的存储过程对两张表压100万数据(各100万)。

  第一表 user_sys我们使用的是InnoDB模式,小卒自己的插入结果是:

  

  第二张表 user_sys2我们使用的是MyISAM模式,小卒自己的插入结果是:

    

  两个引擎的效率差异明显,所以我们再使用中根据实际情况选择。需要事务的就选择InnoDB模式,不需要事务以及表锁的采用MyISAM模式,这样极大的提高数据处理的效率。

二、select的时候MyISAM明显快于InnoDB。

select count(*) from user_sys;

1

 

select count(*) from user_sys2;

 

三、现在我们来建立一个索引。

  在navicat中选择库jtthink,再选择设计表user_sys,.

     这里介绍两个简单的概念:

  普通索引--Normal:最基本的索引类型,而且它没有唯一性之类的限制。

  唯一性索引--Unique:这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。

 

四、我们来实现第一个功能点-用户登录。

  写个存储过程
  1、判断用户名和密码是否匹配,如果匹配则返回该行数据,如果不匹配则返回一个错误行
    2、不管成功不成功都记录一次日志。
  

  首先,我们先来创建一个登录日志表。字段属性如下:

  表名:user_log

  id  int 自增
  log_type varchar(20) 类型,暂时放一些字符串
  log_date timestamp 默认值是current_timestamp

 

  

   然后我们来写这个存储过程 sp_user_login:

 1 BEGIN
 2     set @gid=0;
 3     set @user_name='';
 4     set @_result='login sucess';
 5     SELECT id,user_name INTO @gid,@user_name FROM user_sys WHERE user_name=_user_name AND user_pwd=_user_pwd LIMIT 1;
 6     
 7     IF @gid=0 THEN #登录不成功
 8         SET @_result='login error';
 9     END IF; #不管是否匹配成功,我们都会返回一行数据。并且该行的 第一个字段 表示了 执行结果集的状态。
10     
11     SELECT * FROM (SELECT @_result

as _result) a,(SELECT @gid,@user_name) b; 12 13 14 END

  然后,我们来call一下 sp_user_login(‘随便的用户名’,‘随便的密码’);

  

   

  然后小卒用插入正确的数据来测试

  

  

 

  好了,这一课我们结束了。

上一篇:mysql颠覆实战笔记(一)--设计一个项目需求,灌入一万数据先
下一篇:mysql颠覆实战笔记(三)-- 用户登录(二):保存用户操作日志的方法

posted @ 2016-08-01 16:14  前进的卒子  阅读(1417)  评论(0编辑  收藏  举报