美文网首页
php和MySQL的小知识

php和MySQL的小知识

作者: 小Q逛逛 | 来源:发表于2017-01-14 15:11 被阅读63次
    • 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的小知识

          本文链接:https://www.haomeiwen.com/subject/aivebttx.html