常用SQL语句
- 插入记录insert
在创建一个空的数据库和数据表后,使用insert语句向数据表中插入记录:
insert into table_name(column_name1, column_name2, …) values(value1, value2, …)
table_name表示要插入数据的表名,column_name1和column_name2表示表中的字段名,各行记录值的清单在values关键字后的圆括号中以逗号“,”分隔。
在MySQL中,一次可以同时插入多条记录,而标准的SQL插入语句一次只能插入一条记录。 查询记录select
要从数据库中查询数据,就要用到数据查询语句select,select语句是最常用的查询语句。select语句的语法格式如下:select selection_list //要要查询的数据表中的字段列表,如果查询所有字段,可以使用“*”表示。 from table_name //指定的数据表 where primary_constraint //查询时记录必须满足的条件 group by grouping_columns //如何对结果进行分组 order by sorting_cloumns //如何对结果进行排序 having secondary_constraint //指定进行分组的条件 limit count //限制输出时的查询结果的数量
下面介绍select语句的一些简单的应用。
select * from students //表示从students数据表中查询所有字段。 select * from students limit 5 //表示从students数据表中查询所有字段,但只显示前5条记录。 select * from students where stuName like '李_' //模糊查询,查询姓刘且名字为两个汉字的学生信息。 //like字句中的通配符主要有两个,_(下划线)代表模糊匹配一个字符,%(百分号)代表模糊匹配若干个字符。
修改记录update
要执行修改的操作可以使用update语句,update语句的语法格式如下:
update table_name set column_name1=value1, column_name2=value2,…where condition
其中,set子句指出要修改的列和它们给定的值,where子句是可选的,如果给出它将修改满足条件的记录行,否则就会修改所有的记录行。例如:
update students set stuAge=stuAge+1 where stuNum= '03060010'
执行上面语句将修改学号为’03060010’的同学的年龄,将其年龄增加1- 删除记录delete
在数据库中,有些数据已经失去意义或者错误时就需要将它们删除,此时可以使用delete语句,delete语句的语法格式如下:delete from table_name where condition
例如:delete from students where stuNum= '03060010'
上面语句将删除学号为’03060010’的同学的信息。如果不加where条件,将删除数据表中的所有数据,例如:delete from students。对于删除数据表中所有数据的删除语句应该谨慎使用,因为删除所有数据后,如果删除前没有备份数据的话数据就无法恢复了。
PHP数据库编程
连接和关闭数据库
连接服务器
要使用数据库首先需要连接数据库服务器,MySQL函数库中提供连接数据库服务器的函数是mysql_connect(),该函数的语法格式如下:
resource mysql_connect ([ string $server [, string $username [, string $password [, bool $new_link [, int $client_flags ]]]]] )
参数server表示MySQL数据库服务器,可包括端口号,例如”hostname:port”,默认值是’localhost:3306’;
参数username表示连接数据库的用户名;参数password表示连接数据库的用户密码。
如果该函数调用成功,则会返回连接句柄。如果失败,则会返回False。例如:<?php $link = mysql_connect('localhost', 'root', 'xianyang'); //连接数据库服务器 if (!$link) { die ('连接失败:' . mysql_error()); } echo '服务器信息:' .mysql_get_host_info($link); mysql_close($link); //关闭连接 ?>
- 关闭连接
通常创建一个连接后,如果不再使用后应该关闭该连接以释放资源,同时可以避免出现各种意外错误。关闭数据库连接的函数是mysql_close(),该函数的语法格式如下:
bool mysql_close ([ resource $link_identifier ] )
参数link_identifier表示MySQL的连接标识符,如上一个实例中的$link。如果没有指定,默认使用最后被mysql_connect()打开的连接。通常不需要使用mysql_close(),因为已打开的非持久连接会在脚本执行完毕后自动关闭。但建议在使用完毕后关闭连接。 - 选择数据库
通常一个数据库服务器会包含多个数据库,而Web编程是要针对具体数据库的,因此在连接到数据库服务器后,还需要选择具体的数据库。选择目标数据库的函数名称为mysql_select_db(),该函数的语法格式如下:
bool mysql_select_db ( string $database_name [, resource $link_identifier ] )
参数database_name表示目标数据库的名称;
参数link_identifier表示已经创建的MySQL连接标识符。
参数mysql_select_db()设定与指定的连接标识符所关联的服务器上的当前激活数据库。如果成功则返回True,失败则返回False.
创建数据库和数据表
创建数据库
在 MySQL 中创建数据库语法:CREATE DATABASE database_name
为了让 PHP 执行上面的语句,必须使用 mysql_query() 函数。此函数用于向 MySQL 连接发送查询或命令。<?php $con = mysql_connect(“localhost”, ‘root’, ‘xianyang’) ; if (!$con) { die('Could not connect: ' . mysql_error()); } if (mysql_query("CREATE DATABASE my_db",$con)) { echo "Database created"; } else { echo "Error creating database: " . mysql_error(); } mysql_close($con); ?>
创建表
创建数据库表语法:CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, column_name3 data_type, ....... )
创建查询和显示查询结果
数据库选择完毕后,就可以针对数据库中的数据表执行插入、查询、修改和删除等基本操作了。对数据表执行基本操作的函数是mysql_query(),该函数的语法格式如下:
resource mysql_query ( string $query [, resource $link_identifier ] )
参数query为查询字符串(如SQL语句);
参数link_identifier 表示已经创建的MySQL连接标识符
mysql_query()向与指定的连接标识符关联的服务器中的当前活动数据库发送一条查询。
注意:
mysql_query()仅对select,show,explain或describe语句返回一个结果集(资源标识符),如果查询执行不正确则返回False。对于其他类型的SQL语句, mysql_query()在执行成功时返回True,出错时返回False。
如果返回一个新的结果集,可以将其传递给处理结果集的函数。处理完结果集后可以通过调用mysql_free_result()来释放与之关联的资源。PHP中处理结果集的函数比较多,下面介绍其中比较常用的三个。
mysql_fetch_row()
该函数的语法格式如下:array mysql_fetch_row ( resource $result )
参数result表示resource型的结果集(通常由mysql_query()调用返回)。
mysql_\fetch_row()从和指定的结果集中取得一行数据并作为数组返回。每个结果的列(字段)储存在一个数组的单元中<?php $lnk = mysql_connect('localhost', 'root', 'xianyang') or die ('连接失败 : ' . mysql_error()); //设定当前的连接数据库为student mysql_select_db('student', $lnk); mysql_query("set names gb2312");//指定数据库字符集 $result = mysql_query("SELECT stuNum,stuName from students") or die("<br>查询表students失败: " . mysql_error()); $row=mysql_fetch_row($result); //读取结果集中的一行 // 偏移量从0开始。依次调用mysql_fetch_row()将返回结果集中的下一行,如果没有更多行则返回False。 while ($row) { echo $row[0].'----'.$row[1] . "<br>"; //用字段索引访问 $row=mysql_fetch_row($result); //读取结果集中的下一行 } ?>
mysql_fetch_assoc()
该函数同mysql_fetch_row()函数基本相同,函数的语法格式也一样,但用法上稍微有所区别。mysql_fetch_assoc()返回从结果集取得的行生成的关联数组,所以应该通过$row[‘字段名称’] 来获取数据,而不能使用$row[字段索引] 来获取数据。如果结果中两个或以上的列具有相同字段名,最后一列将优先。要访问同名的其他列,必须用该列的数字索引或给该列起个别名。 例如:<?php …//省略部分相同的代码 $row=mysql_fetch_assoc($result); //读取结果集中的一行 while ($row) { echo $row['stuNum'].'----'.$row['stuName'] . "<br>"; //用字段名访问 $row=mysql_fetch_assoc($result); //读取结果集中的下一行 } ?>
mysql_fetch_array()
该函数从结果集中取得一行作为关联数组,或数字数组,或二者兼有。该函数的语法格式:array mysql_fetch_array ( resource $result [, int $result_type ] )
参数result表示resource型的结果集。
参数result_type为可选参数,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM和MYSQL_BOTH,默认值是MYSQL_BOTH。如果用了MYSQL_BOTH,将得到一个同时包含关联和字段索引的数组。用MYSQL_ASSOC只得到关联索引(如同mysql_fetch_assoc()那样),用MYSQL_NUM只得到字段索引(如同 mysql_fetch_row()那样)。 例如:<?php …//省略部分相同的代码 //读取结果集中的一行,使用MYSQL_BOTH参数 $row=mysql_fetch_array($result,MYSQL_BOTH); while ($row) { echo $row[0].'----'.$row['stuName'] . "<br>"; //用字段索引和字段名称皆可访问数组 $row=mysql_fetch_ array($result); //读取结果集中的下一行 } ?>
获取检索记录数量
前面的3个函数用于检索记录,但是并没有直观地反映出一共检索了多少条记录。要统计获得的记录数量可以使用mysql_num_rows()函数。该函数的语法格式如下:
int mysql_num_rows( resource $result )
参数result表示resource型的结果集。mysql_num_rows()返回结果集中行的数目。此命令仅对select语句有效。如果想要取得被insert,update或者delete查询所影响到行的数目,用mysql_affected_rows()函数
另外,除了用mysql_num_rows()函数可以获得记录数量外,还可以通过SQL中的count子句获取被查询的记录数目。例如下面SQL语句即可统计数据表中的记录数量
<?php
…//省略了连接和选择数据库的代码
$result = mysql_query("select count(*) as record_num from students ")
or die("<br>查询表students失败: " . mysql_error());
$row=mysql_fetch_array($result);
echo "总记录数:". $row[' record_num '];
?>