php操作mysql数据库基本函数
$link = mysql_connect(“数据库服务器地址”,”用户名”,”密码”); //连接数据库系统
mysql_query(“set names 网页文件编码名”); //设定“连接编码”;
//也可以这样做:mysql_set_charset(“网页文件编码名”);
mysql_query(“use 数据库名”); //选定要使用的数据库
//也可以这样做:mysql_select_db(“数据库名”);
然后,才开始正式执行要完成的数据库操作任务(语句):
$result = mysql_query(“select / delete /update / insert / desc / show tables /drop .......”);
其他个别补充:
mysql_error():获取mysql执行失败时的错误信息。它通常应用与如下场合:
$result = mysql_query(“select / delete / update / insert / create / dropt ....所有sql语句”);
if( $result === false){
echo “语句执行失败,请参考提示信息:” . mysql_error();
}
else{
//这里是成功的情况,那就后续处理。。。
}
对于mysql_query()这个函数,可以执行“几乎任何sql语句”,在应用中,通常需要区分为2情况:
情况1:执行没有数据返回的语句,比如:insert, update, delete, create table, create database ,drop ...
这种语句,使用mysql_query()函数,执行的结果只有true和false返回:
返回true:表示执行成功;
返回false:表示执行失败;
情况2:执行有数据返回的语句:select, show tables, show databases, desc 表名(显示表结构);
此时,使用mysql_query()函数,返回的结果分为:
如果失败:返回的是false;
如果成功:返回的是“结果集”——“数据集”——就是一行一行数据,就是有字段的一个“表结构”。它需要我们进一步去“取出”数据,才能使用其中的数据,其基本模式为:
$result = mysql_query(“select ... “); //执行有返回数据的语句
while ( $rec = mysql_fetch_array( $result ) ){
//mysql_fetch_array()会取出该结果集中的“一行数据”,并取得该行数据后赋值给$rec;
//此$rec就是一个数组,其下标就是字段名;
//在此while循环中,mysql_fetch_array()会一次次(一行行)取出结果集中的所有数据;
然后,在这里就可以处理该数组$rec了:
“fetch函数”的3种形式的辨析:
假设mysql_query(“select id, age, name ”)执行的结果集为$result;
$result = mysql_query(“select id, age, name ”);
mysql_fetch_assoc($result):得到的数组类似这样:
array(“id” => 1, “name” => “user1”, “age”=>18);
mysql_fetch_row($result):得到的数组类似这样:
array(0=> 1, 1=> “user1”, 2=>18);
mysql_fetch_array($result):得到的数组类似这样:
array(“id” => 1, “name” => “user1”, “age”=>18, 0=> 1, 1=> “user1”, 2=>18);
扩展php中操作mysql数据的几个函数:
$n1 = mysql_num_rows(结果集); //获得该结果集的数据行数;
$n2 = mysql_num_fields(结果集); //获得该结果集的数据列数;
$name = mysql_field_name(结果集, $i ); //获得结果集的第i个字段的名字!i从0开始算起
数据控制语言,是用于对mysql的用户及其权限进行管理的语句;
用户管理
用户数据所在位置:
mysql中的所有用户,都存储在系统数据库(mysql)中的user 表中——不管哪个数据库的用户都保存在数据库mysql的user表中
创建用户:
形式:
create user ‘用户名’@’允许登录的地址/服务器’ identified by ‘密码’;
说明:
1,允许登录的地址/服务器就是,允许该设定的位置,来使用该设定的用户名和密码登录,其他位置不行;
2,可见,mysql的安全身份验证,需要3个信息。
删除用户:
drop user ‘用户名’@’允许登录的地址或服务器名’;
修改用户密码:
修改自己的密码:
set password = password('密码');
修改他人的密码(前提是有权限):
set password for '用户名'@'允许登录的地址' = password('密码');
权限管理
权限是什么?
mysql数据库,将其中所能做的所有事情,都分门别类分配到大约30多个权限中去了,其中每个权限,都是一个“单词”而已!,比如:
select:代表可以查询数据;
update:代表可以修改数据;
delete:代表可以删除数据;
.......
其中,有一个权限名叫做“all”:表示所有权限;
授予权限:
形式:
grant 权限列表 on 某库.某个对象 to ‘用户名’@’允许登录的位置’ 【identified by ‘密码’】;
说明:
1,权限列表,就是,多个权限的名词,相互之间用逗号分开,比如: select, insert, update
也可以写:all
2,某库.某个对象,表示,给指定的某个数据库中的某个“下级单位”赋权;
下级单位有:表名,视图名,存储过程名; 存储函数名;
其中,有2个特殊的语法:
*.*: 代表所有数据库中的所有下级单位;
某库.* :代表指定的该库中的所有下级单位;
3,【identified by ‘密码’】是可省略部分,如果不省略,就表示赋权的同时,也去修改它的密码;
但:如果该用户不存储,此时其实就是创建一个新用户;并此时就必须设置其密码了
剥夺权限:
形式:
revoke 权限列表 on 某库.某个对象 from ‘用户名’@’允许登录的位置’
其含义,跟grant中完全一样;
事务控制语言
什么叫做“事务”:
想象一个场景:
小明给小花 汇款 5000元 买 IPHONE,操作界面不用管,不管什么操作界面,最终都要落实到这样两条语句的执行:
update 存款表 set money = money - 5000 where 账户=’小明’;
update 存款表 set money = money + 5000 where 账户=’小花’;
当,第一条语句执行成功,突然断电了(或任何其他情况),就会造成数据的“不一致”。
要解决这个问题,就是“事务”的功能:
事务就是用来保证多条“增删改”语句的执行的“一致性”:要么都执行完成,要么都没有执行;
事务的特点:
• 原子性:一个事务中的所有语句,应该做到:要么全做,要么一个都不做;
• 一致性:让数据保持逻辑上的“合理性”,比如:一个商品出库时,既要让商品库中的该商品数量减1,又要让对应用户的购物车中的该商品加1;
• 隔离性:如果多个事务同时并发执行,但每个事务就像各自独立执行一样。
• 持久性:一个事务执行成功,则对数据来说应该是一个明确的硬盘数据更改(而不仅仅是内存中的变化)。
事务模式:
事务模式是指:
在我们的cmd命令行模式中,是否开启了“一条语句就是一个事务”的这个开关:
默认情况下(安装后),这个模式是开启的,称为“自动提交模式”;
set autocommit = 1;
这样之后,每条增删改语句,都会立即生效;
我们可以把它关闭,那就是“人为提交模式”——即需要人为提交;
set autocommit = 0;
这样之后,所有增删改语句,都必须使用commit之后,才能生效;
首先,我们以前的经验都是:一条增删改语句,一旦回车,执行就完成(前提是不出错);
现在,我们关闭该模式:
然后,再去执行一条简单的insert语句:
对比:
执行前:
然后,执行insert:
但是,再查看结果,即insert执行之后,数据并没有出现:
然后,再去“人为提交”:
然后,再核查数据,就有了:
事务执行的基本流程
1,开启一个事务:
start transaction; //也可以写成:begin;
2,执行多条增删改语句; //也就是相当于希望这多条语句要作为一个“不可分割”的整体去执行的任务
3,判断这些语句执行的结果情况,并进行提交或回滚:
if( 没有出错 ){
commit; //提交事务;此时就是一次性完成;
}
else{
rollback; //回滚事务;此时就是全部撤销;
}
具体分2种情况来做:
在cmd中,就是凭“肉眼”观察是否有错:
没有错误的情况:
有错误的情况:
在php中:
$connect = mysql_connect("localhost","root","aaa");
mysql_query("set names utf8");
mysql_query("use phpdatabase");
$sql = "start transaction";
mysql_query($sql);
$sql2 = "insert into tab_int(f1,f2,f3) values (12,3,43);";
$result = mysql_query($sql2);
$sql3 = "insert into tab_int(f1,f2,f3) values (2,3,1);";
$result2 = mysql_query($sql3);
if($result && $result2){
mysql_query("commit;")
echo "事务执行完成;所有任务都完成"
}else {
mysql_query("rollback;");
echo "事务执行失败,数据没有被修改!"
}