数据库关系设计与查询操作
立即解锁
发布时间: 2025-08-19 01:31:54 阅读量: 11 订阅数: 18 


PHP与MySQL:从入门到精通
### 数据库关系设计与查询操作
在数据库操作中,我们常常会遇到各种数据关系和查询需求。下面将详细介绍不同类型的数据关系以及如何使用 SQL 进行查询操作。
#### 1. 数据插入操作
在数据库中插入数据有两种常见的 `INSERT` 语法,它们能实现相同的功能,选择哪种主要取决于个人偏好。以下是具体的插入示例:
```sql
-- 插入作者数据
INSERT INTO `author` SET
`id` = 1,
`name` = 'Kevin Yank',
`email` = '[email protected]';
INSERT INTO `author` (`id`, `name`, `email`)
VALUES (2, 'Tom Butler', '[email protected]');
-- 插入笑话数据
INSERT INTO `joke` SET
`joketext` = 'How many programmers does it take to screw in a lightbulb? None, it\'s a hardware problem.',
`jokedate` = '2017-04-01',
`authorid` = 1;
INSERT INTO `joke` (`joketext`, `jokedate`, `authorid`)
VALUES (
'Why did the programmer quit his job? He didn\'t get arrays',
'2017-04-01',
1
);
INSERT INTO `joke` (`joketext`, `jokedate`, `authorid`)
VALUES (
'Why was the empty array stuck outside? It didn\'t have any keys',
'2017-04-01',
2
);
```
#### 2. 多表查询与连接操作
当数据分散存储在多个表中时,数据检索可能会变得复杂。但 MySQL 等关系型数据库提供了 `JOIN` 操作,让我们可以将多个表中的相关数据视为存储在一个表中。
##### 2.1 简单连接示例
简单连接的语法如下:
```sql
SELECT columns
FROM `table1`
INNER JOIN `table2`
ON condition(s) for data to be related
```
例如,我们要查询笑话及其作者信息,可使用以下查询:
```sql
SELECT `joke`.`id`, LEFT(`joketext`, 20), `name`, `email`
FROM `joke` INNER JOIN `author`
ON `authorid` = `author`.`id`
```
在这个查询中,我们将 `joke` 表和 `author` 表通过 `authorid` 和 `id` 列进行关联,从而获取所需的信息。
##### 2.2 多表查询代码示例
以下是使用 PHP 和 PDO 进行多表查询的代码示例:
```php
try {
$pdo = new PDO('mysql:host=localhost;dbname=ijdb;charset=utf8', 'ijdb', 'mypassword');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'SELECT `joke`.`id`, `joketext`, `name`, `email`
FROM `joke` INNER JOIN `author`
ON `authorid` = `author`.`id`';
$jokes = $pdo->query($sql);
$title = 'Joke list';
ob_start();
include __DIR__ . '/../templates/jokes.html.php';
$output = ob_get_clean();
}
catch (PDOException $e) {
$title = 'An error has occurred';
$output = 'Database error: ' . $e->getMessage() . ' in ' . $e->getFile() . ':' . $e->getLine();
}
include __DIR__ . '/../templates/layout.html.php';
```
同时,我们可以更新 `jokes.html.php` 模板来显示每个笑话的作者信息:
```php
<?php foreach($jokes as $joke): ?>
<blockquote>
<p>
<?=htmlspecialchars($joke['joketext'], ENT_QUOTES, 'UTF-8')?>
(by <a href="mailto:<?php echo htmlspecialchars($joke['email'], ENT_QUOTES, 'UTF-8'); ?>"><?php echo htmlspecialchars($joke['name'], ENT_QUOTES, 'UTF-8'); ?></a>)
<form action="deletejoke.php" method="post">
<inpu
```
0
0
复制全文
相关推荐










