MySQL约束的分类、作用及用法

说实话,当我谈论MySQL的局限性时,我必须从我自己遇到问题的经历开始。
我记得刚进入这个行业的时候我写了一个没有限制的表格。
结果信息导入的时候各种谩骂的字符就出来了,真是让人头疼。
因此,现在查看这些限制就像为数据库安装访问控制系统一样。
首先,我们来谈谈PrimaryKey约束。
这件事非常重要。
当我使用旧系统时,桌子没有主密钥。
每次查数据,就像在海边建一座城堡——地基不牢。
主键的作用是为每条记录分配一个唯一的ID作为ID号。
出于使用目的,请在创建表时添加主键(字段名称)。
请记住用逗号分隔配对的主键。
很酷的是,您可以使用 ALTER TABLE 语句向现有表添加主键,但必须注意指针冲突。

自动添加是我经常使用的一种技术。
例如,在订单表中,每次输入新订单时,无需担心订单号,系统会自动添加。
当年的一个项目中,我不小心删除了一个自增字段的AUTO_INCRMENT属性。
结果新增条目全部为0,还被老板骂了。
请注意,DELETE 和 TRUNCATE 对自动增量列具有完全不同的效果:DELETE 从断点恢复传播,而 TRUNCATE 将其重置为默认值(通常为 1 )。
非空约束(NotNull)看似简单,但如果使用不当,可能会导致问题。
我记得有一个实验,必填字段被设置为NULL并且数据输入失败。
只需在定义字段时添加NOT NULL即可,但要注意,如果现有数据为空,则可能需要在插入数据之前使用ALTER TABLE修改它。
我经常将唯一约束(unique)与主键一起使用。
例如,用户的手机号码不能重复。
从使用上来说,UNIQUE和PRIMARY Key的区别在于前者允许NULL(只要字段不为空),而后者则不允许。
最糟糕的是,当您使用 ALTER TABLE ADD UNIQUE 时,如果存在重复数据,您会收到错误消息。

默认是一个特别有用的功能。
例如,对于性别字段,默认值可以设置为“男性”。
在我的一个项目中,地址字段默认填写的是公司地址,这样节省了大量的输入时间。
用法是DEFAULT 'value',但要注意数据类型匹配。

零填充约束(Zerofill)现在很少使用,但是我在做报表系统的时候遇到过它。
例如,在邮政编码中,如果您使用 ZEROFILL(6 ) 并使用“1 2 3 ”,则实际存储的值为“0001 2 3 ”,并且将启动自动签名。
最有趣的是,与UNIQUE结合时,可以自动创建索引,达到很高的查询效率。

外键约束优先。
当我下载电商系统时,订单表没有外键。
结果,当用户取消产品时,订单就随之丢失,数据链路也随之丢失。
使用上,外键(字段名)引用必须与表名(字段名)结合起来,并且必须考虑ON DELETE和ON UPDATE规则,否则会出现死锁。

说实话,这些限制如果使用得当,可以省去很多麻烦,但如果用错了,后果可能很可怕。
这就像为访问控制系统设置密码一样。
如果你放对了,那就很舒服,但如果你放错了,你甚至进不去,所以,在设计桌子的结构时,你应该多注意这些限制。

MySQL约束constraint

哈,说到MySQL的约束,我不得不多说几句。
我在这个行业工作了很多年,对数据库还是比较熟悉的。

主键约束就像人的 ID 标签一样,确保表中的每一行都是唯一的。
我记得有一次,我们公司有一个系统,表中没有主键约束。
结果,数据多次重复,造成很多麻烦。
此时我很快添加了主键约束,问题就解决了。
该主键约束可以是单列或多列。
使用时要根据具体情况而定。

自增约束,这个就像一个自动计数装置,特别方便。
例如,users 表的主键通常是自动递增的。
新用户可以直接创建新ID,无需手动填写。
我当时在项目中就使用了这个方法,节省了很多时间。

非空约束,这个听起来简单但是非常重要。
它确保某个字段不能留空,以避免数据丢失。
有一次我接手了一个项目,发现用户仪表板中有很多空字段,所以我很快添加了非空约束,以防止数据不完整的进一步问题。

独特的约束怎么样?这主要用于确保某个字段或字段组合在表中是唯一的。
例如,用户的电子邮件地址不重复。
使用 unique 关键字指定它非常简单。

默认约束和未填充约束可能不会经常使用。
默认约束是为字段设置默认值。
例如,默认时间字段是当前时间。
零填充约束常用于显示数字时,数字0会自动填充在前面。

外键约束是数据库设计中的法宝,用于维护表之间的引用完整性。
例如,将order表中的用户ID与users表中的用户ID进行链接,从而保证数据的一致性。
这里最令人印象深刻的是,当一张表更新时,另一张表也会相应更新,避免了数据错误。

一般来说,这些约束在确保数据完整性和一致性方面发挥着重要作用。
我在项目中也遇到了问题,因为这些约束没有被正确使用,所以我很担心这个问题。
然而,数据库的世界是复杂且瞬息万变的,总是有新的事物出现。
你必须不断学习,永不停歇。

MySQL当中如何删除某个字段的唯一索引或者修改该字段的唯一索引为普通索引

上次我帮朋友建立了网站的后端数据库。
他的表有五个字段,其中一个用户名字段始终是唯一的索引。
后来,随着用户数量的增加,有时会报告用户名重复的错误消息。
我说需要改变。
他一握手,就删除了唯一索引。
结果发现数据查询变慢了。
他发现表索引结构非常混乱。
我只是想了想,这个索引实在是太烦人了,有时候还得“理顺一下”。

例如,在MySQL中,我首先使用用户的SHOWINDEXES;仔细一看,用户名字段确实是唯一键。
如果想改成普通索引,不能直接更改字段类型。
您必须首先删除唯一限制。
您已实施 ALTER TABLE users DROP INDEX username ON users;运行命令后没有报错。
我快速添加了 CREATE INDEX idx_username ON users(username); 。
如果此时再次查看,索引类型会变为Normal。
正如您所看到的,这个过程应该逐步完成。
不能为了省事直接改变字段定义,因为那样很容易挂表。

等等,还有别的事。
上次我在杭州的机房,调试一个电子商务系统。
订单表中的订单号字段原本是一个唯一索引。
后来业务发生变化,允许使用同一个订单号运送不同的产品。
客户端坚持保留这个索引,导致数据库反复宕机。
最后我建议他们使用触发器,控制业务逻辑,这比硬删除索引要好。
毕竟索引是越多越好,要看场景。