在MySQL中,CREATE TABLE命令用于创建新表,并且可以设置表约束来确保数据的完整性和准确性。以下是一些常见的表约束及其设置方法:
-
主键约束(PRIMARY KEY):
- 使用
PRIMARY KEY关键字指定主键列。 - 主键列必须唯一,并且不允许为NULL。
- 示例:
CREATE TABLE students (id INT PRIMARY KEY, name VARCHAR(50), age INT);
- 使用
-
唯一约束(UNIQUE):
- 使用
UNIQUE关键字指定某列或多列的组合必须唯一。 - 唯一约束允许NULL值(如果列定义为允许NULL)。
- 示例:
CREATE TABLE users (username VARCHAR(50) UNIQUE, email VARCHAR(100));
- 使用
-
检查约束(CHECK):
- 使用
CHECK关键字添加条件表达式,确保列中的值满足特定条件。 - 检查约束在插入或更新数据时进行验证。
- 示例:
CREATE TABLE products (price DECIMAL(10, 2), quantity INT CHECK (price > 0 AND quantity >= 0));
- 使用
-
外键约束(FOREIGN KEY):
- 使用
FOREIGN KEY关键字创建外键列,该列引用另一个表的主键。 - 外键列必须唯一,并且不允许为NULL(除非指定了
ON DELETE SET NULL或ON DELETE CASCADE)。 - 示例:
CREATE TABLE orders (order_id INT PRIMARY KEY, product_id INT, supplier_id INT, FOREIGN KEY (product_id) REFERENCES products(id), FOREIGN KEY (supplier_id) REFERENCES suppliers(id));
- 使用
-
默认值约束(DEFAULT):
- 使用
DEFAULT关键字为列指定默认值。 - 当插入新行且未为该列提供值时,将使用默认值。
- 示例:
CREATE TABLE employees (salary DECIMAL(10, 2), join_date DATE DEFAULT CURRENT_DATE);
- 使用
-
非空约束(NOT NULL):
- 使用
NOT NULL关键字指定列不允许为NULL。 - 必须在插入或更新数据时为列提供值。
- 示例:
CREATE TABLE contact_info (email VARCHAR(100) NOT NULL, phone VARCHAR(20));
- 使用
在创建表时,可以将这些约束与CREATE TABLE命令一起使用,以确保数据的完整性和准确性。例如:
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
phone VARCHAR(20),
hire_date DATE NOT NULL,
job_id INT,
salary DECIMAL(10, 2),
manager_id INT,
FOREIGN KEY (job_id) REFERENCES jobs(job_id),
FOREIGN KEY (manager_id) REFERENCES employees(id)
);
在这个示例中,我们定义了一个employees表,其中包含了主键约束、非空约束、唯一约束和外键约束。









