MySQL中约束:保护你的数据完整性(mysql中约束)
MySQL中的约束(Constraints)是用于指定列或表的规则的语法,它有助于保护数据库表中的数据完整性。它能够确保表里的数据保持一致,不会因为执行 INSERT 或 UPDATE 操作而带来破坏数据的风险。约束包括 not null,unique, primary key, foreign key, check 和 default 等类型,我们可以在数据库表创建或者列定义时指定。
not null 类型约束是最基本的约束,它指定某一列不能包含 NULL 这种特殊的值。举个例子,在一个用户表中不应该出现空的用户名字段,我们可以通过以下方式执行创建:
mysql> CREATE TABLE Users (
-> user_id int NOT NULL, -> user_name varchar(60) NOT NULL,
-> password varchar(60) NOT NULL, -> created_at datetime NOT NULL
-> );
这里我们把user_id,user_name,password和created_at这几个列都声明为 NOT NULL 类型,表示这几列的值都不能为空。
unique约束限制表中的特定列具有唯一性,即不能重复。举个例子,如果我们想确保用户名唯一,可以使用如下语句:
mysql> ALTER TABLE Users
-> ADD CONSTRAINT unique_name UNIQUE (user_name);
primary key约束用于指定表的唯一标识符,在一个表中,主键只能有一个,它要求列值必须唯一,不能为空。
例如,我们可以把user_id这一列定为主键,如下所示:
mysql> ALTER TABLE Users
-> ADD CONSTRAINT pk_user_id PRIMARY KEY (user_id);
foreign key约束,也就是外键约束,用于确保一个表中的某一列的值只能是另一个表中的值的子集。举个例子,我们可以使用如下语句把一张国家表(Countries)与用户表(Users)建立外键关系:
mysql> ALTER TABLE Users
-> ADD CONSTRAINT fk_user_country_name -> FOREIGN KEY (country_name)
-> REFERENCES Countries (country_name);
check约束用于在表中强制具有指定属性的值。 举个例子,我们可以使用如下语句强制在用户表中要求用户名长度大于6:
mysql> ALTER TABLE Users
-> ADD CONSTRAINT check_user_name -> CHECK (LENGTH(user_name) > 6);
default约束是给表中的某一列指定一个默认值,这个值可以是常量,也可以是函数。
例如,我们可以使用如下语句为用户表的created_at列添加默认值:
mysql> ALTER TABLE Users
-> ALTER COLUMN created_at SET DEFAULT CURRENT_TIMESTAMP;
MySQL中的约束是一个重要的数据库设计概念,它能够让我们的数据库表变得更加严谨和可靠。约束能够保证表中的数据完整性,减少因为执行 INSERT 或 UPDATE 操作带来的数据破坏风险,是MySQL中必不可少的一部分。