MySQL - 快速指南


MySQL - 简介

什么是数据库?

数据库是存储数据集合的独立应用程序。每个数据库都有一个或多个不同的 API,用于创建、访问、管理、搜索和复制其所保存的数据。

也可以使用其他类型的数据存储,例如文件系统上的文件或内存中的大型哈希表,但对于这些类型的系统,数据获取和写入不会那么快速和容易。

如今,我们使用关系数据库管理系统(RDBMS)来存储和管理大量数据。这称为关系数据库,因为所有数据都存储在不同的表中,并且使用主键或称为外键的其他键建立关系。

关系数据库管理系统(RDBMS)是一个软件 -

  • 使您能够实现包含表、列和索引的数据库。

  • 保证各个表的行之间的引用完整性。

  • 自动更新索引。

  • 解释 SQL 查询并组合来自各个表的信息。

关系型数据库管理系统术语

在我们继续解释MySQL数据库系统之前,让我们先修改一些与数据库相关的定义。

  • 数据库- 数据库是具有相关数据的表的集合。

  • - 表是一个包含数据的矩阵。数据库中的表看起来像一个简单的电子表格。

  • - 一列(数据元素)包含一种且同类的数据,例如列邮政编码。

  • - 行(=元组、条目或记录)是一组相关数据,例如一个订阅的数据。

  • 冗余- 存储数据两次,冗余以使系统更快。

  • 主键- 主键是唯一的。一个键值不能在一张表中出现两次。有了一把钥匙,你只能找到一排。

  • 外键- 外键是两个表之间的链接引脚。

  • 复合键- 复合键(复合键)是由多列组成的键,因为一列不够唯一。

  • 索引- 数据库中的索引类似于书本后面的索引。

  • 引用完整性- 引用完整性确保外键值始终指向现有行。

MySQL数据库

MySQL 是一种快速、易于使用的 RDBMS,适用于许多小型和大型企业。MySQL 由瑞典公司 MySQL AB 开发、营销和支持。MySQL 变得如此流行有很多好的原因 -

  • MySQL 是在开源许可下发布的。因此您无需支付任何费用即可使用它。

  • MySQL 本身就是一个非常强大的程序。它处理最昂贵和最强大的数据库包的大部分功能。

  • MySQL 使用众所周知的 SQL 数据语言的标准形式。

  • MySQL 适用于多种操作系统和多种语言,包括 PHP、PERL、C、C++、JAVA 等。

  • MySQL 运行速度非常快,即使处理大型数据集也能很好地工作。

  • MySQL 对 PHP 非常友好,PHP 是最受赞赏的 Web 开发语言。

  • MySQL 支持大型数据库,表中最多可达 5000 万行或更多。表的默认文件大小限制为 4GB,但您可以将此值(如果您的操作系统可以处理)增加到 800 万太字节 (TB) 的理论限制。

  • MySQL 是可定制的。开源GPL许可证允许程序员修改MySQL软件以适应自己的特定环境。

在你开始之前

在开始本教程之前,您应该对 PHP 和 HTML 教程中涵盖的信息有基本的了解。

本教程主要关注在 PHP 环境中使用 MySQL。本教程中给出的许多示例对于 PHP 程序员来说非常有用。

我们建议您查看我们的PHP 教程以供参考。

MySQL-安装

MySQL 的所有下载都位于MySQL 下载选择所需的MySQL 社区服务器版本号以及您将运行它的平台。

在 Linux/UNIX 上安装 MySQL

在 Linux 系统上安装 MySQL 的推荐方法是通过 RPM。MySQL AB 在其网站上提供以下 RPM 可供下载 -

  • MySQL - MySQL 数据库服务器管理数据库和表、控制用户访问并处理 SQL 查询。

  • MySQL-client - MySQL 客户端程序,可以连接到服务器并与服务器交互。

  • MySQL-devel - 编译使用 MySQL 的其他程序时派上用场的库和头文件。

  • MySQL-shared - MySQL 客户端的共享库。

  • MySQL-be​​nch - MySQL 数据库服务器的基准测试和性能测试工具。

此处列出的 MySQL RPM 均构建在SuSE Linux 系统上,但它们通常可以毫无困难地运行在其他 Linux 变体上。

现在,您需要遵循下面给出的步骤来继续安装 -

  • 使用root用户登录系统。

  • 切换到包含 RPM 的目录。

  • 通过执行以下命令安装 MySQL 数据库服务器。请记住将斜体文件名替换为 RPM 的文件名。

[root@host]# rpm -i MySQL-5.0.9-0.i386.rpm

上面的命令负责安装 MySQL 服务器、创建 MySQL 用户、创建必要的配置并自动启动 MySQL 服务器。

您可以在 /usr/bin 和 /usr/sbin 中找到所有与 MySQL 相关的二进制文件。所有表和数据库都将在 /var/lib/mysql 目录中创建。

以下代码框有一个可选但推荐的步骤,以相同的方式安装其余的 RPM -

[root@host]# rpm -i MySQL-client-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-devel-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-shared-5.0.9-0.i386.rpm
[root@host]# rpm -i MySQL-bench-5.0.9-0.i386.rpm

在 Windows 上安装 MySQL

现在,任何版本的 Windows 上的默认安装都比以前容易得多,因为 MySQL 现在与安装程序一起整齐地打包在一起。只需下载安装程序包,将其解压缩到任意位置并运行 setup.exe 文件即可。

默认安装程序 setup.exe 将引导您完成这个简单的过程,并且默认情况下会将所有内容安装在 C:\mysql 下。

第一次从命令提示符启动服务器来测试服务器。转到mysqld 服务器的位置(可能是 C:\mysql\bin),然后输入 -

mysqld.exe --console

注意- 如果您使用的是 NT,则必须使用 mysqld-nt.exe 而不是 mysqld.exe

如果一切顺利,您将看到一些有关启动和InnoDB的消息。如果没有,您可能遇到权限问题。确保运行数据库进程的任何用户(可能是 MySQL)都可以访问保存数据的目录。

MySQL 不会将自己添加到开始菜单中,也没有特别好的 GUI 方式来停止服务器。因此,如果您倾向于通过双击 mysqld 可执行文件来启动服务器,您应该记住使用 mysqladmin、任务列表、任务管理器或其他 Windows 特定的方式手动停止该进程。

验证 MySQL 安装

MySQL 成功安装后,基表已初始化并且服务器已启动:您可以通过一些简单的测试来验证一切是否正常工作。

使用 mysqladmin 实用程序获取服务器状态

使用mysqladmin二进制文件检查服务器版本。该二进制文件在 Linux 上位于 /usr/bin 中,在 Windows 上位于 C:\mysql\bin 中。

[root@host]# mysqladmin --version

它将在 Linux 上产生以下结果。它可能会根据您的安装而有所不同 -

mysqladmin  Ver 8.23 Distrib 5.0.9-0, for redhat-linux-gnu on i386

如果您没有收到这样的消息,那么您的安装可能存在一些问题,您需要一些帮助来修复它。

使用 MySQL 客户端执行简单的 SQL 命令

您可以通过 MySQL 客户端并使用mysql命令连接到 MySQL 服务器。此时,您不需要提供任何密码,因为默认情况下它将设置为空白。

您只需使用以下命令 -

[root@host]# mysql

它应该得到 mysql> 提示符的奖励。现在,您已连接到 MySQL 服务器,并且可以在 mysql> 提示符下执行所有 SQL 命令,如下所示 -

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
|   mysql  | 
|   test   |  
+----------+
2 rows in set (0.13 sec)

安装后步骤

MySQL 附带了 MySQL root 用户的空白密码。成功安装数据库和客户端后,您需要设置 root 密码,如以下代码块所示 -

[root@host]# mysqladmin -u root password "new_password";

现在要连接到 MySQL 服务器,您必须使用以下命令 -

[root@host]# mysql -u root -p
Enter password:*******

UNIX 用户还希望将 MySQL 目录放入 PATH 中,这样您就不必每次要使用命令行客户端时都键入完整路径。

对于 bash,它会是这样的 -

export PATH = $PATH:/usr/bin:/usr/sbin

在启动时运行 MySQL

如果您想在启动时运行 MySQL 服务器,请确保 /etc/rc.local 文件中有以下条目。

/etc/init.d/mysqld start

另外,您应该在 /etc/init.d/ 目录中拥有 mysqld 二进制文件。

MySQL - 管理

运行和关闭 MySQL 服务器

首先检查您的 MySQL 服务器是否正在运行。您可以使用以下命令来检查它 -

ps -ef | grep mysqld

如果您的 MySql 正在运行,那么您将看到结果中列出了mysqld进程。如果服务器未运行,则可以使用以下命令启动它 -

root@host# cd /usr/bin
./safe_mysqld &

现在,如果您想关闭已经运行的 MySQL 服务器,则可以使用以下命令来完成:

root@host# cd /usr/bin
./mysqladmin -u root -p shutdown
Enter password: ******

设置 MySQL 用户帐户

要向 MySQL 添加新用户,只需向数据库mysql中的用户表添加新条目即可。

以下程序是添加具有 SELECT、INSERT 和 UPDATE 权限的新用户guest的示例,密码为guest123;SQL 查询是 -

root@host# mysql -u root -p
Enter password:*******
mysql> use mysql;
Database changed

mysql> INSERT INTO user 
   (host, user, password, 
   select_priv, insert_priv, update_priv) 
   VALUES ('localhost', 'guest', 
   PASSWORD('guest123'), 'Y', 'Y', 'Y');
Query OK, 1 row affected (0.20 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0.01 sec)

mysql> SELECT host, user, password FROM user WHERE user = 'guest';
+-----------+---------+------------------+
|    host   |   user  |     password     |    
+-----------+---------+------------------+
| localhost |  guest  | 6f8c114b58f2ce9e |
+-----------+---------+------------------+
1 row in set (0.00 sec)

添加新用户时,请记住使用 MySQL 提供的 PASSWORD() 函数对新密码进行加密。正如您在上面的示例中看到的,密码 mypass 被加密为 6f8c114b58f2ce9e。

请注意 FLUSH PRIVILEGES 语句。这告诉服务器重新加载授权表。如果您不使用它,那么至少在服务器重新启动之前您将无法使用新用户帐户连接到 MySQL。

您还可以通过在执行 INSERT 查询时将用户表中以下列的值设置为“Y”来为新用户指定其他权限,也可以稍后使用 UPDATE 查询更新它们。

  • 选择权限
  • 插入_权限
  • 更新权限
  • 删除_权限
  • 创建_priv
  • 删除权限
  • 重新加载权限
  • 关机权限
  • 进程权限
  • 文件权限
  • 授予权限
  • 参考文献_priv
  • 索引_priv
  • 更改_priv

添加用户帐户的另一种方法是使用 GRANT SQL 命令。以下示例将为名为TUTORIALS 的特定数据库添加用户zara和密码zara123

root@host# mysql -u root -p password;
Enter password:*******
mysql> use mysql;
Database changed

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
   -> ON TUTORIALS.*
   -> TO 'zara'@'localhost'
   -> IDENTIFIED BY 'zara123';

这还将在 MySQL 数据库表中创建一个名为user的条目。

注意- MySQL 不会终止命令,直到您在 SQL 命令末尾给出分号 (;)。

/etc/my.cnf 文件配置

在大多数情况下,您不应触摸此文件。默认情况下,它将具有以下条目 -

[mysqld]
datadir = /var/lib/mysql
socket = /var/lib/mysql/mysql.sock

[mysql.server]
user = mysql
basedir = /var/lib

[safe_mysqld]
err-log = /var/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid

在这里,您可以为错误日志指定不同的目录,否则您不应更改此表中的任何条目。

管理 MySQL 命令

以下是重要的 MySQL 命令的列表,您将不时使用这些命令来处理 MySQL 数据库 -

  • USE Databasename - 这将用于在 MySQL 工作区中选择一个数据库。

  • SHOW DATABASES - 列出可由 MySQL DBMS 访问的数据库。

  • SHOW TABLES - 使用 use 命令选择数据库后,显示数据库中的表。

  • SHOW COLUMNS FROM tablename:显示表的属性、属性类型、关键信息、是否允许NULL、默认值等信息。

  • SHOW INDEX FROM tablename - 显示表上所有索引的详细信息,包括主键。

  • SHOW TABLE STATUS LIKE tablename\G - 报告 MySQL DBMS 性能和统计信息的详细信息。

在下一章中,我们将讨论如何在 MySQL 中使用 PHP 语法。

MySQL-PHP 语法

MySQL 可以很好地与 PERL、C、C++、JAVA 和 PHP 等各种编程语言结合使用。在这些语言中,PHP 因其 Web 应用程序开发功能而成为最受欢迎的语言。

本教程主要关注在 PHP 环境中使用 MySQL。如果您对带有 PERL 的 MySQL 感兴趣,那么您可以考虑阅读PERL 教程。

PHP 提供了各种函数来访问 MySQL 数据库并操作 MySQL 数据库内的数据记录。您需要以与调用任何其他 PHP 函数相同的方式调用 PHP 函数。

与 MySQL 一起使用的 PHP 函数具有以下一般格式 -

mysql_function(value,value,...);

函数名称的第二部分是特定于函数的,通常是描述函数功能的单词。以下是我们将在教程中使用的两个函数 -

mysqli_connect($connect);
mysqli_query($connect,"SQL statement");

以下示例显示了 PHP 调用任何 MySQL 函数的通用语法。

<html>
   <head>
      <title>PHP with MySQL</title>
   </head>
   
   <body>
      <?php
         $retval = mysql_function(value, [value,...]);
         if( !$retval ) {
            die ( "Error: a related error message" );
         }
         // Otherwise MySQL  or PHP Statements
      ?>
   </body>
</html>

从下一章开始,我们将看到所有重要的 MySQL 功能以及 PHP。

MySQL-连接

使用 MySQL 二进制文件的 MySQL 连接

您可以在命令提示符下使用mysql二进制文件建立 MySQL 数据库。

例子

这是一个从命令提示符连接到 MySQL 服务器的简单示例 -

[root@host]# mysql -u root -p
Enter password:******

这将为您提供 mysql> 命令提示符,您可以在其中执行任何 SQL 命令。以下是上述命令的结果 -

以下代码块显示了上述代码的结果 -

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2854760 to server version: 5.0.9

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

在上面的示例中,我们使用root作为用户,但您也可以使用任何其他用户。任何用户都可以执行该用户允许的所有 SQL 操作。

您可以随时在 mysql> 提示符下使用exit命令断开与 MySQL 数据库的连接。

mysql> exit
Bye

使用 PHP 脚本连接 MySQL

PHP 提供了mysql_connect()函数来打开数据库连接。该函数采用五个参数,成功时返回 MySQL 链接标识符,失败时返回 FALSE。

句法

connection mysql_connect(server,user,passwd,new_link,client_flag);

先生。 参数及说明
1

服务器

可选 - 运行数据库服务器的主机名。如果未指定,则默认值为localhost:3306

2

用户

可选 - 访问数据库的用户名。如果未指定,则默认值将是拥有服务器进程的用户的名称。

3

密码

可选 - 访问数据库的用户的密码。如果未指定,则默认密码为空。

4

新链接

可选 - 如果使用相同的参数第二次调用 mysql_connect(),则不会建立新连接;相反,将返回已打开连接的标识符。

5

客户端标志

可选 - 以下常量的组合 -

  • MYSQL_CLIENT_SSL - 使用 SSL 加密。

  • MYSQL_CLIENT_COMPRESS - 使用压缩协议。

  • MYSQL_CLIENT_IGNORE_SPACE - 函数名称后允许有空格。

  • MYSQL_CLIENT_INTERACTIVE - 在关闭连接之前允许交互超时不活动秒数。

您可以随时使用另一个 PHP 函数mysql_close()断开与 MySQL 数据库的连接。该函数采用单个参数,该参数是mysql_connect()函数返回的连接。

句法

bool mysql_close ( resource $link_identifier );

如果未指定资源,则关闭最后打开的数据库。如果成功关闭连接,该函数返回 true,否则返回 false。

例子

尝试以下示例来连接到 MySQL 服务器 -

<html>
   <head>
      <title>Connecting MySQL Server</title>
   </head>
   <body>
      <?php
         $dbhost = 'localhost:3306';
         $dbuser = 'guest';
         $dbpass = 'guest123';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
         
         if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }
         echo 'Connected successfully';
         mysql_close($conn);
      ?>
   </body>
</html>

MySQL-创建数据库

使用 mysqladmin 创建数据库

您需要特殊权限才能创建或删除 MySQL 数据库。因此,假设您有权访问 root 用户,您可以使用 mysql mysqladmin二进制文件创建任何数据库。

例子

这是一个创建名为TUTORIALS 的数据库的简单示例-

[root@host]# mysqladmin -u root -p create TUTORIALS
Enter password:******

这将创建一个名为 TUTORIALS 的 MySQL 数据库。

使用 PHP 脚本创建数据库

PHP 使用mysql_query函数来创建或删除 MySQL 数据库。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。

句法

bool mysql_query( sql, connection );

先生。 参数及说明
1

sql

必需 - 用于创建或删除 MySQL 数据库的 SQL 查询

2

联系

可选 - 如果未指定,则将使用 mysql_connect 最后打开的连接。

例子

以下示例创建数据库 -

<html>
   <head>
      <title>Creating MySQL Database</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'root';
         $dbpass = 'rootpassword';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
         
         if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }
         echo 'Connected successfully<br />';
         $sql = 'CREATE DATABASE TUTORIALS';
         $retval = mysql_query( $sql, $conn );
         
         if(! $retval ) {
            die('Could not create database: ' . mysql_error());
         }
         echo "Database TUTORIALS created successfully\n";
         mysql_close($conn);
      ?>
   </body>
</html>

删除 MySQL 数据库

使用 mysqladmin 删除数据库

您需要特殊权限才能创建或删除 MySQL 数据库。因此,假设您有权访问 root 用户,您可以使用 mysql mysqladmin二进制文件创建任何数据库。

删除任何数据库时请务必小心,因为您将丢失数据库中的所有可用数据。

这是删除上一章中创建的数据库(TUTORIALS)的示例 -

[root@host]# mysqladmin -u root -p drop TUTORIALS
Enter password:******

这将向您发出警告,并确认您是否确实要删除该数据库。

Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'TUTORIALS' database [y/N] y
Database "TUTORIALS" dropped

使用 PHP 脚本删除数据库

PHP 使用mysql_query函数来创建或删除 MySQL 数据库。该函数采用两个参数,成功时返回 TRUE,失败时返回 FALSE。

句法

bool mysql_query( sql, connection );

先生编号 参数及说明
1

sql

必需 - 用于创建或删除 MySQL 数据库的 SQL 查询

2

联系

可选 - 如果未指定,则将使用 mysql_connect 最后打开的连接。

例子

尝试以下示例来删除数据库 -

<html>
   <head>
      <title>Deleting MySQL Database</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'root';
         $dbpass = 'rootpassword';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
         
         if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }
         echo 'Connected successfully<br />';
         $sql = 'DROP DATABASE TUTORIALS';
         $retval = mysql_query( $sql, $conn );
         
         if(! $retval ) {
            die('Could not delete database: ' . mysql_error());
         }
         echo "Database TUTORIALS deleted successfully\n";
         mysql_close($conn);
      ?>
   </body>
</html>

警告- 使用 PHP 脚本删除数据库时,它不会提示您进行任何确认。因此,删除 MySQL 数据库时要小心。

选择 MySQL 数据库

连接到 MySQL 服务器后,需要选择要使用的数据库。这是因为 MySQL 服务器可能有多个可用的数据库。

从命令提示符中选择 MySQL 数据库

从 mysql> 提示符中选择数据库非常简单。您可以使用SQL 命令来选择数据库。

例子

这是选择名为TUTORIALS 的数据库的示例-

[root@host]# mysql -u root -p
Enter password:******
mysql> use TUTORIALS;
Database changed
mysql> 

现在,您已经选择了TUTORIALS数据库,后续的所有操作都将在TUTORIALS数据库上进行。

注意- 所有数据库名称、表名称、表字段名称均区分大小写。因此,在给出任何 SQL 命令时,您必须使用正确的名称。

使用 PHP 脚本选择 MySQL 数据库

PHP 提供了函数mysql_select_db来选择数据库。成功时返回 TRUE,失败时返回 FALSE。

句法

bool mysql_select_db( db_name, connection );

先生。 参数及说明
1

数据库名称

必需 - 要选择的 MySQL 数据库名称

2

联系

可选 - 如果未指定,则将使用 mysql_connect 最后打开的连接。

例子

这是一个向您展示如何选择数据库的示例。

<html>
   <head>
      <title>Selecting MySQL Database</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'guest';
         $dbpass = 'guest123';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
         
         if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }
         echo 'Connected successfully';
         mysql_select_db( 'TUTORIALS' );
         
         mysql_close($conn);
      ?>
   </body>
</html>

MySQL - 数据类型

正确定义表中的字段对于数据库的整体优化非常重要。您应该仅使用您真正需要使用的字段的类型和大小。例如,如果您知道只会使用 2 个字符,则不要定义 10 个字符宽的字段。这些类型的字段(或列)也称为数据类型,位于您将在这些字段中存储的数据类型之后。

MySQL 使用许多不同的数据类型,分为三类 -

  • 数字
  • 日期和时间
  • 字符串类型。

现在让我们详细讨论它们。

数字数据类型

MySQL 使用所有标准 ANSI SQL 数字数据类型,因此如果您从不同的数据库系统访问 MySQL,这些定义对您来说会很熟悉。

以下列表显示了常见的数值数据类型及其描述 -

  • INT - 可以有符号或无符号的正常大小的整数。如果有符号,则允许的范围为 -2147483648 到 2147483647。如果无符号,则允许的范围为 0 到 4294967295。您最多可以指定 11 位的宽度。

  • TINYINT - 一个非常小的整数,可以有符号或无符号。如果有符号,允许的范围是 -128 到 127。如果无符号,允许的范围是 0 到 255。您可以指定最多 4 位的宽度。

  • SMALLINT - 可以有符号或无符号的小整数。如果有符号,允许的范围是 -32768 到 32767。如果无符号,允许的范围是 0 到 65535。您可以指定最多 5 位的宽度。

  • MEDIUMINT - 可以有符号或无符号的中等大小的整数。如果有符号,允许的范围是 -8388608 到 8388607。如果无符号,允许的范围是 0 到 16777215。您最多可以指定 9 位的宽度。

  • BIGINT - 可以有符号或无符号的大整数。如果有符号,则允许的范围为 -9223372036854775808 到 9223372036854775807。如果无符号,则允许的范围为 0 到 18446744073709551615。您最多可以指定 20 位的宽度。

  • FLOAT(M,D) - 不能无符号的浮点数。您可以定义显示长度 (M) 和小数位数 (D)。这不是必需的,默认为 10,2,其中 2 是小数位数,10 是总位数(包括小数)。FLOAT 的小数精度可以达到 24 位。

  • DOUBLE(M,D) - 不能无符号的双精度浮点数。您可以定义显示长度 (M) 和小数位数 (D)。这不是必需的,默认为 16,4,其中 4 是小数位数。对于 DOUBLE,小数精度可以达到 53 位。REAL 是 DOUBLE 的同义词。

  • DECIMAL(M,D) - 无法无符号的未压缩浮点数。在解压缩的小数中,每个小数对应一个字节。需要定义显示长度 (M) 和小数位数 (D)。NUMERIC 是 DECIMAL 的同义词。

日期和时间类型

MySQL 日期和时间数据类型如下 -

  • DATE - YYYY-MM-DD 格式的日期,介于 1000-01-01 和 9999-12-31 之间。例如,1973 年 12 月 30 日存储为 1973-12-30。

  • DATETIME - YYYY-MM-DD HH:MM:SS 格式的日期和时间组合,介于 1000-01-01 00:00:00 和 9999-12-31 23:59:59 之间。例如,1973 年12月 30 日下午 3:30将存储为 1973-12-30 15:30:00。

  • TIMESTAMP - 1970 年 1 月 1午夜到 2037 年某个时间之间的时间戳。这看起来像以前的 DATETIME 格式,只是数字之间没有连字符;1973 年12月 30 日下午 3:30将存储为 19731230153000 (YYYYMMDDHHMMSS)。

  • TIME - 以 HH:MM:SS 格式存储时间。

  • YEAR(M) - 以 2 位或 4 位格式存储年份。如果长度指定为 2(例如 YEAR(2)),则 YEAR 可以介于 1970 到 2069(70 到 69)之间。如果长度指定为 4,则 YEAR 可以是 1901 到 2155。默认长度为 4。

字符串类型

尽管数字和日期类型很有趣,但您存储的大多数数据都将采用字符串格式。此列表描述了 MySQL 中常见的字符串数据类型。

  • CHAR(M) - 长度在 1 到 255 个字符之间的固定长度字符串(例如 CHAR(5)),存储时用空格右侧填充到指定长度。不需要定义长度,但默认值为 1。

  • VARCHAR(M) - 长度在 1 到 255 个字符之间的可变长度字符串。例如,VARCHAR(25)。创建 VARCHAR 字段时必须定义长度。

  • BLOB 或 TEXT - 最大长度为 65535 个字符的字段。BLOB 是“二进制大型对象”,用于存储大量二进制数据,例如图像或其他类型的文件。定义为 TEXT 的字段也保存大量数据。两者之间的区别在于,存储数据的排序和比较在 BLOB 中区分大小写,而在 TEXT 字段中不区分大小写。不使用 BLOB 或 TEXT 指定长度。

  • TINYBLOB 或 TINYTEXT - 最大长度为 255 个字符的 BLOB 或 TEXT 列。未使用 TINYBLOB 或 TINYTEXT 指定长度。

  • MEDIUMBLOB 或 MEDIUMTEXT - 最大长度为 16777215 个字符的 BLOB 或 TEXT 列。您未使用 MEDIUMBLOB 或 MEDIUMTEXT 指定长度。

  • LONGBLOB 或 LONGTEXT - 最大长度为 4294967295 个字符的 BLOB 或 TEXT 列。您未使用 LONGBLOB 或 LONGTEXT 指定长度。

  • ENUM - 枚举,这是列表的一个奇特术语。定义 ENUM 时,您正在创建一个项目列表,必须从中选择值(或者可以为 NULL)。例如,如果您希望字段包含“A”或“B”或“C”,则可以将 ENUM 定义为 ENUM('A'、'B'、'C')并且仅包含这些值(或 NULL)可能会填充该字段。

下一章我们将讨论如何在 MySQL 中创建表。

创建 MySQL 表

首先,表创建命令需要以下详细信息 -

  • 表名
  • 字段名称
  • 每个字段的定义

句法

以下是创建 MySQL 表的通用 SQL 语法 -

CREATE TABLE table_name (column_name column_type);

现在,我们将在TUTORIALS数据库中创建下表。

create table tutorials_tbl(
   tutorial_id INT NOT NULL AUTO_INCREMENT,
   tutorial_title VARCHAR(100) NOT NULL,
   tutorial_author VARCHAR(40) NOT NULL,
   submission_date DATE,
   PRIMARY KEY ( tutorial_id )
);

在这里,有几项需要解释 -

  • 使用字段属性NOT NULL是因为我们不希望该字段为 NULL。因此,如果用户尝试创建具有 NULL 值的记录,那么 MySQL 将引发错误。

  • 字段属性AUTO_INCRMENT告诉 MySQL 继续将下一个可用数字添加到 id 字段。

  • 关键字PRIMARY KEY用于将列定义为主键。您可以使用以逗号分隔的多个列来定义主键。

从命令提示符创建表

通过 mysql> 提示符可以轻松创建 MySQL 表。您将使用 SQL 命令CREATE TABLE来创建表。

例子

这是一个示例,它将创建tutorials_tbl -

root@host# mysql -u root -p
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> CREATE TABLE tutorials_tbl(
   -> tutorial_id INT NOT NULL AUTO_INCREMENT,
   -> tutorial_title VARCHAR(100) NOT NULL,
   -> tutorial_author VARCHAR(40) NOT NULL,
   -> submission_date DATE,
   -> PRIMARY KEY ( tutorial_id )
   -> );
Query OK, 0 rows affected (0.16 sec)
mysql>

注意- MySQL 不会终止命令,除非您在 SQL 命令末尾给出分号 (;)。

使用 PHP 脚本创建表

要在任何现有数据库中创建新表,您需要使用 PHP 函数mysql_query()。您将使用正确的 SQL 命令传递其第二个参数来创建表。

例子

以下程序是使用 PHP 脚本创建表的示例 -

<html>
   <head>
      <title>Creating MySQL Tables</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'root';
         $dbpass = 'rootpassword';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
         
         if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }
         echo 'Connected successfully<br />';
         $sql = "CREATE TABLE tutorials_tbl( ".
            "tutorial_id INT NOT NULL AUTO_INCREMENT, ".
            "tutorial_title VARCHAR(100) NOT NULL, ".
            "tutorial_author VARCHAR(40) NOT NULL, ".
            "submission_date DATE, ".
            "PRIMARY KEY ( tutorial_id )); ";
         mysql_select_db( 'TUTORIALS' );
         $retval = mysql_query( $sql, $conn );
         
         if(! $retval ) {
            die('Could not create table: ' . mysql_error());
         }
         echo "Table created successfully\n";
         mysql_close($conn);
      ?>
   </body>
</html>

删除 MySQL 表

删除现有的 MySQL 表非常容易,但删除任何现有表时需要非常小心,因为删除表后丢失的数据将无法恢复。

句法

下面是删除 MySQL 表的通用 SQL 语法 -

DROP TABLE table_name ;

从命令提示符删除表

要从命令提示符删除表,我们需要在 mysql> 提示符下执行 DROP TABLE SQL 命令。

例子

以下程序是删除tutorials_tbl的示例-

root@host# mysql -u root -p
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> DROP TABLE tutorials_tbl
Query OK, 0 rows affected (0.8 sec)
mysql>

使用 PHP 脚本删除表

要删除任何数据库中的现有表,您需要使用 PHP 函数mysql_query()。您将使用适当的 SQL 命令传递其第二个参数来删除表。

例子

<html>
   <head>
      <title>Creating MySQL Tables</title>
   </head>
   
   <body>
      <?php
         $dbhost = 'localhost:3036';
         $dbuser = 'root';
         $dbpass = 'rootpassword';
         $conn = mysql_connect($dbhost, $dbuser, $dbpass);
         
         if(! $conn ) {
            die('Could not connect: ' . mysql_error());
         }
         echo 'Connected successfully<br />';
         $sql = "DROP TABLE tutorials_tbl";
         mysql_select_db( 'TUTORIALS' );
         $retval = mysql_query( $sql, $conn );
         
         if(! $retval ) {
            die('Could not delete table: ' . mysql_error());
         }
         echo "Table deleted successfully\n";
         mysql_close($conn);
      ?>
   </body>
</html>

MySQL - 插入查询

要将数据插入 MySQL 表,您需要使用 SQL INSERT INTO命令。您可以使用 mysql> 提示符或使用任何脚本(例如 PHP)将数据插入 MySQL 表中。

句法

以下是 INSERT INTO 命令的通用 SQL 语法,用于将数据插入 MySQL 表 -

INSERT INTO table_name ( field1, field2,...fieldN )
   VALUES
   ( value1, value2,...valueN );

要插入字符串数据类型,需要将所有值保留在双引号或单引号中。例如“值”

从命令提示符插入数据

要从命令提示符插入数据,我们将使用 SQL INSERT INTO 命令将数据插入 MySQL 表tutorials_tbl。

例子

以下示例将在tutorials_tbl表中创建3条记录 -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed

mysql> INSERT INTO tutorials_tbl 
   ->(tutorial_title, tutorial_author, submission_date)
   ->VALUES
   ->("Learn PHP", "John Poul", NOW());
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO tutorials_tbl
   ->(tutorial_title, tutorial_author, submission_date)
   ->VALUES
   ->("Learn MySQL", "Abdul S", NOW());
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO tutorials_tbl
   ->(tutorial_title, tutorial_author, submission_date)
   ->VALUES
   ->("JAVA Tutorial", "Sanjay", '2007-05-06');
Query OK, 1 row affected (0.01 sec)
mysql>

注意- 请注意所有箭头符号 (->) 并不是 SQL 命令的一部分。它们指示新行,并且由 MySQL 提示符自动创建,同时按 Enter 键,而不在命令的每行末尾给出分号。

在上面的示例中,我们没有提供tutorial_id,因为在创建表时,我们已经为此字段指定了AUTO_INCRMENT选项。因此 MySQL 会自动插入这些 ID。这里,NOW()是一个MySQL函数,它返回当前日期和时间。

使用 PHP 脚本插入数据

您可以在 PHP 函数mysql_query()中使用相同的 SQL INSERT INTO 命令将数据插入 MySQL 表中。

例子

此示例将从用户处获取三个参数并将它们插入到 MySQL 表中 -

<html>

   <head>
      <title>Add New Record in MySQL Database</title>
   </head>

   <body>
      <?php
         if(isset($_POST['add'])) {
            $dbhost = 'localhost:3036';
            $dbuser = 'root';
            $dbpass = 'rootpassword';
            $conn = mysql_connect($dbhost, $dbuser, $dbpass);
         
            if(! $conn ) {
               die('Could not connect: ' . mysql_error());
            }

            if(! get_magic_quotes_gpc() ) {
               $tutorial_title = addslashes ($_POST['tutorial_title']);
               $tutorial_author = addslashes ($_POST['tutorial_author']);
            } else {
               $tutorial_title = $_POST['tutorial_title'];
               $tutorial_author = $_POST['tutorial_author'];
            }

            $submission_date = $_POST['submission_date'];
   
            $sql = "INSERT INTO tutorials_tbl ".
               "(tutorial_title,tutorial_author, submission_date) "."VALUES ".
               "('$tutorial_title','$tutorial_author','$submission_date')";
               mysql_select_db('TUTORIALS');
            $retval = mysql_query( $sql, $conn );
         
            if(! $retval ) {
               die('Could not enter data: ' . mysql_error());
            }
         
            echo "Entered data successfully\n";
            mysql_close($conn);
         } else {
      ?>
   
      <form method = "post" action = "<?php $_PHP_SELF ?>">
         <table width = "600" border = "0" cellspacing = "1" cellpadding = "2">
            <tr>
               <td width = "250">Tutorial Title</td>
               <td>
                  <input name = "tutorial_title" type = "text" id = "tutorial_title">
               </td>
            </tr>
         
            <tr>
               <td width = "250">Tutorial Author</td>
               <td>
                  <input name = "tutorial_author" type = "text" id = "tutorial_author">
               </td>
            </tr>
         
            <tr>
               <td width = "250">Submission Date [   yyyy-mm-dd ]</td>
               <td>
                  <input name = "submission_date" type = "text" id = "submission_date">
               </td>
            </tr>
      
            <tr>
               <td width = "250"> </td>
               <td> </td>
            </tr>
         
            <tr>
               <td width = "250"> </td>
               <td>
                  <input name = "add" type = "submit" id = "add"  value = "Add Tutorial">
               </td>
            </tr>
         </table>
      </form>
   <?php
      }
   ?>
   </body>
</html>

在进行数据插入时,最好使用函数get_magic_quotes_gpc()来检查当前的 magic quote 配置是否已设置。如果此函数返回 false,则使用函数addslashes()在引号前添加斜杠。

您可以进行许多验证来检查输入的数据是否正确,并可以采取适当的操作。

MySQL - 选择查询

SQL SELECT命令用于从 MySQL 数据库获取数据。您可以在 mysql> 提示符以及任何脚本(如 PHP)中使用此命令。

句法

以下是从 MySQL 表中获取数据的 SELECT 命令的通用 SQL 语法 -

SELECT field1, field2,...fieldN 
FROM table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
  • 您可以使用一个或多个以逗号分隔的表来包含使用 WHERE 子句的各种条件,但 WHERE 子句是 SELECT 命令的可选部分。

  • 您可以在单个 SELECT 命令中获取一个或多个字段。

  • 您可以指定星号 (*) 来代替字段。在这种情况下,SELECT 将返回所有字段。

  • 您可以使用 WHERE 子句指定任何条件。

  • 您可以使用OFFSET指定一个偏移量,从该偏移量 SELECT 将开始返回记录。默认情况下,偏移量从零开始。

  • 您可以使用LIMIT属性限制退货数量。

从命令提示符获取数据

这将使用 SQL SELECT 命令从 MySQL 表tutorials_tbl获取数据。

例子

以下示例将返回tutorials_tbl表中的所有记录-

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl 
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|           1 | Learn PHP      | John Poul       | 2007-05-21      |
|           2 | Learn MySQL    | Abdul S         | 2007-05-21      |
|           3 | JAVA Tutorial  | Sanjay          | 2007-05-21      |
+-------------+----------------+-----------------+-----------------+
3 rows in set (0.01 sec)

mysql>

使用 PHP 脚本获取数据

您可以在 PHP 函数mysql_query()中使用相同的 SQL SELECT 命令。该函数用于执行SQL命令,然后可以使用另一个PHP函数mysql_fetch_array()来获取所有选定的数据。此函数以关联数组、数值数组或两者的形式返回行。如果没有更多行,则此函数返回 FALSE。

以下程序是一个简单的示例,它将展示如何从tutorials_tbl表中获取/显示记录。

例子

以下代码块将显示tutorials_tbl表中的所有记录。

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Tutorial ID :{$row['tutorial_id']}  <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

行的内容被分配给变量 $row,然后打印该行中的值。

注意- 当您想要将数组值直接插入字符串时,请始终记住添加大括号。

在上面的示例中,常量MYSQL_ASSOC用作 PHP 函数mysql_fetch_array()的第二个参数,以便它以关联数组的形式返回行。使用关联数组,您可以使用字段名称而不是索引来访问字段。

PHP 提供了另一个名为mysql_fetch_assoc()的函数,它也以关联数组的形式返回行。

例子

以下示例使用 mysql_fetch_assoc() 函数显示tutorial_tbl 表中的所有记录。

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
      FROM tutorials_tbl';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_assoc($retval)) {
      echo "Tutorial ID :{$row['tutorial_id']}  <br> ".
         "Title: {$row['tutorial_title']} <br> ".
         "Author: {$row['tutorial_author']} <br> ".
         "Submission Date : {$row['submission_date']} <br> ".
         "--------------------------------<br>";
   } 
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

您还可以使用常量MYSQL_NUM作为 PHP 函数 mysql_fetch_array() 的第二个参数。这将导致函数返回带有数字索引的数组。

例子

尝试以下示例,使用 MYSQL_NUM 参数显示tutorials_tbl 表中的所有记录。

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
      FROM tutorials_tbl';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_array($retval, MYSQL_NUM)) {
      echo "Tutorial ID :{$row[0]}  <br> ".
         "Title: {$row[1]} <br> ".
         "Author: {$row[2]} <br> ".
         "Submission Date : {$row[3]} <br> ".
         "--------------------------------<br>";
   }
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

所有上述三个示例都会产生相同的结果。

释放内存

最好在每个 SELECT 语句结束时释放游标内存。这可以通过使用 PHP 函数mysql_free_result()来完成。以下程序是展示如何使用它的示例。

例子

尝试以下示例 -

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }
   
   $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
      FROM tutorials_tbl';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }
   
   while($row = mysql_fetch_array($retval, MYSQL_NUM)) {
      echo "Tutorial ID :{$row[0]}  <br> ".
         "Title: {$row[1]} <br> ".
         "Author: {$row[2]} <br> ".
         "Submission Date : {$row[3]} <br> ".
         "--------------------------------<br>";
   }
   mysql_free_result($retval);
   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

在获取数据时,您可以编写任意复杂的代码,但过程将保持与上面提到的相同。

MySQL - WHERE 子句

我们已经看到了从 MySQL 表中获取数据的SQL SELECT命令。我们可以使用称为WHERE 子句的条件子句来过滤结果。使用此 WHERE 子句,我们可以指定选择标准以从表中选择所需的记录。

句法

以下代码块具有 SELECT 命令的通用 SQL 语法,带有 WHERE 子句,用于从 MySQL 表中获取数据 -

SELECT field1, field2,...fieldN table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • 您可以使用一个或多个由逗号分隔的表来包含使用 WHERE 子句的各种条件,但 WHERE 子句是 SELECT 命令的可选部分。

  • 您可以使用 WHERE 子句指定任何条件。

  • 您可以使用ANDOR运算符指定多个条件。

  • WHERE 子句还可以与 DELETE 或 UPDATE SQL 命令一起使用来指定条件。

WHERE子句的工作方式类似于任何编程语言中的if 条件。该子句用于将给定值与 MySQL 表中可用的字段值进行比较。如果外部给定的值等于 MySQL 表中的可用字段值,则返回该行。

以下是可与WHERE子句一起使用的运算符列表。

假设字段 A 包含 10,字段 B 包含 20,则 -

操作员 描述 例子
= 检查两个操作数的值是否相等,如果相等,则条件成立。 (A = B) 不正确。
!= 检查两个操作数的值是否相等,如果不相等则条件成立。 (A != B) 为真。
> 检查左操作数的值是否大于右操作数的值,如果是,则条件成立。 (A > B) 不正确。
< 检查左操作数的值是否小于右操作数的值,如果是,则条件成立。 (A < B) 为真。
>= 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。 (A >= B) 不正确。
<= 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。 (A <= B) 为真。

当您想要从表中获取选定的行时,特别是当您使用MySQL Join时,WHERE 子句非常有用。连接将在另一章中讨论。

使用主键搜索记录是一种常见的做法,可以使搜索速度更快。

如果给定条件与表中的任何记录都不匹配,则查询将不会返回任何行。

从命令提示符获取数据

这将使用带有 WHERE 子句的 SQL SELECT 命令从 MySQL 表tutorials_tbl中获取所选数据。

例子

以下示例将返回tutorials_tbl表中作者姓名为Sanjay的所有记录。

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl WHERE tutorial_author = 'Sanjay';
+-------------+----------------+-----------------+-----------------+
| tutorial_id | tutorial_title | tutorial_author | submission_date |
+-------------+----------------+-----------------+-----------------+
|      3      | JAVA Tutorial  |      Sanjay     |    2007-05-21   |      
+-------------+----------------+-----------------+-----------------+
1 rows in set (0.01 sec)

mysql>

除非对字符串执行LIKE比较,否则比较不区分大小写。您可以使用BINARY关键字使搜索区分大小写,如下所示 -

root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> SELECT * from tutorials_tbl \
   WHERE BINARY tutorial_author = 'sanjay';
Empty set (0.02 sec)

mysql>

使用 PHP 脚本获取数据

您可以在 PHP 函数mysql_query()中使用相同的 SQL SELECT 命令和 WHERE CLAUSE 。该函数用于执行SQL命令,稍后可以使用另一个PHP函数mysql_fetch_array()来获取所有选定的数据。此函数以关联数组、数值数组或两者的形式返回一行。如果没有更多行,则此函数返回 FALSE。

例子

以下示例将返回tutorials_tbl表中作者姓名为Sanjay的所有记录-

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'SELECT tutorial_id, tutorial_title, 
      tutorial_author, submission_date
      FROM tutorials_tbl
      WHERE tutorial_author = "Sanjay"';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

   while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
      echo "Tutorial ID :{$row['tutorial_id']}  <br> ".
      "Title: {$row['tutorial_title']} <br> ".
      "Author: {$row['tutorial_author']} <br> ".
      "Submission Date : {$row['submission_date']} <br> ".
      "--------------------------------<br>";
   } 

   echo "Fetched data successfully\n";
   mysql_close($conn);
?>

MySQL - 更新查询

可能存在需要修改 MySQL 表中现有数据的需求。您可以使用 SQL UPDATE命令来执行此操作。这将修改任何 MySQL 表的任何字段值。

句法

以下代码块具有 UPDATE 命令的通用 SQL 语法,用于修改 MySQL 表中的数据 -

UPDATE table_name SET field1 = new-value1, field2 = new-value2
[WHERE Clause]
  • 您可以更新一个或多个字段。
  • 您可以使用 WHERE 子句指定任何条件。
  • 您一次可以更新一个表中的值。

当您想要更新表中选定的行时,WHERE 子句非常有用。

从命令提示符更新数据

这将使用带有 WHERE 子句的 SQL UPDATE 命令来更新 MySQL 表tutorials_tbl中的选定数据。

例子

以下示例将更新tutorial_id 为3 的记录的tutorial_title字段。

root@host# mysql -u root -p password;
Enter password:*******

mysql> use TUTORIALS;
Database changed

mysql> UPDATE tutorials_tbl 
   -> SET tutorial_title = 'Learning JAVA' 
   -> WHERE tutorial_id = 3;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql>

使用 PHP 脚本更新数据

您可以在 PHP 函数mysql_query()中使用带或不带 WHERE 子句的 SQL UPDATE 命令。该函数将以与在 mysql> 提示符下执行类似的方式执行 SQL 命令。

例子

以下示例更新了tutorial_id 为3 的记录的tutorial_title字段。

<?php
   $dbhost = 'localhost:3036';
   $dbuser = 'root';
   $dbpass = 'rootpassword';
   $conn = mysql_connect($dbhost, $dbuser, $dbpass);
   
   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = 'UPDATE tutorials_tbl
      SET tutorial_title="Learning JAVA"
      WHERE tutorial_id=3';

   mysql_select_db('TUTORIALS');
   $retval = mysql_query( $sql, $conn );
   
   if(! $retval ) {
      die('Could not update data: ' . mysql_error());
   }
   echo "Updated data successfully\n";
   mysql_close($conn);
?>

MySQL - 删除查询

如果您想删除一条记录