主键约束,外键约束,unique约束和check约束的区别
时间: 2024-05-25 15:18:12 浏览: 18
主键约束:主键是一种特殊的唯一性约束,用于标识唯一性的字段或字段组合,并且不允许为空。主键约束保证了表中每行数据都有唯一的标识符。
外键约束:外键是一种用于关联两个表的字段,它指向另一个表的主键。外键约束保证了在关联表中,每个外键值都存在于另一个表的主键中。
唯一约束:唯一约束用于确保表中某个字段或字段组合的唯一性。与主键约束不同的是,唯一约束允许空值。
检查约束:检查约束用于确保表中某个字段的数据满足特定条件,例如值的范围、格式或数据类型。检查约束可以是简单的比较运算符,也可以是复杂的表达式。
总之,主键约束用于标识唯一性,外键约束用于关联两个表,唯一约束用于确保唯一性,检查约束用于确保数据满足特定条件。
相关问题
主键(primary key)约束、外键(foreign key)约束、唯一性(unique)约束和检查(check)约束
主键(primary key)约束是一种用于唯一标识表中每一行的约束。它确保表中的每一行都具有唯一的标识符,并且不允许为空。主键约束可以由一个或多个列组成,这些列的值必须是唯一的。
外键(foreign key)约束用于建立表之间的关系。它定义了一个列或一组列,这些列的值必须与另一个表中的主键或唯一键的值相匹配。外键约束可以确保数据的完整性,防止无效的引用和维护表之间的关联。
唯一性(unique)约束用于确保表中的某一列或一组列的值是唯一的。唯一性约束可以防止重复的值出现在列中,但允许空值。
检查(check)约束用于限制列中的值必须满足指定的条件。检查约束可以是简单的比较运算符,也可以是复杂的表达式。它可以用于限制列中的值的范围、数据类型或其他条件。
以下是一个示例,演示了如何在Oracle数据库中创建主键约束、外键约束、唯一性约束和检查约束:
1. 创建主键约束:
```sql
CREATE TABLE employees (
employee_id INT PRIMARY KEY,
employee_name VARCHAR(50)
);
```
2. 创建外键约束:
```sql
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
```
3. 创建唯一性约束:
```sql
CREATE TABLE products (
product_id INT PRIMARY KEY,
product_name VARCHAR(50),
product_code VARCHAR(10) UNIQUE
);
```
4. 创建检查约束:
```sql
CREATE TABLE students (
student_id INT PRIMARY KEY,
student_name VARCHAR(50),
age INT CHECK (age >= 18)
);
```
not+null+非空 unique+唯一约束 primary+key+主键约束 foreign+key+外键约束 check+检查约束+对填写内容约束default+默认值约束 创建表+(添加)
以下是Oracle数据库中常见约束的介绍和创建表时添加约束的示例:
- not null约束:用于确保列中的值不为空。在创建表时,可以在列定义中使用NOT NULL关键字来定义非空约束。例如:
```sql
CREATE TABLE employees (
employee_id NUMBER(5) PRIMARY KEY,
first_name VARCHAR2(50) NOT NULL,
last_name VARCHAR2(50) NOT NULL,
email VARCHAR2(100) NOT NULL UNIQUE,
hire_date DATE NOT NULL,
salary NUMBER(8,2) NOT NULL
);
```
- unique约束:用于确保列中的值是唯一的。在创建表时,可以在列定义中使用UNIQUE关键字来定义唯一约束。例如:
```sql
CREATE TABLE departments (
department_id NUMBER(5) PRIMARY KEY,
department_name VARCHAR2(50) NOT NULL UNIQUE,
manager_id NUMBER(5),
location_id NUMBER(5)
);
```
- primary key约束:用于定义表中的主键。在创建表时,可以在列定义中使用PRIMARY KEY关键字来定义主键约束。例如:
```sql
CREATE TABLE countries (
country_id CHAR(2) PRIMARY KEY,
country_name VARCHAR2(40) NOT NULL,
region_id NUMBER(1)
);
```
- foreign key约束:用于确保表中的数据完整性,通过与另一个表的主键或唯一键进行关联。在创建表时,可以使用FOREIGN KEY关键字来定义外键约束。例如:
```sql
CREATE TABLE employees (
employee_id NUMBER(5) PRIMARY KEY,
first_name VARCHAR2(50) NOT NULL,
last_name VARCHAR2(50) NOT NULL,
email VARCHAR2(100) NOT NULL UNIQUE,
hire_date DATE NOT NULL,
salary NUMBER(8,2) NOT NULL,
department_id NUMBER(5),
CONSTRAINT fk_department_id FOREIGN KEY (department_id) REFERENCES departments (department_id)
);
```
- check约束:用于确保列中的值符合指定的条件。在创建表时,可以在列定义中使用CHECK关键字来定义检查约束。例如:
```sql
CREATE TABLE employees (
employee_id NUMBER(5) PRIMARY KEY,
first_name VARCHAR2(50) NOT NULL,
last_name VARCHAR2(50) NOT NULL,
email VARCHAR2(100) NOT NULL UNIQUE,
hire_date DATE NOT NULL,
salary NUMBER(8,2) NOT NULL,
commission_pct NUMBER(2,) CHECK (commission_pct >= 0 AND commission_pct <= 1)
);
```
- default约束:用于在插入数据时为列提供默认值。在创建表时,可以在列定义中使用DEFAULT关键字来定义默认值约束。例如:
```sql
CREATE TABLE employees (
employee_id NUMBER(5) PRIMARY KEY,
first_name VARCHAR2(50) NOT NULL,
last_name VARCHAR2(50) NOT NULL,
email VARCHAR2(100) NOT NULL UNIQUE,
hire_date DATE NOT NULL,
salary NUMBER(8,2) NOT NULL,
commission_pct NUMBER(2,2) DEFAULT 0
);
```
- 创建表时添加约束:在创建表时,可以在列定义之后使用CONSTRAINT关键字来添加约束。例如:
```sql
CREATE TABLE employees (
employee_id NUMBER(5) PRIMARY KEY,
first_name VARCHAR2(50) NOT NULL,
last_name VARCHAR2(50) NOT NULL,
email VARCHAR2(100) NOT NULL UNIQUE,
hire_date DATE NOT NULL,
salary NUMBER(8,2) NOT NULL,
department_id NUMBER(5),
CONSTRAINT fk_department_id FOREIGN KEY (department_id) REFERENCES departments (department_id),
CONSTRAINT chk_salary CHECK (salary >= 0)
);
```