面试中级

redis没有表结构,数据结构是 key - vlaue,

用内存缓存数据,IO性能比硬盘好

单线程,非阻塞执行

安装redis

http://www.redis.cn/

上传到linux系统 root目录,解压

tar -xvf  redis安装包名

src存放redis源代码,编译后可以安装redis 

安装gcc编译器

yum install gcc -y

进入redis解压目录,安装redis

cd redis目录
make
cd src
make install

修改redis.conf配置

69  bind 0.0.0.0 任何IP都可访问
88  protected-mode no 关闭保护模式
136  daemonize yes  后台进程运行
507  requirepass abc123456 设置访问密码

启动redis程序

chmod u+x ../redis.conf  添加执行权限

./redis-server ../redis.conf  启动 redis 服务

启动 redis 客户端
./redis-cli    无密码
./redis-cli -a abc123456    有密码

进入redis 客户端

127.0.0.1:6379>auth 'abc123456' 输入密码

127.0.0.1:6379>set user bob 添加key-vlaue格式数据

127.0.0.1:6379>get user 获取

127.0.0.1:6379>del user 删除

让远程可以访问redis

1. 关闭selinux

2. 开启防火墙端口

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload

安装RDM图形客户端,远程访问 redis 服务

https://redisdesktop.com/

关闭 redis 服务

redis-cli -a abc123456 shutdown

用 RDM 远程连接 redis ,打开命令行窗口

set kill_num 50  设置库存为50

watch kill_num kill_user  监视要操作的数据

multi  开启一个事务

decr kill_num  库存-1

rpush kill_user 9502  添加秒杀成功用户ID

exec  提交事务

取消事务(回滚)

discard

 

存储过程 

1. 隐藏了SQL语句,外包公司只传入参数就可完成业务,保护了数据库隐私

2. 提高效率

3.没有返回值

根据部门名称,查询部门用户信息

SELECT
    e.id,
    e.ename,
    e.sex,
    e.married,
    j.job 
FROM
    t_emp e
    JOIN t_dept d ON e.dept_id = d.id
    JOIN t_job j ON e.job_id = j.id 
WHERE
    d.dname = "零售部";

插入实习生数据,男生分配网商部,女生分配零售部 

CREATE DEFINER = CURRENT_USER PROCEDURE `p1`
(IN `p_wid` varchar(20),
IN `p_ename` varchar(20),
IN `p_sex` char(1),
IN `p_married` tinyint(1),
IN `p_education` tinyint,
IN `p_tel` varchar(11))

BEGIN

declare dept_id int;
CASE 
    WHEN p_sex='女' THEN
        SET dept_id=3;
    ELSE
        SET dept_id=4;
END CASE;

INSERT INTO t_emp(wid,ename,sex,married,education,tel,dept_id,
hiredate,job_id,`status`,is_deleted)
VALUES(p_wid,p_ename,p_sex,p_married,p_education,p_tel,dept_id,
CURDATE(),9,1,0);

END;

调用存储过程: 

call p1(参数);

函数

有返回值

计算个人所得税

CREATE DEFINER = CURRENT_USER FUNCTION `计算个人所得税`(`salary` decimal) RETURNS decimal(10,2)
BEGIN
    DECLARE temp DECIMAL;
    DECLARE tax DECIMAL;
    SET temp=salary-3500;
    CASE
        WHEN temp<=0 THEN 
            SET tax=0;
        WHEN temp>0 AND temp<=1500 THEN 
            SET tax=temp*0.03-0;
        WHEN temp>1500 AND temp<=4500 THEN 
            SET tax=temp*0.10-105;	
        WHEN temp>4500 AND temp<=9000 THEN 
            SET tax=temp*0.20-555;	
        WHEN temp>9000 AND temp<=35000 THEN 
            SET tax=temp*0.25-1005;
        WHEN temp>35000 AND temp<=55000 THEN 
            SET tax=temp*0.30-2755;
        WHEN temp>55000 AND temp<=80000 THEN 
            SET tax=temp*0.35-5505;
        ELSE
            SET tax=temp*0.45-13505;
    END CASE;
    RETURN tax;
END

在MySQL中创建函数时出现这种错误的解决方法:
set global log_bin_trust_function_creators=TRUE;

 

触发器

发生事件后执行的操作

t_dept

f1 : 更新部门ID后,更新部门表的员工部门ID

update t_emp set dept_id=NEW.id where dept_id=OLD.id;

f2:删除部门后,删除这个部门的员工记录

delete from t_emp where dept_id=OLD.id;

为什么要放弃存储过程、触发器和自定义函数?

因为在数据库集群的场景里,由于存储过程、触发器和自定义函数都是在本地数据库节点上运行,它们与数据库集群业务产生了冲突,所以为了顾全大局,放弃使用数据库本地编程,甚至连数据库本地生成主键的机制也都放弃了。

把存储过程发给 mycat,由于封装了类型,mycat不知道改发送给哪个数据库节点;

 

如何避免偷换交易中的商品信息?

B2B电商平台,通常采用保存历次商品修改信息、降低搜索排名

B2C电商平台,只需要保存历次商品修改信息即可

创建spu_old表,添加spu_id字段,无符号,添加索引

创建sku_old表,添加old_id字段,无符号,添加索引

order_detail表,添加old_id字段,无符号,添加索引,

订单详情表,如果old_id不为空,修改过就可以进行表连接查询了

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值