读一读

1.用?作为标志位

img (1).jpg

绑定参数可以绑定变量,后面再赋值

可以直接执行$stmt->execute(数组传入参数)


2.别名的方式

把?改为   :别名

设置参数就用别名设置而不是1,2了

通上面1差不多,就是1,2索引变成别名索引


3.绑定变量输出查询结果

img (2).jpg



数据库操作的抽象层。同一种方法,可以操作不同的数据库。

<?php
try{
    //初始化连接,也可以通过ini配置,php.ini配置等
    $pdo=new PDO("mysql:host=localhost;dbname=asd",用户名,密码);
    $pdo->getAttribute();//获取属性
    $pdo->setAttribute();//设置属性
    
    //执行SQL语句
    $stmt=$pdo->query(sql);//用于查询
    $result=$stmt->fetchAll();//返回所有数据   参数 PDO::FETCH_ASSOC
    
    //都赋值为null释放资源
    $result = null;

    $pdo->exec(sql);//用于删除增加更新等操作
}catch(PDOException $e){
    die(message);
}
?>

grant all privileges on *.* to ltzz@localhost identified by '123456';
#grant 权限 on 数据库.表 to 用户名@链接地址 identified by '密码';

drop user ltzz@localhost;#删除用户
revoke select on *.* from ltz@'%';#移除权限


all privileges表示所有权限

*.*表示所有数据库的所有表

ltzz@localhost表示 链接账户@链接地址 '%'为允许所有地址链接

with grant option表示拥有授予权限


show database

在mysql数据库中有授权表。

user表中记录着权限,db和host   

tables_priv    表的授权

columns_priv    列授权


运行时间

数据备份

安全和访问控制

性能的优化

使用日志排错和统计


SERIALIZABLE  序列化,同时只能存在一个事务排队的形式,会卡住

REPEATABLE READ 可重复读,同一个事务中一般读来读去都是一样的

READ COMMITTED 提交读,别的事务commit后就可以读到了

READ UNCOMITTED 未提交读,其他事务不用提交,修改了,这边就能查询到了。


QQ图片20170924131906.png


select @@autocommit;#它为1时表示自动提交开启
set @@autocommit = 1;#打开

可以认为mysql的操作都是事务,就是每执行成功就自动提交一次

=0关闭时,只有手动commit,事务才会提交


show engines;#innoDB支持事务处理,默认就是它
start transaction;#开启事务处理(begin,begin work)
#一系列的SQL
#一系列的SQL
commit;#提交结束
rollback;#回滚结束

事务管理作为一个单独单元,里面有多个SQL事务管理语句,只有全部执行成功,事务处理才算成功,不然就会回滚整个单元。


原子性 每个事务是一个不可分割的单元

一致性 成功和失败都必须是一致的,都成功要不都失败

孤立性 与其他事务隔离,每个事务只有完全执行完毕才能看到结果

持久性 即使系统崩溃,一个提交的事务仍然在坚持。


就是查询的查询,多个查询嵌套,一般从最里面开始。比较耗性能,也可以用内连

select bdesc from branches where cid=(select cid from client where cname ="Rabbit")

一些例子:

select cname from clients where cid= (select cid,count(bid) from branches group by cid having count(bid) = 2)
//可以查询多个,用in
select sname from services where sid in (select sid from branches_services where bid =1031)
//用exist判断是否存在
select * from clients where exists (select bid from branches_service group by bid having count(bid) > 2)
select avg(s.stotal) from (select bid,count(sid) as stotal from branches_services group by bid) as s;