我正在使用 Rails Fixtures 将一些测试数据加载到我的数据库中,并且不小心引入了超出范围的外键。
令我惊讶的是,尽管有参照完整性约束(该工作),数据库还是接受了它。我尝试使用 PostgreSQL 和 MySQL InnoDB 并且都允许。
例子:
在数据库“风味”中有一个数字主键(id),5 个条目(1 到 5)。我可以引入不良数据:
Icecream_1:名称:我的冰淇淋 flavor_id:6
固定装置加载怎么可能绕过我的数据库约束?
谢谢你。
这里有两张表。拥有 200 个 user_types(假数据),我能够介绍一个 user_type_id 为 201 的用户,但只能来自固定装置,pgAdmin 禁止它。
CREATE SEQUENCE user_types_id_seq;
CREATE TABLE user_types (
id SMALLINT
NOT NULL
DEFAULT NEXTVAL('user_types_id_seq'),
name VARCHAR(45)
NOT NULL
UNIQUE,
PRIMARY KEY (id));
CREATE SEQUENCE users_id_seq;
CREATE TABLE users (
id BIGINT
NOT NULL
DEFAULT NEXTVAL('users_id_seq'),
user_type_id SMALLINT
NOT NULL
REFERENCES user_types (id) ON DELETE CASCADE ON UPDATE CASCADE,
PRIMARY KEY (id));
---------
Fixture
<% for i in (1..201) %>
user_<%= i %>:
id: <%= i %>
user_type_id: <%= i %>
<% end %>
正如我所说,innoDb 和 postgresql 都接受了坏密钥。
谢谢