php访问mysql
get_magic_quotes_gpc()函数,转义符号是否自动开启
addslashes()过滤输入数据
stripslashes()过滤输出数据
@ $db = new mysqli('localhost', 'bookorama', '123', 'books');
mysqli_connect_erroron() 连接数据库错误
$query= "select * from books where ".$searchtype." like '%".searchterm."';
$result = $db->query($query); /*$db是一个对象,函数query()是对象的一个属性。
$result是新构件的一个对象。
*/
$num_results = $result->num_rows; /*$num_results是一变量,num_rows()是一属性, 查询返回的行数。*/
$row = $result->fetch_assoc(); /*该函数接受结果集合中的每一行,并以一个相关数组 返回该行,每个关键词为一个属性名,每个值为数 组中响应的值*/
$row = $result->fetch_row(); /*返回一个列举数组,属性值在每个数组值$row[0], $row[1]等等的里面列出。*/
$row = $result->fetch_object(); /*将一行取回到一个对象中,通过$row->title
$row->isbn等访问每个属性*/
prepared语句
$query= "insert into books values(?,?,?,?);
$stmt = $db->prepare($query); //告诉哪些变量应该被替换.
$stmt->bind_param("sssd", $isbn, $author, $title, $price);
/*改变这四个帮顶变量的值,并且在不用准备的情况下重新执行这个语句,这个功能对于循环批量插入操作来说是非常重要的*/
$stmt->execute(); //运行插入
echo $stmt->affected_rows.'本书插入数据库.';
$stmt->close();
$stmt->bind_result($isbn, $author, $title, $price);//将变量绑定到将通过查询返回的列
$stmt->execute();
可以在循环中调用:
$stmt->fetch();
每当该语句被调用时,他将获得下一个结果行,并填充到4个绑定变量中。
权限系统
user表:全局
更新权限命令:flush priviledges;
mysqladmin flush-priviledges
mysql reload
show 命令
show tables from books;
show columns from orders from books;
show columns from books.orders
show grants for bookorama
表的优化
optimize table table_name;
myisamchk -r table
备份
mysqldump --opt --all-databases >all.sql
mysqlbotcopy database /path/for/backup
存储引擎
有时成为表格类型
主要两种myisam(有索引顺序访问方法)不支持事务安全和外键,当对一个表格使用大量的 select , insert或二者集合的时候,需要全文搜索功能的时候应该使用myisam类型。
innodb支持事务安全和外键,事务非常重要,如财务数据表格,或者在insert和 select语句交错执行的情况下应用innodb
事务:默认情况下mysql自动提交命令。
使用事务安全表格关闭自动提交命令
set autocommit = 0 ;
start transaction; //打开自动提交
完成事务后提交命令:commit;
如果改变主义,可以使用rollback;回到数据库以前的状态
只有提交了一个事务,事务才能被会话中的其他用户所见。
alter table orders type = innodb;
alter table order_items type =innodb;
insert into orders values (6, 2, 66.00, '2004-02-02');
insert into order_items values(6,'0-666-66666-4',1);
插入后退出,重新登陆,查询不到数据,因为没提交。
外键
creat table order_items
( orderid int unsigned not null references orders(orderid),
isbn.....
....);
alter table order_items type=innodb;
alter table order_items
add foreign key (orderid) references orderis(orderid);
在插入数据的时候如果orderid数据与orders表中orderid的数据不一致,插入失败。
存储过程
存储过程是一个可编程的函数,在mysql中创建并保存,他可以有sql语句和一些特殊的控制结构组成,当希望在不同的应用程序或平台上执行相同的喊住,后者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看作是对编程中的面向对象方法的模拟,他们允许控制数据的访问方式
#basic stored procedure example
delimiter // # 分隔符设置为//
create procedure total_orders(out total float)#创建存储过程,total是参数,需要计 #算的值,float为参数类型,inout表示传入但可
#被存储过程更改,out表示参数将被传出或返 #回,in表示传入。
begin #过程体必须在begin和end之间,类似{}
select sum(amount) into total from orders;
end
//
delimiter ;
然后可以用 call total_orders(@t); #调用过程。
select @t
存储函数
delimiter //
create fuction add_tax(price float) returns float
return price*1.1 ;
//
delimiter ;
不用使用in或者out,所有 参数都是in,returns是返回类型,return返回一个值。
select_tax(100);
110
查看定义过程和函数的代码
show create procedure total_orders;
show create function addtax;
drop procedure total_orders;
drop function addtax;
局部变量
可以在begin ..end语句块中声明局部变量
delimiter //
create function add_tax(price float) returns float
begin
declare tax float default 0.10;
return price*(1+tax);
end
//
delimiter ;
游标和控制结构
delimiter //
create procedure largest_order(out lagest_id int) #参数
begin
declare this_id int; #声明局部变量
declare this_amount float;
declare l_id int;
declare l_amount float default 0;
declare done int default 0; #变量done为循环标记,当遍历所有行后值为1,退出循环
declare continue handler for sqlstate '02000' set done =1;
#声明一个句柄,chontinue句柄执行了指定动作,并且继续存储过程的执行,exit句柄从最近的
#begin...end代码块中推出。声明句柄的下一个部分指定了句柄被调用的时间,该句柄在#sqlstate '02000'语句被执行时调用。即该句柄在无法再找到记录行后被调用。我们将逐行处#理一个结果集,而且当遍历了所有需要处理的记录时,这个句柄将被调用,也可以一指定等价#的for not found语句。其他选项还包括sqlwarning sqlexception。
declare c1 cursor for select orderid, amount form orders;
#游标类似与一个数组,它将从一个查询获得结果集,如myssqli_fetch_query()所返回的,并且允许一次只处理一行,如fetch_row()函数。
open c1;#执行查询
repeat
fetch c1 into this_id, this_amount;#从游标查询中获得一行数据。
if not done then
if this_amount > l_amount then
set l_amount =this_amount;
set l_id = this_id;
end if;
end if;
until done end repeat;
close c1;
set largest_id = l_id;
end
//
delimiter ;
存储过程还支持while循环
while condition do
....
end while
loop
....
end loop
这些循环么有内置语句,可以通过leave语句退出循环。
存储过程不支持for循环
if condition then
....
[else if condition then]
...
[else]
...
end if
case value
when value then statement
[when value then statement]
[else statement]
end case
CREATE FUNCTION myFunction
05 -> (in_string VARCHAR(255),
06 -> in_find_str VARCHAR(20),
07 -> in_repl_str VARCHAR(20))
08 ->
09 -> RETURNS VARCHAR(255)
10 -> BEGIN
11 -> DECLARE l_new_string VARCHAR(255);
12 -> DECLARE l_find_pos INT;
13 ->
14 -> SET l_find_pos=INSTR(in_string,in_find_str);
15 ->
16 -> IF (l_find_pos>0) THEN
17 -> SET l_new_string=INSERT(in_string,l_find_pos,LENGTH(in_find_str),in_repl_str);
18 -> ELSE
19 -> SET l_new_string=in_string;
20 -> END IF;
21 -> RETURN(l_new_string);
22 ->
23 -> END$$
24 Query OK, 0 rows affected (0.00 sec)
分享到:
相关推荐
Oracle SQL function
Oracle SQL function.Oracle SQL function.Oracle SQL function.Oracle SQL function.Oracle SQL function.Oracle SQL function.
sql定义一个函数使用function关键字的使用
简绍oracle的内置函数,方便查看
Oracle SQL function Oracle SQL function Oracle SQL function
SQL FUNCTION Split 字符串分割函数 的创建,方法加实例
Oracle SQL function.pptx
主要介绍了Sqlserver 自定义函数 Function使用介绍,在sqlserver2008中有3中自定义函数:标量函数/内联表值函数/多语句表值函数,需要的朋友可以参考下
SQL常用函数汇编,为正在学习和使用SQL的人提供方便
SQL内置函数说明
pl/sql中oracle的函数,过程,包,事务等介绍
主要介绍了SQl Function 创建函数实例介绍,需要的朋友可以参考下
主要介绍了SQL Function 自定义函数详解,需要的朋友可以参考下
讲解了ABAP SQL Functions for Strings的使用