Create table `school`.`score`( `id` varchar(10) NOT NULL, `cid` varchar(10) NOT NULL, `sc` int(10), primary key (`id`, `cid`), constraint `MUL` foreign key (`id`) references `school`.`students`(`id`), constraint `MUL` foreign key (`cid`) references `school`.`course`(`cid`) ) ENGINE=InnoDB charset=utf8 collate=utf8_general_ci
时间: 2025-06-30 13:15:10 浏览: 4
在 MySQL 的 InnoDB 存储引擎中,使用 `CREATE TABLE` 语句可以定义主键(Primary Key)和外键(Foreign Key)约束。以下是一个示例,展示如何创建一个带有主键和外键约束的数据库表:
```sql
CREATE TABLE department (
dept_id INT AUTO_INCREMENT PRIMARY KEY,
dept_name VARCHAR(100) NOT NULL
);
```
上述语句创建了一个名为 `department` 的表,其中包含两个字段:`dept_id` 和 `dept_name`。`dept_id` 字段被定义为主键,这意味着它自动具有唯一性和非空性约束。
接下来,我们创建一个名为 `employee` 的表,并在其上定义主键和外键约束:
```sql
CREATE TABLE employee (
emp_no CHAR(6) PRIMARY KEY,
department_id CHAR(10),
FOREIGN KEY (department_id) REFERENCES department(dept_id)
);
```
在这个例子中,`emp_no` 被指定为主键,而 `department_id` 被用作外键,引用了 `department` 表中的 `dept_id` 字段。这确保了 `employee` 表中的 `department_id` 值必须存在于 `department` 表的 `dept_id` 字段中 [^1]。
如果需要在一个表中添加多个唯一约束,例如电话号码和身份证号都必须唯一,可以通过 `ALTER TABLE` 语句来实现:
```sql
ALTER TABLE employee ADD UNIQUE KEY (tel);
ALTER TABLE employee ADD UNIQUE KEY (cardid);
```
此外,在定义外键时,还可以指定更新和删除操作的行为,比如级联更新或限制删除。但是需要注意的是,如果存在违反外键约束的情况,如尝试插入无效的 `user_id` 到 `tbl_order` 表中,则会收到错误信息,阻止该操作 [^3]。
对于默认值约束,可以在字段定义时使用 `DEFAULT` 关键字,如下所示:
```sql
CREATE TABLE employees (
emp_id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
hire_date DATE DEFAULT CURRENT_DATE,
salary DECIMAL(10,2) CHECK (salary > 0)
);
```
这里,`hire_date` 字段有一个默认值 `CURRENT_DATE`,当没有显式提供日期时,将自动设置为当前日期。同时,`salary` 字段有一个检查约束,确保工资大于零 [^5]。
最后,要查看某个表的所有约束,可以查询 `information_schema.table_constraints` 视图:
```sql
SELECT * FROM information_schema.table_constraints WHERE table_name = 'employee';
```
这样就可以获取到 `employee` 表上的所有约束信息 [^4]。
阅读全文
相关推荐

















