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)
分享到:
相关推荐
sql定义一个函数使用function关键字的使用
Oracle SQL 函数是数据库管理中不可或缺的一部分,它们用于处理和操作数据,提供了一种强大的工具集来执行各种计算、转换和数据提取任务。在Oracle 8i版本中,SQL内置函数涉及了数字格式化和日期格式化等多个方面。 ...
简绍oracle的内置函数,方便查看
SQL FUNCTION Split 字符串分割函数 的创建,方法加实例
Oracle SQL function.pptx
这个名为"SQL_Function.rar"的压缩包显然包含了一组关于SQL函数的资源,适合正在学习和使用SQL的人员。让我们深入探讨一些常见的SQL函数。 1. **聚合函数**: - `COUNT(*)`:返回表中的行数。 - `SUM(column_name...
1、数字格式元素 2、日期格式元素 3、SQL内置函数等
SQL Server中的自定义函数是数据库开发中非常重要的组成部分,它们允许开发者创建自定义的逻辑,以便在查询中重用和简化复杂操作。本篇主要关注SQL Server 2008中的三种自定义函数:标量函数、内联表值函数和多语句...
Oracle SQL 函数是Oracle数据库系统中用于处理和操作数据的核心工具。它们允许用户在查询、更新和分析数据时执行各种计算、转换和逻辑操作。在Oracle SQL中,函数分为内置函数和用户自定义函数(UDF)。内置函数是...
Oracle SQL 函数是数据库查询语言的重要组成部分,它们允许用户执行各种计算、转换和数据处理任务。在Oracle 8i版本中,内置的SQL函数提供了丰富的功能,包括对数字和日期的格式化。 在数字格式化方面,Oracle SQL...
SQL Function允许用户根据自己的需求创建自定义函数,这在处理复杂逻辑或满足特定业务场景时非常有用。本篇将详细介绍如何在SQL中创建函数,并通过一个实例来展示其用法。 首先,SQL提供了多种内置函数,例如聚合...
在Oracle数据库中,PL/SQL(Procedural Language/Structured Query Language)是一种结构化查询语言的扩展,它允许开发人员编写复杂的数据库应用程序。本文将深入探讨在PL/SQL中Oracle的函数、过程、包以及事务管理...
SQL Function 自定义函数是SQL语言中一种强大的工具,允许用户创建自己的函数,以满足特定的业务需求或数据处理逻辑。虽然SQL已经提供了大量的内置函数,如数学、日期时间、字符串和转换函数,但自定义函数提供了更...
ABAP是一种专为SAP系统设计的编程语言,而在ABAP中处理字符串时,SQL Functions提供了许多方便的方法。本文将对ABAP SQL Functions for Strings进行详细的语法总结。 首先,我们来讨论一下如何在ABAP SQL中跨Client...
- 添加引用`Microsoft.SqlServer.Server`,以便可以使用`SqlFunction`特性。 2. **编写代码**: - 在项目中添加一个类,并使用`SqlFunction`特性标记需要被SqlServer调用的方法。 - 示例: ```csharp using ...
Oracle数据库系统中包含丰富的SQL内置函数,这些函数在日常的数据处理和查询中起着至关重要的作用。本文将详细解析Oracle 8i版本中的一些经典且常用的SQL函数,特别是与数字和日期格式化相关的函数。 首先,我们要...