繁体   English   中英

如何检索外键和INSERT INTO表(MySQL / InnoDB)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM