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