我目前在 MySQL 数据库中一共创建了 12 个表。其中 11 个表共享相关数据并相互建立索引。我在填充表的每个单独字段中的值并确保它们正确索引时遇到了一些困难。我想知道是否有一种更简单的方法可以为一条记录填充所有表中的每个字段,而无需手动执行并且不必担心foreign_key
与另一个表的正确匹配(索引)。可能一个查询可以完成这项工作,但我不确定如何构建这样的查询。或与此示例特别相关的任何其他建议。
如果您想在我的数据库中创建表的精确副本,下面是表设计和查询的链接。
根据上一个问题中的表,您需要INSERT
先在独立表(或基表)上记录。其中一些表是event
、semester
、Major_Minor
等。这些表称为独立表,因为没有定义外键约束。
要在独立表上插入的示例查询,
-- INSERTING records on table event
INSERT INTO event (ID, event_description, event_datetime) VALUES
(1, 'hello', NOW()),
(2, 'world', NOW()),
(3, 'stack', NOW()),
(4, 'overflow', NOW());
-- INSERTING records on table semester
INSERT INTO semester (ID, SEMESTER_NAme) VALUES
(1, 'First Semester'),
(2, 'Second Semester'),
(3, 'Summer');
-- INSERTING records on table Major_Minor
INSERT INTO Major_Minor (ID, Major_Minor_Name) VALUES
(1, 'Math'),
(2, 'Science'),
(3, 'English');
-- INSERTING records on table class
INSERT INTO class (ID, class_name) VALUES
(1, 'Alpha'),
(2, 'Beta'),
(3, 'Gamma'),
(4, 'Omega');
插入记录后,您现在可以INSERT
在依赖表上。这些被称为依赖表,因为在它们上定义了外键约束。您不能在其他表中不存在的某些字段上添加值。依赖表的示例是Major_Class_br
表,
-- INSERTING records on table Major_Class_br
INSERT INTO Major_Class_br (ID, Class_ID, Major_Minor_ID) VALUES
(1,1,1),
(2,1,2),
(3,1,3),
(4,2,1),
(5,2,1),
(6,4,2);
如您所见, 和 的值Class_ID
已经Major_Minor_ID
存在于表中:class
并且Major_Minor
因为表Major_Class_br
依赖于它们。为了进一步说明这一点,请尝试执行下面的查询,其中表Class_ID
中尚不存在for 的值Class
,
INSERT INTO Major_Class_br (ID, Class_ID, Major_Minor_ID) VALUES (7,5,2);
你会看到这个错误
架构创建失败:无法添加或更新子行:外键约束失败(
databaseName
.major_class_br
, CONSTRAINTcc_fk1
FOREIGN KEY (Class_ID
) REFERENCESclass
(ID
)):