MySQL与Perl,C,C++,Java和PHP不同的编程语言的组合运行相当不错。出了这些语言,PHP由于其Web应用程序开发最流行的一种。
本教程特别注重在PHP环境中使用MySQL。如果有兴趣使用MySQL+PERL,那么可以看看 PERL + MySQL教程.
PHP提供了各种功能来访问MySQL数据库和操作MySQL数据库的数据记录。需要调用PHP函数,以同样的方式调用任何其它的 PHP 函数。
使用PHP函数连接MySQL具有以下一般格式为:
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服务器:
D:\software\mysql-5.6.25-winx64\bin> mysql -u root -p Enter password:
注意,这里密码为空,直接回车就就进入mysql>命令提示符下,能够执行任何SQL命令。以下是上述命令的结果:
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.6.25 MySQL Community Server (GPL) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
在上面的例子中,我们使用 root 用户,但可以使用任何其他用户。任何用户将能够执行所有的SQL操作(前提这个用户有对应执行SQL权限)。
任何时候使用exit命令在mysql>提示符下,从MySQL数据库断开。
mysql> exit Bye
PHP提供mysql_connect()函数打开一个数据库连接。这个函数有五个参数,返回成功一个MySQL连接标识符,失败返回FALSE。
connection mysql_connect(server,user,passwd,new_link,client_flag);
参数 | 描述 |
---|---|
server | 可选 - 运行数据库服务器的主机名。如果不指定,则缺省值为localhost:3036. |
user | 可选 - 访问数据库的用户名。如果未指定,则默认是拥有该服务器进程的用户的名称。 |
passwd | 可选 - 访问数据库的用户的密码。如果没有指定,则默认为空口令。 |
new_link | 可选 - 如果第二个调用让mysql_connect()使用相同的参数,没有新的连接将被建立; 已经打开的连接标识符将被返回。 |
client_flags | 可选 - 以下常量的组合:
|
可以使用另一个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'; $dbuser = 'root'; $dbpass = '123456'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully'; mysql_close($conn); ?> </body> </html>
PHP提供 mysql_select_db() 函数来选择一个数据库。它成功时则返回TRUE,或者失败返回FALSE。
bool mysql_select_db( db_name, connection );
参数 | 描述 |
---|---|
db_name | 必需 - 要选择MySQL数据库的名称 |
connection | 可选 - 如果没有指定,则是最后一个通过mysql_connect打开的连接将被使用。 |
这里是显示如何选择数据库的实例。
<html> <head> <title>MySQL选择数据库示例</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( 'test' ); mysql_close($conn); ?> </body> </html>
需要特殊权限来创建或删除一个MySQL数据库。因此,假如你有机会获得root用户来登录,可以用mysql中mysqladmin二进制来创建任何数据库。
在删除任何数据库时要注意,因为删除数据库时所有的数据在数据库中。
下面是一个例子,用来删除前面的章节中所创建的数据库:
[root@host]# mysqladmin -u root -p drop yiibai 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 'yiibai' database [y/N] y Database "yiibai" dropped或使用:
mysql> drop database yiibai; Query OK, 0 rows affected (0.01 sec)
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | | yiibai | +--------------------+ 6 rows in set (0.00 sec)
bool mysql_query( sql, connection );
参数 | 描述 |
---|---|
sql | 必需 - SQL查询来创建或删除一个MySQL数据库 |
connection | 可选 - 如果没有指定,则最后一个通过mysql_connect打开的连接将被使用。 |
<html> <head> <title>删除MySQL数据库</title> </head> <body> <?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = ''; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br />'; $sql = 'DROP DATABASE yiibai'; $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not delete database: ' . mysql_error()); } echo "Database YIIBAI deleted successfully\n"; mysql_close($conn); ?> </body> </html>注意: 在使用上面PHP脚本删除数据库,它不会提示输入任何确认。 所以,在删除MySQL数据库时要小心,它执行后将直接删除数库,数据库的一切信息将被删除无法恢复。
需要特殊权限创建或删除一个MySQL数据库。因此,假如有权使用 root 用户,就可以用mysql中的mysqladmin来创建数据库。
下面是一个简单的例子,创建名为 yiibai_tutorials1 的数据库。
D:\software\mysql-5.6.25-winx64\bin> mysqladmin -u root -p create yiibai Enter password:<回车>
或
D:\software\mysql-5.6.25-winx64\bin> mysql -u root -p Enter password: mysql>create database yiibai;
这将创建一个MySQL数据库:yiibai_tutorials1 和 yiibai_tutorials2
PHP使用mysql_query()函数来创建或删除MySQL数据库。该函数有两个参数,成功返回TRUE或失败返回FALSE。
bool mysql_query( sql, connection );
参数 | 描述 |
---|---|
sql | 必需 - SQL查询用来创建或删除一个MySQL数据库 |
connection | 可选 - 如果没有指定,则最后一个通过mysql_connect打开的连接将被使用。 |
试试下面的例子来创建数据库:
<html> <head> <title>创建MySQL数据库</title> </head> <body> <?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = ''; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } echo 'Connected successfully<br />'; $sql = 'CREATE DATABASE yiibai'; $retval = mysql_query( $sql, $conn ); if(! $retval ) { die('Could not create database: ' . mysql_error()); } echo "Database yiibai created successfully\n"; mysql_close($conn); ?> </body> </html>
正确地定义的表中的字段在数据库的整体优化是非常重要的。我们应该只使用真正需要使用类型和字段的大小; 如果知道只使用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是数字(包括小数)的总数。小数精度可以到24个浮点。
DOUBLE(M,D) - 不能使用无符号的双精度浮点数。可以定义显示长度(M)和小数位数(D)。 这不是必需的,默认为16,4,其中4是小数的位数。小数精度可以达到53位的DOUBLE。 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)),年份就可以为1970至2069(70〜69)。如果长度指定为4,年份范围是1901-2155,默认长度为4。
虽然数字和日期类型比较有意思,但存储大多数数据都可能是字符串格式。 下面列出了在MySQL中常见的字符串数据类型。
CHAR(M) - 固定长度的字符串是以长度为1到255之间个字符长度(例如:CHAR(5)),存储右空格填充到指定的长度。 限定长度不是必需的,它会默认为1。
VARCHAR(M) - 可变长度的字符串是以长度为1到255之间字符数(高版本的MySQL超过255); 例如: VARCHAR(25). 创建VARCHAR类型字段时,必须定义长度。
BLOB 或 TEXT - 字段的最大长度是65535个字符。 BLOB是“二进制大对象”,并用来存储大的二进制数据,如图像或其他类型的文件。定义为TEXT文本字段还持有大量的数据; 两者之间的区别是,排序和比较上存储的数据,BLOB大小写敏感,而TEXT字段不区分大小写。不用指定BLOB或TEXT的长度。
TINYBLOB 或 TINYTEXT - BLOB或TEXT列用255个字符的最大长度。不指定TINYBLOB或TINYTEXT的长度。
MEDIUMBLOB 或 MEDIUMTEXT - BLOB或TEXT列具有16777215字符的最大长度。不指定MEDIUMBLOB或MEDIUMTEXT的长度。
LONGBLOB 或 LONGTEXT - BLOB或TEXT列具有4294967295字符的最大长度。不指定LONGBLOB或LONGTEXT的长度。
ENUM - 枚举,这是一个奇特的术语列表。当定义一个ENUM,要创建它的值的列表,这些是必须用于选择的项(也可以是NULL)。例如,如果想要字段包含“A”或“B”或“C”,那么可以定义为ENUM为 ENUM(“A”,“B”,“C”)也只有这些值(或NULL)才能用来填充这个字段。