我正在从命令行和/或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”)
答案 0 :(得分:2)
您可以在插入dog
表格时运行子选择,也可以创建自己的user defined function。用户定义的函数优于存储过程,因为它可以在插入期间调用。因此:
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
表中所有者不存在的情况的方法。也许在所有者表中有一个默认的“未知所有者”,如果没有找到所有者,则从函数返回该名称?有点像你...