mysql 5.0使用_mysql5.0使用总结

创建表,以及表之间的关系

use test;

create table person(

id smallint unsigned not null auto_increment,

name char(40) not null,

primary key(id));

create table shirt(

id smallint unsigned not null auto_increment,

style enum('t-shirt','polo','dress') not null,

color enum('red','blue','orange') not null,

owner smallint unsigned not null references person(id),

primary key(id));

创建视图

create view skirt_view as

select person.id as id,person.name as name,shirt.style as style,shirt.color as color from person,shirt

where person.id=shirt.owner;

创建用户

grant all privileges on *.* to 'money2'@'%' identified by 'panjun2' with grant option;

grant all privileges on *.* to 'money2'@'localhost' identified by 'panjun2' with grant option;

创建存储过程以及函数

格式:

CREATE PROCEDURE 过程名 ([过程参数[,...]])

[特性 ...] 过程体

CREATE FUNCTION 函数名 ([函数参数[,...]])

RETURNS 返回类型

[特性 ...] 函数体

过程参数:

[ IN | OUT | INOUT ] 参数名 参数类型

函数参数:

参数名 参数类型

返回类型:

有效的MySQL数据类型即可

过程体/函数体:格式如下:

BEGIN

有效的SQL语句

END

在开发过程中有几点要注意:

1、存储过程注释:MySQL支持采用--或者/**/注释,其中前者是行注释,后者是段式注释

2、变量首先用declare申明,其中临时变量可以直接以@前缀修饰以供引用

3、直接采用MySQL的Administrator管理器编辑时,可以直接采用如下函数文本录入;

但若在脚本中自动导入存储过程或函数时,由于MySQL默认以";"为分隔符,则过程体的每一句

都被MySQL以存储过程编译,则编译过程会报错;所以要事先用DELIMITER关键字申明当前段分隔符

用完了就把分隔符还原。  如下所示:

DELIMITER $$

Stored Procedures and Functions

DELIMITER ;

mysql> delimiter //

mysql> CREATE PROCEDURE mysp ()

-> BEGIN

->   IF @@server_id=2 THEN DROP DATABASE accounting; END IF;

-> END;

-> //

mysql> delimiter ;

mysql> CALL mysp();

下面是2个例子,提供了一种字串加密的算法,每次以相同的入参调用都会得到不同的加密结果,

算法相对比较简单,不具备强度。分别以函数和过程的形式分别实现如下:

(1)函数

eg:

CREATE FUNCTION fun_addmm(inpass varchar(10)) RETURNS varchar(11)

BEGIN

declare string_in varchar(39);

declare string_out varchar(78);

declare offset tinyint(2);

declare outpass varchar(30) default ';

declare len tinyint;

/*declare i tinyint;*/

/**/

set len=LENGTH(inpass);

if((len<=0) or (len>10)) then

return "";

end if;

set offset=(SECOND(NOW()) mod 39)+1; /*根据秒数取模*/

/*insert into  testtb values(offset,'offset: ');*/

set string_out='YN8K1JOZVURB3MDETS5GPL27AXWIHQ94C6F0#$_';  /*密钥*/

set string_in='_$#ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

set outpass=CONCAT(outpass,SUBSTRING(string_out,offset,1));

/*     insert into  testtb values(2,outpass);*/

set string_out=CONCAT(string_out,string_out);

set @i=0;

REPEAT

set @i=@i+1;

set outpass=CONCAT(outpass,SUBSTR(string_out,INSTR(string_in,SUBSTRING(inpass,@i,1))+offset,1));

/*       insert into  testtb values(@i+2,outpass);*/

UNTIL (@i>=len)

end REPEAT;

return outpass;

END

(2)过程

CREATE PROCEDURE `pro_addmm`(IN inpass varchar(10),OUT outpass varchar(11))

BEGIN

declare string_in varchar(39);

declare string_out varchar(78);

declare offset tinyint(2);

declare len tinyint;

set outpass=';

set len=LENGTH(inpass);

if((len<=0) or (len>10)) then

set outpass=';

else

set offset=(SECOND(NOW()) mod 39)+1;

set string_out='YN8K1JOZVURB3MDETS5GPL27AXWIHQ94C6F0#$_';

set string_in='_$#ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

set outpass=CONCAT(outpass,SUBSTRING(string_out,offset,1));

set string_out=CONCAT(string_out,string_out);

set @i=0;

REPEAT

set @i=@i+1;

set outpass=CONCAT(outpass,SUBSTR(string_out,INSTR(string_in,SUBSTRING(inpass,@i,1))+offset,1));

UNTIL (@i>=len)

end REPEAT;

end if;

END

//

执行结果如下:

mysql> call pro_addmm('zhouys',@a);

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;

+---------+

| @a      |

+---------+

| U_PI6$4 |

+---------+

1 row in set (0.00 sec)

mysql> call pro_addmm('zhouys',@a);

Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;

+---------+

| @a      |

+---------+

| 9P8UEGM |

+---------+

1 row in set (0.00 sec)

mysql> select fun_submm('U_PI6$4');

+----------------------+

| fun_submm('U_PI6$4') |

+----------------------+

| ZHOUYS               |

+----------------------+

1 row in set (0.00 sec)

加密算法有几个弱点:

1、不支持大小写

2、不支持中文

3、加密强度不够

如果用mysql query browser分析器来做,就不用delimiter了:

CREATE PROCEDURE `procedure1`(myid int,name varchar(20), password varchar(20))

BEGIN

INSERT INTO user(id,name,password)

VALUES (myid, name,password);

END

总结函数存储过程:

# Basic syntax to create a function

delimiter //

create function add_tax (price float) returns float

return price*1.1;

//

delimiter ;

调用直接用:select add_tax(100);

程序清单存储过程:

#basic

# Basic stored procedure example

delimiter //

create procedure total_orders (out total float)

begin

select sum(amount) into total from orders;

end

//

delimiter ;

调用代码为:call total_orders(@b);

mysql->select @b;

mysql默认的是本地主机是localhost,对应的IP地址就是127.0.0.1,所以你用你的IP地址登录会出错,如果你想用你的IP地址登录就要先进行授权用grant命令。

mysql>grant   all   on   *.*   to   root@202.116.39.2   identified   by   "123456";

说明:grant   与on   之间是各种权限,例如:insert,select,update等

on   之后是数据库名和表名,第一个*表示所有的数据库,第二个*表示所有的表

root可以改成你的用户名,@后可以跟域名或IP地址,identified   by   后面的是登录用的密码,可以省略,即缺省密码或者叫空密码。

Server   Host:localhost       Port:3306

Username:root

Password:*******

Default   Schema:test

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值