[英]How to retrieve foreign key and INSERT INTO table (MySQL/InnoDB)
我在命令行和/或mysql>
提示符下面做了以下所有事情。
我是DB的新手,并注意到结构(教程)和定义(手册)上有很多站点,但没有关于实际示例的站点。 如果我有这样的两张桌子
CREATE TABLE IF NOT EXISTS owner
(
ID INT NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL UNIQUE,
PRIMARY KEY(ID)
)ENGINE=InnoDB
CREATE TABLE IF NOT EXISTS dog
(
ID INT NOT NULL AUTO_INCREMENT,
owner INT NOT NULL,
name VARCHAR(32) NOT NULL UNIQUE,
PRIMARY KEY(ID),
FOREIGN KEY (owner) REFERENCES owner(ID)
)ENGINE=InnoDB
如果我想添加表狗
INSERT INTO dog (owner, name) VALUES(get_owner_ID("Peter Griffin"), "Brian Griffin");
如何从名称中获取神秘的所有者ID(“Peter Griffin”)
您可以在插入dog
表时运行子选择,也可以创建自己的用户定义函数 。 用户定义的函数优于存储过程,因为它可以在插入期间调用。 因此:
CREATE TABLE IF NOT EXISTS owner
(
ID INT NOT NULL AUTO_INCREMENT,
name VARCHAR(32) NOT NULL UNIQUE,
PRIMARY KEY(ID)
)ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS dog
(
ID INT NOT NULL AUTO_INCREMENT,
owner INT NOT NULL,
name VARCHAR(32) NOT NULL UNIQUE,
PRIMARY KEY(ID),
FOREIGN KEY (owner) REFERENCES owner(ID)
)ENGINE=InnoDB;
现在创建函数:
DELIMITER //
DROP FUNCTION IF EXISTS get_owner_id//
CREATE FUNCTION get_owner_id(i_owner_name varchar(32)) returns integer
READS SQL DATA
BEGIN
declare v_owner_id int;
select id into v_owner_id from owner where name = i_owner_name;
return v_owner_id;
END//
DELIMITER ;
insert into owner(name) values ('Peter Griffin');
insert into dog (owner,name) values (get_owner_id('Peter Griffin'),'Brian Griffin');
您必须考虑一种处理owner
表中owner
当然不存在的情况的方法。 也许在所有者表中有一个默认的“未知所有者”,如果没有找到所有者,则从函数返回该名称? 有点候你...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.