我正在创建一个用于个人开发的库应用程序,并希望进一步了解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>';
};
我一直在关注外键和索引,但我似乎无法理解它们。 我对此很陌生,所以非常感谢任何帮助。
答案 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脚本来创建它们。
答案 1 :(得分:0)
请先删除图书和类别表之间的父子关系 之后你可以改变你的表格
要删除您的关系,请转到图书表格结构 之后,您将转到书表关系,然后删除索引类别字段