基本连接表和外键

时间:2014-12-04 13:05:58

标签: php mysql sql

我正在创建一个用于个人开发的库应用程序,并希望进一步了解MySql。

我目前有两张桌子' book'和'类别'

图书

id   title                    author      category     isbn
---- -------                 ----------   ----------  ------- 
1    Treasure Chest          Jim Jones     1           14252637
2    Pirates Boat            Sue Smith     2           88447737
3    Adventure Land          Harry Jo      3           01918273
4    Winter Week             Sam Dill      3           00999337

类别

id       cat_name   
----     -------         
1        Horror
2        Kids
3        Fiction
4        Science

我正在做一个简单的搜索,我希望显示所有书籍(从书中选择*),我想显示所有书籍及其相应的类别。这有效,但显示的是类别编号,而不是类别名称。

e.g

id      title           author      category  isbn
2710    Animals 123     Tiny Touch    2       978-1-84958-877-5 
2709    Animal Homes    Tiny Touch    2       978-1-84958-880-5 
2708    Black and White Usborne       3       978-1-4095-2393-2 
2707    Babies          Usborne       1       978-1-4095-3575-1 

如何以cat_name和类别连接的方式更改这些表?

我试图在phpmyadmin中运行一个命令,但是它返回了一个错误;

ALTER TABLE book
ADD FOREIGN KEY (category) REFERENCES category(cat_name);

错误

#1452 - Cannot add or update a child row: a foreign key constraint fails (`sslib`.`#sql-1ab4_1dae`, CONSTRAINT `#sql-1ab4_1dae_ibfk_1` FOREIGN KEY (`category`) REFERENCES `category` (`cat_name`))

PHP

$sql = "SELECT * FROM book";
$res = $conn->query($sql) or trigger_error($conn->error."[$sql]");
while($row = $res->fetch_array()) { //line 101

    echo '<tbody>';
    echo '<tr>';
    echo '<td>' . $row['id'] . '</td>';
    echo '<td>' . $row['title'] . '</td>';
    echo '<td>' . $row['author'] . '</td>';
    echo '<td>' . $row['category'] . '</td>';
    echo '<td>' . $row['isbn'] . '</td>';
    echo '<td>' . $row['publicationYear'] . '</td>';
    echo '</tr>';
    echo '</tbody>';
};

我一直在关注外键和索引,但我似乎无法理解它们。 我对此很陌生,所以非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

使用sql join显示所有具有相应类别的书籍:

select
  b.title as 'book_title',
  c.cat_name as 'category_name'
from
  book b
  inner join category c on (c.id = b.category);

插入新书记录时,必须确保该类别存在。 MySQL已经通过提供参考完整性(在您的帖子外键中)来处理这个问题。参照完整性不适用于所有引擎。它在InnoDB中得到了支持。首先确保使用InnoDB,因为MySQL 5.5是默认的。

您可能想尝试使用MySQL Workbench。它支持图形表表示和它们之间的连接,还生成sql脚本来创建它们。

enter image description here

答案 1 :(得分:0)

请先删除图书和类别表之间的父子关系 之后你可以改变你的表格

要删除您的关系,请转到图书表格结构 之后,您将转到书表关系,然后删除索引类别字段