目录

一、前言

二、数据库的五大约束

1、主键约束(PRIMARY KEY)

2、唯一约束(UNIQUE)

3、默认约束(DEFAULT)

4、外键约束(FOREIGN KEY)

5、非空约束(NOT NULL)

三、主键

1、主键的注意事项

1.1、主键必须唯一

1.2、主键应该简短

1.3、主键应该简单

1.4、不要使用敏感信息作为主键

1.5、主键应该是静态的

1.6、主键应该是简单的

1.7、主键不应该包含空值

1.8、主键应该是稳定的

2、设置主键的方式

四、外键

1、外键的注意事项

2、设置外键的语法

3、外键约束的参照操作

五、非空约束

1、数据完整性

2、业务规则

3、查询优化

六、语法示例

1、添加主键约束

2、 添加唯一约束

3、添加默认约束

4、添加非空约束

5、添加外键约束

七、总结


一、前言

        SQL是最流行的关系型数据库管理系统,它具有强大的功能和灵活的查询语言,但在使用过程中,对数据的正确性和完整性的保护需要特别注意。为了确保在数据库中存储的数据是符合业务需求的,SQL提供了五大约束来保护数据完整性,分别是:主键约束、唯一约束、检查约束、默认约束和外键约束。

二、数据库的五大约束

1、主键约束(PRIMARY KEY)

        主键用于标识一个表中的唯一记录。这个字段必须包含一个唯一的值,并且不能为null。主键约束可以保证数据表中每一行数据都有一个唯一的标识符,以便可以轻松地查找、更新或删除该行数据。使用主键可以保证数据库中的数据不会因重复数据而出现错误,并且在查询数据库时也能更快地搜索和处理数据。

2、唯一约束(UNIQUE)

        唯一约束用于限制一个表中的一个或多个字段的值不能重复。与主键约束不同的是,唯一约束字段可以为空。唯一约束适用于需要保证某个字段具有唯一性的情况,例如电子邮件地址或电话号码。使用唯一约束可以保护数据库中的数据完整性,避免重复的数据出现。

3、默认约束(DEFAULT)

        默认约束用于指定一个字段的默认值,当没有指定这个字段的值时,就会使用默认值。使用默认约束可以确保在插入新记录时,所有必填字段都有一个默认值,避免字段值为空而导致错误。

4、外键约束(FOREIGN KEY)

        外键约束用于确保两个表之间的关系完整性。外键是一个指向另一个表中的主键的字段,它在保持数据的一致性和完整性方面起着重要的作用。当两个表之间存在主外键关系时,对于某个表的操作必须符合另一个表的相应规则,以保证数据的完整性。

5、非空约束(NOT NULL)

        非空约束是SQL中的一种约束,它用于确保某个字段值不能为空。在创建数据库表时,你可以通过非空约束来指定某个字段是否必须输入值。如果一个字段被指定为非空,那么在插入新记录或更新现有记录时,此字段不能为空,否则会产生错误。

三、主键

1、主键的注意事项

以下是在设计和使用主键时应该注意的事项:

1.1、主键必须唯一

每行记录必须有一个唯一的主键值,不能有两个或更多行具有相同的主键值。

1.2、主键应该简短

主键应该是尽可能短的,以优化性能和存储空间。一般情况下,主键应该是整数类型或短字符串。

1.3、主键应该简单

主键应该简单,以便于查询和使用。不推荐使用复杂数据类型,如图像、视频或长文本。

1.4、不要使用敏感信息作为主键

主键应该是不敏感的,不应该包含敏感或个人信息,如社会安全号码、身份证号码等。

1.5、主键应该是静态的

主键值应该是不变的,不应该随着时间的推移而发生变化。如果主键值必须随时间变化,则应使用时间戳或日期作为主键。

1.6、主键应该是简单的

主键应该是简单的,易于管理和维护。应该避免使用复杂的算法和运算符来生成主键值。

1.7、主键不应该包含空值

主键不能包含空值,因为空值不是唯一的。如果必须使用空值,则应该使用其他字段作为复合主键。

1.8、主键应该是稳定的

主键应该是稳定的,不能随着数据的变化而发生变化。如果主键必须变化,则应该使用另一个字段作为主键

2、设置主键的方式

在定义列时设置:ID INT PRIMARY KEY

在列定义完之后设置:primary KEY(id)

四、外键

1、外键的注意事项

        只有INNODB的数据库引擎支持外键,修改my.ini文件设置default-storage-engine=INNODB 外键必须与参照列的数据类型必须相同,(数值型要求长度和无符号都相同,字符串要求类型相同,长度可以不同)

2、设置外键的语法

        CONSTRAINT 外键名 FOREIGN KEY (外键字段)REFERENCES 参照表 (参照字段)    ON DELETE SET NULL ON UPDATE CASCADE 设置参照完整性

3、外键约束的参照操作

参照表的完整性操作:当对参照表的参照字段进行删除或更新时,外键表中的外键如何应对;

参照操作可选值:

  • RESTRICT拒绝参照表删除或更新参照字段;               
  • RESTRICT和NO ACTION相同,但这个指令只在mysql生效;                
  • CASCADE删除或更新参照表的参照字段时,外键表的记录同步删除更新;               
  • SET NULL 删除或更新参照表的参照字段时,外键表的外键设为NULL;

五、非空约束

使用非空约束有如下好处:

1、数据完整性

        非空约束确保了数据库表中每一行数据都有一个值,避免了空值或缺失数据的出现,从而提高数据的完整性。

2、业务规则

        某些数据在业务上可能需要强制要求输入,例如姓名、电话号码和邮件地址等。使用非空约束提醒用户必须输入这些数据,避免了因为空值或缺失数据而导致的业务错误。

3、查询优化

        对于某些高频查询操作,如where子句或join操作,如果某个字段设为非空,那么查询效率会更高。

        总之,非空约束是一个简单但非常有用的约束,它可以帮助保护数据库中的数据完整性,防止数据丢失和业务错误。当应用非空约束时,需要根据业务需求来选择需要的字段,以确保数据输入的完整性。

六、语法示例

1、添加主键约束

ALTER TABLE 表名称
ADD CONSTRAINT 约束名称 PRIMARY KEY (字段名称);

2、 添加唯一约束

ALTER TABLE 表名称
ADD CONSTRAINT 约束名称 UNIQUE (字段名称);

3、添加默认约束

ALTER TABLE 表名称 
ALTER COLUMN 字段名称 SET DEFAULT 默认值;

4、添加非空约束

CREATE TABLE Customer
(
CustomerID int PRIMARY KEY,
CustomerName varchar(50) NOT NULL,
Address varchar(100) NULL,
);

5、添加外键约束

ALTER TABLE 子表名称 
ADD CONSTRAINT 约束名称 
FOREIGN KEY (子表字段名称) 
REFERENCES 父表名称(父表字段名称);

七、总结

         SQL中的五大约束是保证数据库数据完整性不可或缺的重要组成部分。当应用这些约束时,必须考虑到业务规则和数据完整性的要求,以保证数据库中的数据是正确的、完整的和可靠的。