当前位置: 首页 > news >正文

做优品购类似网站seo搜索引擎优化心得体会

做优品购类似网站,seo搜索引擎优化心得体会,游戏界面设计图片,独立网站如何做业务场景 在实际工作当中,遇到一个场景,就是在用户注册时,名字要全局唯一,当然,我们是可以对用户进行删除的,你会怎么去做? 分析 一般来说,我们可以在用户注册请求时&#xff0c…

业务场景

在实际工作当中,遇到一个场景,就是在用户注册时,名字要全局唯一,当然,我们是可以对用户进行删除的,你会怎么去做?

分析 

一般来说,我们可以在用户注册请求时,进行查库校验,看看名字是否已经存在,如果存在就抛异常给提示;否则,就落库。
除此之外,还可以直接给数据库字段加唯一索引

UNIQUE KEY `name_index` (`name`) USING BTREE

当前这种需要根据实际情况分析:

  • 如果我们删除用户是物理删除,就是直接delete,没问题
  • 如果我们删除用户是逻辑删除,相对于update数据的删除标识为1,这时候你怎么建唯一索引?
    针对第二种情况,可能很多人会说,把删除标识字段也加到索引里面,类似
NIQUE KEY `name_index` (`name`,`is_deleted`) USING BTREE

这里会有问题,当我们进行相同用户第二次删除之后,把id=3的数据删除(逻辑),修改is_deleted=1,此时就会报错,如下图

+----+---------+-----------+
| id | name    | is_deleted |
+----+---------+-----------+
|  1 | forlan0 |         0 |
|  2 | forlan1 |         1 |
|  3 | forlan1 |         0 |
+----+---------+-----------+

唯一索引不通过
那么,针对逻辑删除这种情况,怎么处理?

解决

1、删除时,修改is_deleted=主键

UPDATE forlan SET `is_deleted` = id WHERE `id` = 3;
--修改后的数据如下
+----+---------+------------+
| id | name    | is_deleted |
+----+---------+------------+
|  1 | forlan0 |          0 |
|  2 | forlan1 |          2 |
|  3 | forlan1 |          3 |
+----+---------+------------+

2、删除时,修改is_deleted=null
这种做法,不是会有两条相同的数据?下面的情况允许存在?

UPDATE forlan SET `is_deleted` = NULL WHERE `id` = 3;
--修改后的数据如下
+----+---------+------------+
| id | name    | is_deleted |
+----+---------+------------+
|  1 | forlan0 |          0 |
|  2 | forlan1 | NULL       |
|  3 | forlan1 | NULL       |
+----+---------+------------+

Mysql官方文档的解释

A UNIQUE index creates a constraint such that all values in the index must be distinct. An error occurs if you try to add a new row with a key value that matches an existing row. This constraint does not apply to NULL values except for the BDB storage engine. For other engines, a UNIQUE index allows multiple NULL values for columns that can contain NULL.

其实大概意思就是,除BDB存储引擎外,此约束不适用于NULL值。对于其他引擎,UNIQUE索引允许包含NULL的列有多个NULL值

为什么允许这么搞?
我的理解是,NULL其实就表示未知,未知的东西,无法进行判断;如果NULL对唯一索引起作用,那么就会导致只能有1行数据为空,我们的业务场景,可能需要用NULL去表示未知或不确定的值。

当前,还是不太建议使用NULL,可能存在一些其它问题,比如:

  • 数据丢失
    阿里巴巴规范里面也说了,count(*) 会统计值为 NULL 的行,而 count(列名) 不会统计此列为 NULL 值的行
    WHERE条件!=不会查到NULL的值
  • 程序空指针报错,比如我们使用SUM(cloumn),如果字段都为NULL,最终返回NULL
  • 增加查询难度
    查询时,语法需要使用IS NULL 、IS NOT NULL、IFNULL(cloumn) 而传统的 =、!=等就不能使用了

3、新建一个字段delete_id,删除时,修改delete_id=主键
正常来说,其实1,2种方案已经满足,为什么我们要使用这种?
假设我们的表已经上线使用了一段时间,这时我们需要建唯一索引,就可以采取方案,实际上就是在删除的时候,多更新一个字段

UPDATE forlan SET `is_deleted` = 1,delete_id = id WHERE `id` = 3;

总结

有3种数据库层面的解决方案:

  • 删除时,修改is_deleted=主键
  • 删除时,修改is_deleted=null
  • 新建一个字段delete_id,删除时,修改delete_id=主键

至于怎么选择,看业务场景:
如果是已经投入使用的业务,可以采取方案3,否则可以采取方案1。

 

http://www.hrbkazy.com/news/18956.html

相关文章:

  • 中小企业建站模板网站建设公司企业网站
  • 网络推广网站培训网站统计
  • 网站建设具体流程今日头条搜索引擎
  • 服务器绑定网站打不开seo免费优化网站
  • 怀化网站建设哪家便宜站长聚集地
  • 网站安全建设方案前言网站快速优化排名官网
  • wordpress变成圆角官方进一步优化
  • 特殊教育学校网站建设方案哈尔滨百度公司地址
  • 专业做网站app的公司有哪些大数据查询个人信息
  • 十堰最专业的网站建设公司广州seo网络推广员
  • axurerp如何做网站疫情最新情况 最新消息 全国
  • 烟台比较好的软件公司网站优化外包顾问
  • 漯河网站超市建设2020做seo还有出路吗
  • 网站固定头部seo网络优化推广
  • 求网站2021在线观看html网页制作软件有哪些
  • 有哪些做设计交易网站广告推广 精准引流
  • 常州想做个企业的网站找谁做杭州网站优化服务
  • 做影视网站侵权怎么创作自己的网站
  • 电子商务网站环境建设今日新闻最新头条10条摘抄
  • 移动网站开发 王府井信息流广告是什么
  • 网站建设还有需求么2023知名品牌营销案例100例
  • 适合学生做网站的图片热点营销案例
  • 同一个服务器可以做多个网站数据分析师培训
  • 保定网站建设冀icp百度指数的数据来源
  • 企业网站的发展历史如何在国外推广自己的网站
  • 网站建设陆金手指下拉贰拾网上在哪里打广告最有效
  • 028网站建设工作室子域名大全查询
  • 中国wordpress变装关键词排名优化易下拉霸屏
  • 上海网站推广营销设计岳阳seo公司
  • 电商型企业网站建设长春网站建设公司哪个好