Mysql 设计数据库表以在允许插入之前检查另一个表中的id

Mysql 设计数据库表以在允许插入之前检查另一个表中的id,mysql,database,database-design,Mysql,Database,Database Design,我有一个非常简单的数据库问题,但我甚至不知道用谷歌搜索什么,所以希望有人能在这里帮助我 我试图创建两个相互关联的表。例如,假设我有一个包含员工姓名和员工id的员工表,然后我正在创建另一个包含员工id和奖金金额的表employee_bonus。我想让employee_奖金表在每次插入一行时自动检查employee表,以确保employee表中存在员工id,如果不存在,则拒绝插入。问题是,一个员工可能有多个奖金,所以我只想让它检查它是否存在,而不是一对一。这有意义吗?可能吗?我该怎么做?那叫什么 另

我有一个非常简单的数据库问题,但我甚至不知道用谷歌搜索什么,所以希望有人能在这里帮助我

我试图创建两个相互关联的表。例如,假设我有一个包含员工姓名和员工id的员工表,然后我正在创建另一个包含员工id和奖金金额的表employee_bonus。我想让employee_奖金表在每次插入一行时自动检查employee表,以确保employee表中存在员工id,如果不存在,则拒绝插入。问题是,一个员工可能有多个奖金,所以我只想让它检查它是否存在,而不是一对一。这有意义吗?可能吗?我该怎么做?那叫什么


另外,我正在MySql中进行此操作。

来自维基百科:外键

在关系数据库上下文中,外键是两个表之间的引用约束


由于它不是一对一的关系,请为员工奖金表提供自己的主键,并在员工表的id列和员工奖金表中的员工id之间建立外键关系

如果要避免在尝试添加缺少的员工时出现插入错误,请尝试以下操作:

insert into employee_bonus
select ?, ?, ? -- put your insert values in here
from employee
where employee_id = ?; -- put the employee_id in here

如果员工存在,这将插入一行,如果员工不存在,则不会执行任何操作。

以下是您正在寻找的基本示例:

CREATE TABLE employees (
 employee_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
 family_name VARCHAR(100) NOT NULL,
 first_name VARCHAR(100) NOT NULL,
 birth_date DATETIME NULL DEFAULT NULL,
 PRIMARY KEY(employee_id)
) ENGINE=INNODB;

CREATE TABLE employee_bonus (
 bonus_id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
 employee_id INT UNSIGNED NOT NULL,
 bonus_value DECIMAL(10,2) DEFAULT 0.00,
 PRIMARY KEY(bonus_id),
 KEY fk_employee_id (employee_id),
 CONSTRAINT fk_employee_constraint FOREIGN KEY fk_employee_id(employee_id) 
    REFERENCES employees(employee_id) ON DELETE CASCADE ON UPDATE CASCADE 
) ENGINE=INNODB;

你想谷歌外键或参考完整性约束谢谢!这正是我需要的!“外键”,现在我知道了!