主键约束
CREATE TABLE trainings (
employee_id INT,
course_id INT,
taken_date DATE,
PRIMARY KEY (employee_id , course_id)
);PRIMARY KEY (employee_id , course_id) 与 CONSTRAINT id PRIMARY KEY (employee_id , course_id) 的区别:
在 SQL 语言中,CREATE TABLE 语句中的 PRIMARY KEY 和 CONSTRAINT 关键字可以用来定义主键。
它们的作用是相同的,都可以用于定义表的主键约束。
在这个例子中,使用 PRIMARY KEY 关键字定义了主键约束,它将 employee_id 和 course_id 这两个列组合在一起形成了一个复合主键。
这种写法是比较常见的,尤其是在定义表的时候就明确指定主键时,更倾向于使用 PRIMARY KEY语法。
而如果你想在表定义之后,再添加主键约束,或者想为主键约束指定名称、指定其他的约束条件等,则可以使用 CONSTRAINT关键字。
例如,下面的语句在创建表时没有明确指定主键,而是使用 CONSTRAINT 关键字在表创建之后添加了主键约束,并且指定了主键约束的名称为 id:
CREATE TABLE trainings (
employee_id INT,
course_id INT,
taken_date DATE,
CONSTRAINT id PRIMARY KEY (employee_id , course_id)
);添加主键约束
ALTER TABLE table_name
ADD CONSTRAINT PK_table_name PRIMARY KEY (id);删除主键约束
ALTER TABLE table_name
DROP CONSTRAINT PK_table_name;外键约束
当定义外键约束后,它会确保数据在引用两个表之间建立联系时保持一致性。
下面是一个实际例子,说明了外键约束的作用:
假设有两个表 employees 和 departments,其中 employees 表包含有关公司员工的信息,departments 表包含有关公司部门的信息。
为了确保这两个表之间的数据一致性,我们可以在 employees 表中添加一个外键,用于引用 departments 表中的部门 ID。
首先,我们需要在 departments 表中创建一个主键,以便在 employees 表中引用它。
下面是 departments 表的示例定义:
CREATE TABLE departments (
department_id INT PRIMARY KEY,
department_name VARCHAR(50)
);然后,我们可以在 employees 表中添加一个 department_id 列,作为外键列。
外键约束将确保在 employees 表中插入或更新数据时,只能引用在 departments 表中已经存在的部门 ID。
下面是 employees 表的示例定义:
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
employee_name VARCHAR(50),
department_id INT,
FOREIGN KEY (department_id) REFERENCES departments(department_id)
);在这个示例中,employees 表中的 department_id 列是外键列,departments 表中的 department_id 列是主键列。
外键约束确保在 employees 表中插入或更新数据时,只能引用在 departments 表中已经存在的部门 ID。
例如,如果尝试向 employees 表中插入一个不存在的部门 ID,则将引发外键约束错误。
同样,如果尝试将 employees 表中的 department_id 更新为一个不存在的部门 ID,则也将引发外键约束错误。
总之,外键约束确保了关系数据库中的数据一致性,可以防止引用另一个表中不存在的数据。
在上面的例子中,外键约束确保了 employees 表中的 department_id 只引用 departments 表中已经存在的部门 ID。
添加外键约束
ALTER TABLE orders
ADD CONSTRAINT fk_customer_id
FOREIGN KEY (customer_id) REFERENCES customers(customer_id);删除外键约束
ALTER TABLE orders
DROP CONSTRAINT fk_customer_id;唯一约束
在数据库中,UNIQUE 约束用于确保一列或多列的值在表中是唯一的。
当将 UNIQUE 约束添加到表的一列或多列时,任何尝试插入具有重复值的行的操作都将失败。
CREATE TABLE users (
id INT PRIMARY KEY,
username VARCHAR(50) UNIQUE,
email VARCHAR(100) UNIQUE,
password VARCHAR(100)
);在上面的示例中,我们在 username 和 email 列上添加了 UNIQUE 约束。
这意味着无法插入具有相同用户名或电子邮件地址的行。同时,我们还为 id 列添加了 PRIMARY KEY 约束,确保每个行都有唯一的标识符。
添加唯一约束
如果在已存在的表格上添加唯一约束,您需要使用 ALTER TABLE 语句。例如:
ALTER TABLE users
ADD CONSTRAINT unique_username UNIQUE (username);删除唯一约束
ALTER TABLE users
DROP CONSTRAINT unique_username;NOT NULL约束
列约束:
CREATE TABLE table_name (
column_name data_type NOT NULL
);表约束:
CREATE TABLE table_name (
column1_name data_type,
column2_name data_type,
...
CONSTRAINT constraint_name NOT NULL (column1_name, column2_name, ...)
);添加NOT NULL约束
可以使用 MODIFY:
ALTER TABLE table_name
MODIFY column_name data_type NOT NULL;也可以使用 ADD CONTRAINT:
ALTER TABLE table_name
ADD CONSTRAINT constraint_name CHECK (column_name IS NOT NULL);虽然使用 ADD CONSTRAINT 可以在一条 ALTER TABLE 语句中同时添加多个约束,但对于添加 NOT NULL 约束来说,使用 MODIFY 语句通常更简单直接。
使用 MODIFY 语句,您可以在一条语句中同时指定列名、数据类型和 NOT NULL 约束,而使用 ADD CONSTRAINT 则需要在约束中指定表达式来确保列不为空。因此,对于只需要添加单个约束的情况,使用 MODIFY 语句可能更加便捷。
删除NOT NULL约束
ALTER TABLE table_name
ALTER COLUMN column_name DROP NOT NULL;或者:
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;CHECK约束
CHECK 约束是关系数据库中的一种完整性约束,它用于限制表中某个列的取值范围,确保每一行数据都符合特定的条件。
CREATE TABLE student (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT CHECK (age >= 0 AND age <= 150),
gender VARCHAR(10) CHECK (gender IN ('男', '女')),
score INT
);添加CHECK约束
ALTER TABLE student
ADD CONSTRAINT age_constraint CHECK (age >= 0 AND age <= 150);删除CHECK约束
ALTER TABLE student
DROP CONSTRAINT age_constraint;