sql一些小建议

1.表字段不要设置为mysql的关键字

比如:desc就是关键字,英文字段描述,在执行查询等操作的时候就会报错,desc倒排序

但是可以用' '引用起来就不会报错

2.id非增时插入数据如何生成

REPLACE函数
批量插入使用replace函数,格式化uuid

INSERT INTO goods SELECT REPLACE(UUID(),'-',''), `goods_name`, `goods_img`, 100, `pay_price` FROM goods;

3.sql淘宝购物车列表

CREATE TABLE `购物车tb` (
  `id` varchar(20)  NOT NULL COMMENT 'id',
  `user_id` varchar(20)  DEFAULT NULL COMMENT '用户ID',
  `company_id` varchar(20)  DEFAULT NULL COMMENT '商家ID',
  `company_name` varchar(20)  DEFAULT NULL COMMENT '商家名称',
  `goods_id` varchar(20)  DEFAULT NULL COMMENT '商品ID',
  `goods_name` varchar(64) DEFAULT NULL COMMENT '商品名称',
  `buy_num` int(10) DEFAULT NULL COMMENT '购买数量',
  `create_date` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ;

就这一个表,根据用户ID查询用户的购物车列表:有两个要求 
1.根据商家分类,并且添加的商品创建时间越接近现在的商家排名就越靠前
2.同一个商家的商品需要排序,越晚添加的就越靠前

select * from (
    select company_id,min(company_name),max(create_date) createDate,min(user_id) user_id     from pc_shopping_cart where user_id='b9c037ec71464bab9f016e4012cc089f' 
    group by company_id order by max(create_date) desc
) t1
inner join pc_shopping_cart t2 on t2.company_id=t1.company_id and t2.user_id=t1.user_id
order by t1.createDate desc,t2.create_date desc;

4.排序问题

select * from (select id from t2 group by id) group by xxx order by limit 3;
select * from (select id from t2 group by id) group by xxx order by limit 3;
如果没有limit采用归并排序,有limit采用快速排序,为什么采用快速排序,因为快速排序可以在全部没有排序完成的情况获取部分前limit的数据,而快速排序却需要将所有数据排序完成后才能知晓前limit的数据。
还有稳定排序和非稳定排序,与order by结果的矛盾。 

5.关于mysql zerofill关键字

  

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值