如何使用外键填充子表 - MySql

时间:2017-09-30 05:22:28

标签: php mysql sql

我正在研究MySQL数据库。我是新手,这就是我遇到问题的原因。问题是使用引用父表的外键填充子表。我有两个表employee,其中包含以下列

  • id 作为主键,
  • 如first_name
  • 姓氏
  • birth_date

borrowed表,其中包含以下列

  • 参考作为主键
  • employId 作为外键
  • 预订

employeeId引用id表的主键employee。所以简单地说,这意味着一个具有相同身份的员工可以借阅多本书。当我将一些数据插入到employee表中时它会被插入,但是当我必须将数据插入到借来的表中时,我必须在employeeId列中手动插入该值。它不应该自动填充。或者我误解了外键的概念。

我的SQL代码



  $uname = "root";
  $pass = "";
  $sname ="localhost";
  $db ="nady";
   //Making database connection
  $con = mysqli_connect($sname,$uname,$pass,$db);

 $t1 = "CREATE TABLE IF NOT EXISTS employee (
	id smallint(5) unsigned AUTO_INCREMENT NOT NULL,
	firstname varchar(30),
	lastname varchar(30),
	birthdate date,
	PRIMARY KEY (id)
) ENGINE=InnoDB";
$con->query($t1);



$t2 = "CREATE TABLE IF NOT EXISTS borrowed (
	ref int(10) unsigned NOT NULL auto_increment,
	employeeid smallint(5) unsigned NOT NULL,
	book varchar(50),
	PRIMARY KEY (ref),
	FOREIGN KEY (employeeid) REFERENCES employee(id) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB";
$con->query($t2);
if(!$con->query($t2)){
	echo $con->error;
}


$i1 = "INSERT INTO employee VALUES(NULL,\"Nadeem\",\"Ahmad\",22)";
$con->query($i1);

$i2 = "INSERT INTO borrowed VALUES(NULL,1,\"Ahmad\")";
$con->query($i2);
if(!$con->query($i2)){
	echo $con->error;
}




  

简单我需要的是;例如,ID 1 的员工。谁借了3本书。因此,在借用的表中,employeeId列将包含值为 1 的三行和不同的书名。我的观点是,当我将数据插入其中时,我将如何填充employeeId列。比方说, John 已经借了三本书并且id为1然后如何将数据插入到借用了john的employeeId的借来的表中。我需要查询它。并查询以检索约翰借来的书籍。

3 个答案:

答案 0 :(得分:2)

外键用于链接两个表,表示列中的字段 (employId中的borrowed(在您的情况下)是指另一个表的主要键(来自id的{​​{1}})。

当您在employee中插入新行时,您必须指明正在使用该书的用户,以便将其插入该行。您必须知道正在执行此操作的用户。如果你有外键,你需要该用户的id,这应该是他的唯一标识符。要插入John已经拿到一本书,你需要知道John的id是1。

如果用户已经在您的borrowed表格中并且您知道他的名字和姓氏,您可以通过简单的选择获得ID ...

employee

...然后你可以使用获得的id进行插入。

如果是新用户,则需要先将用户添加到SELECT id FROM employee WHERE first_name='John' AND last_name='Smith' ,然后获取新ID,然后在employee中插入新行,无需重新查询要获取新id的borrowed表,可以使用PHP employee / mysqli::$insert_id函数,该函数为您提供上一个查询的PRIMARY键。例如......

mysqli_insert_id

我希望它有所帮助

答案 1 :(得分:1)

你只需改变这些行

$ employee_id = $ con> insert_id;

$ i2 =“INSERT INTO借用VALUES(NULL,”。$ employee_id。“,”Ahmad \“)”

首先通过inser_id mysql预定义函数获取最后一个插入ID作为$ employee_id,然后在借用表插入查询中添加此$ employee_id。

答案 2 :(得分:0)

您还可以使用MySQL函数LAST_INSERT_ID()。在向员工表中插入新员工之后,在OP中,此函数从任何先前的INSERT语句中获取ID。

因此INSERT语句可以缩短为此:

INSERT INTO borrowed (employeeid, book) VALUES(LAST_INSERT_ID(),'Ahmad')";

还请注意,由于它具有AUTO_INCREMENT,因此不需要(甚至可能甚至不允许)填充“ ref”列。

这是指向MySQL's documentation/function reference about LAST_INSERT_ID()的链接。