Table of Contents
前言
第 1 章 MySQL - 教程
MySQL 介绍
MySQL 安装
MySQL 管理
MySQL PHP语法
连接 MySQL 服务器
创建 MySQL 数据库
MySQL 终止数据库
MySQL 选择数据库
MySQL 数据类型
创建 MySQL 表
MySQL 下拉表
MySQL 插入查询
MySQL 选择查询
MySQL Where Clause
MySQL 更新查询
MySQL 删除查询
MySQL Like Clause
MySQL 排序结果
MySQL Using Join
MySQL NULL Values
MySQL 正则表达式
MySQL 汇报
MySQL ALTER 命令
MySQL 索引
MySQL 临时表
MySQL 复制表
MySQL 数据库信息
MySQL Using Sequences
MySQL Handling Duplicates
MySQL SQL Injection
MySQL 数据导出
MySQL 数据导入
第 2 章 MySQL 帮助资源
一些有用的 MySQL 函数与子句
一些非常有用的学习资源
第 3 章 附录
MySQL AVG 函数
MySQL BETWEEN 子句
MySQL CONCAT 函数
MySQL COUNT 函数
MySQL Group By 子句
MySQL MAX 函数
MySQL MIN 函数
MySQL 数值函数
MySQL RAND 函数
MySQL SQRT 函数
MySQL 字符串函数
MySQL SUM 函数
MySQL 日期与时间方面的函数
前言
MySQL 目前是最流行的开源关系型 SQL 数据库管理系统,是一种用于最适于开发 Web 软件应用的 RDBMS。
本教程将引领你快速了解 MySQL,熟悉 MySQL 编程知识。
适宜的读者对象
本系列教程专为初学者量身打造,能够帮助他们从零开始逐步了解 MySQL 的相关知识。
预备知识
要想实际练习本系列教程中的各种范例,读者应该事先知道什么是数据库(特别是 RDBMS),并且明白何为编程语言。
编译/执行 MySQL 程序
假如你想利用 SQLite DBMS 来编译并执行 SQL 程序,但苦于手头没有安装该系统,不要着急。有一个架设于高端专用服务器上的网站:compileonline.com,它可以为你提供真实的编程体验,而且具有非常方便的一键执行的功能。它不仅是在线的,而且更棒的是:它是完全免费的!
更新日期 |
更新内容 |
2015-04-14 |
MySQL 教程发布 |
1
MySQL - 教程
MySQL 介绍
何谓数据库
数据库是一种用于存储数据集合的独立应用程序。每种数据库都会有一个或多个独特的 API,用来创建、访问、管理、搜索或复制数据库中保存的数据。
除了数据库之外,也可以使用其他一些数据存储方式,比如说利用文件系统来存储文件,或者利用内存中的大型散列表,但这些系统均无法快速便利地提取或写入数据。
因此,现在业界一般采用关系型数据库管理系统(RDBMS)来存储并管理海量数据。之所以称其为关系型数据库,是因为所有数据都存储在不同的表中,表之间的关系是建立在主键或其他键(被称为外键)的基础之上的。
关系型数据库管理系统(RDBMS)具有以下特点:
- 能够实现一种具有表、列与索引的数据库。
- 保证不同表的行之间的引用完整性。
- 能自动更新索引。
- 能解释 SQL 查询,组合多张表的信息。
RDBMS 术语
在继续讨论 MySQL 数据库系统之前,先让我们来说明一些关于数据库的术语定义:
- 数据库(Database):数据库是带有相关数据的表的集合。
- 表(Table):表是带有数据的矩阵。数据库中的表就像一种简单的电子表格。
- 列(Column):每一列(数据元素)都包含着同种类型的数据,比如邮编。
- 行(Row):行(又被称为元组、项或记录)是一组相关数据,比如有关订阅量的数据。
- 冗余(Redundancy):存储两次数据,以便使系统更快速。
- 主键(Primary Key):主键是唯一的。同一张表中不允许出现同样两个键值。一个键值只对应着一行。
- 外键(Foreign Key):用于连接两张表。
- 复合键(Compound Key):复合键(又称组合键)是一种由多列组成的键,因为一列并不足以确定唯一性。
- 索引(Index):它在数据库中的作用就像书后的索引一样。
- 引用完整性(Referential Integrity):用来确保外键一直指向已存在的一行。
MySQL 数据库
MySQL 是一种快速易用的 RDBMS,很多企业(不分规模大小)都在使用它来构建自己的数据库。MySQL 由一家瑞典公司 MySQL AB 开发、运营并予以支持。它之所以非常流行,原因在于具备以下这些优点:
- 基于开源许可发布,无需付费即可使用。
- 自身的功能非常强大,足以匹敌绝大多数功能强大但却价格昂贵的数据库软件。
- 使用业内所熟悉的标准SQL数据库语言。
- 可运行于多个操作系统,支持多种语言,包括 PHP、PERL、C、C++ 及 Java 等语言。
- 非常迅速,即使面对大型数据集也毫无滞涩。
- 非常适用于 PHP 这种 Web 开发者最喜欢使用的语言。
- 支持大型数据库,最高可在一个表中容纳 5千多万行。每张表的默认文件大小限制为 4GB,不过如果操作系统支持,你可以将其理论限制增加到 800 万 TB。
- 可以自定义。开源 GPL 许可保证了程序员可以自由修改 MySQL,以便适应各自特殊的开发环境。
准备须知
在开始学习本系列教程之前,你应该通过我们的教程简单地了解一下 PHP 和 HTML 方面的相关知识。
本教学重点在于利用 PHP 使用 MySQL,所以很多实例对于 PHP 程序员来说非常实用。
对于不熟悉 PHP 的读者,我们强烈建议您读一读 PHP教学。
MySQL 安装
下载 MySQL
MySQL 的全部下载链接都在这个页面:MySQL 下载。选择所需的 MySQL Community Server 版本号,并且尽可能准确地选择所需平台。
在 Linux/Unix 上安装 MySQL
在 Linux 系统上安装 MySQL,建议采用 RPM 形式进行安装。MySQL AB 在其网站上提供了以下几种 RPM 文件包:
- MySQL MySQL 数据库服务器,用于管理数据库与表,控制用户访问,以及处理 SQL 查询。
- MySQL-client MySQL 客户端程序,实现用户与服务器的连接与交互功能。
- MySQL-devel 编译使用 MySQL 的其他程序的过程中会用到的一些库及头文件。
- MySQL-shared MySQL 客户端的共享库。
- MySQL-bench 用于MySQL 服务器的基准测试与性能测试工具。
这里列出的 MySQL RPM 都是基于 Linux 的 SuSE 分发版系统构建的,但它们一般也能轻松地运行在其他 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 默认安装方式都比过去容易多了,因为已经利用安装程序将所需的 MySQL 内容精心打包起来。只需下载安装程序包,随便将它解压缩在某个目录,然后运行 setup.exe 就可以了。
默认的安装程序 setup.exe 能帮你打理琐碎的安装过程,同时默认安装在 C:\mysql 目录下。
首次测试服务器,可以采用命令行方式。找到 mysqld 服务器的位置(可能位于 C:\mysql\bin),输入如下命令:
mysqld.exe --console
注意:如果是 NT 系统,就不能使用 mysqld.exe 了,必须使用 mysqld-nt.exe。
不出意外的话,你就会看到一些关于启动和 InnoDB 的信息。如果没有出现这类信息,那么可能是因为你的许可权限有问题。确保所有用户(可能是 mysql)都能访问存储数据的目录。
MySQL 不会自动将其自身添加到开始菜单中,而且目前也没有一些比较好的能够用来停止服务的GUI。因此,假如你喜欢通过双击 mysqld 可执行文件来启动服务器,那么当要关闭服务器时,记得要手动借助 mysqladmin、任务列表、任务管理器或者 Windows 的一些专用方法来进行。
MySQL 安装验证
成功安装完 MySQL 后,就会初始化基表,启动服务器。可以通过一些简单的测试来验证安装是否一切正常。
使用 mysqladmin 工具来获取服务器状态
使用 mysqladmin 工具来查看服务器版本。在Linux下,这一工具位于 /usr/bin;Windows下则在C:\mysql\bin。
[root@host]# mysqladmin --version
在 Linux 下,上述命令可能会产生如下结果。根据你安装的 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 服务器,可以在提示符后输入一些 SQL 命令了,如下所示:
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.13 sec)
安装后的一些步骤
对于根用户,MySQL初始是不需要密码的。一旦成功安装好数据库和客户端后,你就需要设置一个根用户密码,如下所示:
[root@host]# mysqladmin -u root password "new_password";
接着连接MySQL服务器,就会要求你输入密码了:
[root@host]# mysql -u root -p
Enter password:*******
对于UNIX用户来说,同样也必须把MySQL目录放入PATH环境变量中,这样在使用命令行客户端时,就不必每次手动输入路径全称了。对于bash shell 来说,应该这样设置:
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 的 user 表中添加一个新项即可。
在以下范例中,添加了一个新用户 guest,该用户具有 SELECT、INSERT、UPDATE 权限,密码是 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 查询稍后对它们进行更新。
- Select_priv
- Insert_priv
- Update_priv
- Delete_priv
- Create_priv
- Drop_priv
- Reload_priv
- Shutdown_priv
- Process_priv
- File_priv
- Grant_priv
- References_priv
- Index_priv
- Alter_priv
另外一种添加用户账号的方式是使用 SQL命令 GRANT。下面这个例子将在数据库 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 表中创建一个项。
注意:如果 SQL 命令不以分号(;
)结束的话,MySQL 就不会终止这个命令。
配置 /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
在这里,可以为 error log 更换不同的目录。另外,不要更改这张表中的其他项。
用于管理 MySQL 的一些命令
下面列出了一些重要且经常会用到的MySQL命令:
- USE Databasename 用于在MySQL工作区内选择具体某个数据库。
- SHOW DATABASES 列出 MySQL DBMS 所能访问的数据库。
- SHOW TABLES 一旦数据库被 use 命令选中,显示数据库中的表。
- SHOW COLUMNS FROM tablename 显示表的属性、属性类型、键信息、是否允许 NULL 值,默认值,以及其他一些信息。
- SHOW INDEX FROM tablename 显示表中所有索引的细节信息,包括PRIMARY KEY。
- SHOW TABLE STATUS LIKE tablename\G 报告MySQL DBMS的性能及统计的细节信息。
MySQL PHP语法
MySQL 可以很好地适用于多种编程语言,比如PERL、C、C++、JAVA,以及 PHP。由于可以开发 Web 应用程序,PHP 是其中最流行的一门语言。
本教程讲解重点在于PHP 环境中使用 MySQL。如果你对使用 PERL 来操作 MySQL 有兴趣,可以参看这个教程:PERL 与 MySQL 教程
PHP 提供了多种能够访问 MySQL 数据库并且操纵数据记录的函数。这些函数的调用方式就跟其他 PHP 函数一样。
PHP 中用于操作 MySQL 的函数一般都采取如下的格式:
mysql_function(value,value,...);
函数名称的第二部分是函数所专有的,通常是一个描述函数行为的词。下面是教程中将会用到的两个函数:
mysqli_connect($connect);
mysqli_query($connect,"SQL statement");
下面这个例子展示的是PHP调用MySQL函数的常见语法格式:
PHP with MySQL
从下一节开始,我们将介绍与 PHP 相关的 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 作为用户(你也可以使用其他用户)。任何用户都能执行 root 用户所能执行的全部 SQL 操作。
无论何时,只要在 mysql> 提示符下输入 exit
,就能随时中断与 MySQL 的连接。
mysql> exit
Bye
使用 PHP 脚本连接 MySQL
通过 PHP 的 mysql_connect()
函数,可以开启数据库连接。该函数有5个参数。当成功连接后,该函数返回一个 MySQL 连接标识;如连接失败,则返回FALSE。
语法格式
connection mysql_connect(server,user,passwd,new_link,client_flag);
参数 |
说明 |
server |
可选参数。运行数据库服务器的主机名。如未指定,则默认值 localhost:3036。 |
user |
可选参数。访问数据库的用户名。如未指定,则默认值为拥有服务器进程的用户名称。 |
passwd |
可选参数。用户访问数据库所用密码。如未指定,则默认没有密码。 |
new_link |
可选参数。如果利用同样的参数第二次调用mysql_connect() |
client_flags |
可选参数。是由下列常量组合而成: 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 服务器。
Connecting MySQL Server
创建 MySQL 数据库
使用 mysqladmin 创建数据库
创建或删除数据库需要拥有特殊的权限。假设你获得了root用户权限,那么利用 mysqladmin 二进制命令可以创建任何数据库。
范例
下面就来创建一个名叫 TUTORIALS 的数据库:
[root@host]# mysqladmin -u root -p create TUTORIALS
Enter password:******
通过上述命令,就创建好了一个名叫 TUTORIALS 的 MySQL 数据库。
利用PHP脚本创建数据库
PHP利用 mysql_query 函数来创建或删除 MySQL 数据库。该函数有2个参数,成功执行操作则返回TRUE,失败则返回FALSE。
语法
bool mysql_query( sql, connection );
参数 |
说明 |
sql |
必需参数。创建或删除 MySQL 数据库所用的 SQL 命令。 |
connection |
可选参数。如未指定,将使用最后一个由 mysql_connect |
范例
通过下面这个范例来了解如何创建数据库。
Creating MySQL Database
MySQL 终止数据库
利用 mysqladmin 删除 MySQL 数据库
同上一节的情况完全一样,创建或删除 MySQL 数据库需要特殊的权限。假如有了 root 用户权限,那就可以用 mysqladmin 二进制命令来随意创建数据库了。
删除数据库要非常谨慎,因为这样做会丢失数据库中所保存的全部数据。
在下面这个范例中,删除了上一节所创建的数据库。
[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 );
范例
下面这个范例展示了如何删除一个数据库。
Deleting MySQL Database
警告:在利用 PHP 脚本删除数据库时,它不会提供任何确认提示,因此一定要小心。
MySQL 选择数据库
一旦连接上了 MySQL 服务器,就需要选择一个具体的用来运行的数据库。这是因为,有可能会有多个数据库挂接在MySQL服务器上。
利用命令行方式选择 MySQL 数据库
通过 mysql> 提示符来选择数据库是一种非常简单的方法。可以使用 SQL 命令 use 来选择某个数据库。
范例
下面这个范例展示了如何选择一个名为 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 );
参数 |
说明 |
db_name |
必需参数。要选择的 MySQL 数据库名称。 |
connection |
可选参数。如未指定,则将使用mysql_connect |
范例
下面这个范例展示如何选择数据库。
Selecting MySQL Database
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位数字,而整个数字的位数为 16(包含小数位数)。DOUBLE 类型的小数精度可以达到53位。DOUBLE 与 REAL 同义。
- DECIMAL(M,D) 非压缩的无符号浮点数。 在未压缩十进制中,每一位十进制数都对应一个字节。需要定义显示长度(M)和小数位数(D)。DECIMAL 与 NUMERIC 同义。
日期与时间类型
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),那么可以表示从1970年到2069年的这些年份(70-69)。如果把长度定为4,YEAR(4),则可以表示从1901年到2155年。默认长度为4。
字符串类型
虽然数字与日期类型都很有趣,但通常我们存储最多的就是字符串了。下面列出了 MySQL 中常见的字符串类型。
- CHAR(M) 长度固定的字符串,长度范围从1~255个字符,比如CHAR(5)。在存储时,会向右用空格补齐指定长度。长度并非必须参数,默认长度为1。
- VARCHAR(M) 长度不定的字符串,长度范围从1~255个字符。比如:CHAR(25)。在创建VARCHAR字段时,必须定义长度。
- BLOB or TEXT 最大长度为65535个字符的字段。BLOB是Binary Large Objects(二进制大型对象)的缩写,专用于保存大量的二进制数据,比如图片或其他类型的文件。TEXT 类型的文件也能保存大型数据。这两者的区别在于存储数据的排序和对比方面,BLOB类型数据是大小写敏感的,而TEXT类型数据则不是。另外,不能指定它们的长度。
- TINYBLOB or TINYTEXT 最大长度为255个字符的 BLOB 或 TEXT 字段。同样也不能指定它们的长度。
- MEDIUMBLOB or MEDIUMTEXT 最大长度为16777215个字符的 BLOB 或 TEXT 字段。同样也不能指定它们的长度。
- LONGBLOB or LONGTEXT 最大长度为4294967295个字符的 BLOB 或 TEXT 字段。同样也不能指定它们的长度。
- ENUM 枚举类型,是一种很独特的列表类型。ENUM 类型的数据实际是一个包含多个固定值的列表,只能选择这些值(包括 NULL 值)。例如,如果希望某个字段包含 "A"、"B" 和 "C",必须这样定义:ENUM ('A', 'B', 'C')
,只有这些值(或 NULL 值)能够填充到该字段中。
创建 MySQL 表
创建表的命令需要:
- 表名
- 字段名
- 每一字段的定义
语法格式
下面就是一种常见的用来创建 MySQL 表的 SQL 语法。
CREATE TABLE table_name (column_name column_type);
然后在 TUTORIALS 数据库创建如下表:
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 是因为我们不想让该字段为空值。所以如果用户尝试创建空值记录,MySQL 就会抛出一个错误。
- 字段属性 AUTO_INCREMENT 告诉 MySQL 继续为 id 字段增加下一个可能的数值。
- 关键字 PRIMARY KEY 会将一列定义为主键。也可以使用由逗号分隔的多个列来定义主键。
通过命令行方式创建表
通过命令行来创建 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>
注意:只有在SQL命令末尾加上分号(;
)才能终止这个命令。
利用 PHP 脚本创建表
在已有的数据库中创建新表,可以使用 PHP 的 mysql_query() 函数。利用正确的SQL命令为其传入第二个参数,就能创建出一张表。
范例
以下范例展示如何利用 PHP 脚本来创建表。
Creating MySQL Tables
MySQL 下拉表
删除已有的 MySQL 表是很容易的,但你要非常小心,因为删除了表,就无法恢复数据了。
语法
删除 MySQL 表的常用 SQL 命令为:
DROP TABLE table_name ;
通过命令行方式删除表
只需在命令行中使用 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 命令传入该函数的第二个参数中,就能将表删除。
范例
Creating MySQL Tables
MySQL 插入查询
要想在 MySQL 表中插入数据,需要使用 INSERT INTO 这个 SQL 命令。既可以使用mysql> 提示符方式,也可以使用 PHP 等脚本来完成。
语法格式
利用 INSERT INTO 命令为表插入数据的一般语法如下所示:
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
要想插入字符串类型的数据,需要把值用双引号或单引号包括起来,比如:"value"
。
从命令提示符中插入数据
我们将使用 INSERT INTO 命令为表 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 命令提示符就会自动创建出这个符号。
在上面的范例中,我们没有提供 tutorial_id,因为在创建表时,已为该字段提供了 AUTO_INCREMENT 选项。因此 MySQL 会自动知道插入 ID。NOW()
是一个能够返回当前日期与时间的 MySQL 函数。
利用 PHP 脚本插入数据
同样,也可以在 PHP 的 mysql_query()函数中使用 SQL 命令 INSERT INTO 为 MySQL 表插入数据。
范例
在下面这个范例中,从用户那里接收3个参数,然后将这些参数插入到 MySQL 表中。
Add New Record in MySQL Database