php和MySQL的小知识

  • php和MySQL数据库
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 "事务执行失败,数据没有被修改!"
}

你可能感兴趣的:(php和MySQL的小知识)