MySQL-10-mysql编程

MySQL编程

1.语句结束符

默认有两个: ; 和 \g(只能在命令行中使用)

可以使用delimiter 命令来修改语句结束符,例如: delimiter $$(注意,一般手工修改结束符后再改回默认值 ;)

2.注释

a) 行注释: # 和 --[空格]

b) 块注释: /* */

3.变量

a) 系统变量: show variables [like pattern]; 查看

b) 用户自定义变量:

i. set 变量名=变量值;   注意:为了区分用户自定义变量和系统变量,需要在用户自定义变量名称前加@符号。例如 set @name=’John’;  使用select @变量名; 来获取自定义变量。

Set赋值用法的变量值也可是是标量查询的结果,例如:

Set @total=(select count(*) from student);

ii. 也可以使用select 字段 from 表名 into @变量名;  例如:select name from student into @stuName;

iii. Select @who=’小李’ ;  //关系判断,注意不是赋值操作,判断变量 @who中德值是不是等于“小李”,是的话返回1,否的话返回0.

定义变量的第三种方法:  使用 select @变量名 := 变量值 的方式

例如 select @who:=’小李’;   //给变量赋值,并将其检索出来

c) 变量的有效期

会话结束后,变量就失效(即断开连接后,变量失效)

d) 变量的作用域

用户定义的变量是全局的。但在函数内定义的变量则是局部的。

4.数据类型

变量的数据类型与字段的数据类型一致!

5.运算符

同一般编程语言中的运算符基本一致。算数运算符、逻辑运算符。

6.函数

1.内置函数

a) 数值处理函数

abs(x):返回绝对值

ceil(x):返回大于x的最小整数

floor(x):返回小于x的最大整数

mod(x,y):返回x与y的模

rand():返回0-1之间的随机数   select round(rand()*100);

round(x,y):返回参数x的y位小数的四舍五入结果

truncate(x,y):返回数字x截断为y位小数的结果字符串处理函数

B)字符串处理函数

1.concat(s1,s2....sn):把传入的参数连接成一个字符串

2.insert(str,x,y,insert):从str的x位置开始,替换y长度的字符串为insert

select insert(‘abcdefg‘,2,3,‘hello‘);

3.lower(str),upper(str):将字符串转换为大写,小写

4.left(str,x) right(str,x) 返回str左边(右边)x个字符,x为null则返回null

5.lpad(str,n,pad) rpad(str,n,pad)  用pad对字符串str从最左边(右边)进行填充,直到总长度达到n

select name,lpad(name,10,‘#‘),rpad(name,10,‘(‘) from cats;

6.trim(),ltrim(),rtrim()去掉两边,左边,右边空格

select concat(‘1‘,trim(‘   abc   ‘),‘2‘),concat(‘1‘,ltrim(‘   abc   ‘),‘2‘),concat(‘1‘,rtrim(‘   abc   ‘),‘2‘)\G;

7.replace(str,a,b) 在字符串str中用字符串b替换所有的字符串a

8.strcmp(s1,s2):如果S1比S2小,返回-1;如果S1比S2大则返回1;如果相等则返回0(比较的是ASC2码)

9.substring(str,x,y) 返回字符串str中从位置x起,长度为y的子字符串

C)日期时间

curdate()

curtime()

now();   select curdate();

select unix_timestamp(now());

select from_unixtime(1331110656);

select week(now()),year(now());

select hour(curtime()),minute(curtime());

select monthname(now());

select date_format(now(),"%Y-%m-%d %H:%i:%s");

D)流程控制函数

create table salary(id int,salary decimal(9,2));

if(value,true,false);   select id,salary,if(salary>300,‘high‘,‘low‘) from salary;

ifnull(t,false)    select id,salary,ifnull(salary,0) from salary;

case when [value1] then [result1]...else[default]end;

Select

case when salary<=300 then ‘low‘ else ‘high‘ end

from salary;

E)其他

database()  select database();   //返回当前使用的数据库

version()   //返回当前数据库的版本

user()      //返回当前连接上数据库的用户

inet_aton(ip)  将字符串地址转换为网络地址

password()  对mysql用户加密

md5() 对用户密码加密

select * from mysql.user \G;

2.用户自定义函数(注意:函数是绑定数据库的,在某个数据库中建立的函数只能在该数据库中使用,数据库被删除,函数也相应被删除)

语法:

create function 函数名(参数列表) returns 返回值类型

函数体

例子:

drop function if exists sayHello;

delimiter $$   //先将结束符改为$$,因为函数体中有分号,如果不将结束符修改一下,mysql会认为中途某个语句就结束,会报错

create function sayHello() returns varchar(20)

begin

return ‘hello world!‘;

end

$$    //函数也是语句,也需要结束符来结束

delimiter ;   //将结束符改为默认!!!

使用 select sayHello();  执行

7.流程控制

a) 分支语句

if 条件1 then

语句1

elseif 条件2 then

语句2

else

上述都不满足时执行的语句

end if;

例子:

drop function if exists func1;

delimiter $$

create function func1() returns varchar(10)

begin

if hour(now()) < 12 then

return ‘morning‘;

else

return ‘afternoon‘;

end if;

end

$$

delimiter ;

b) 循环语句

while 条件 do

循环体

end while;

循环的提前终止:

leave:终止整个循环(相当于c语言中的break)

iterate:终止本次循环,进入下一次循环(作用相当于c语言中的continue)

注意:使用leave和iterate时,需要给循环加一个标签,利用标签来终止(相当于c语言中的goto语句需要标号)

标签:while

end while 标签;

例子1:

drop function if exists func2;

delimiter $$

create function func2() returns int

begin

set @i = 1;

set @sum = 0;

while @i <= 10 do

set @sum = @sum + @i;

set @i = @i + 1;

end while;

return @sum;

end

$$

delimiter ;

例子2:

drop function if exists func;

delimiter $$

create function func() returns int

begin

set @i = 1;

set @sum = 0;

w:while @i <= 10 do

if @i = 5 then

leave w;

end if;

set @sum = @sum + @i;

set @i = @i + 1;

end while w;

return @sum;

end

$$

delimiter ;

例子3:

drop function if exists func;

delimiter $$

create function func() returns int

begin

set @i = 1;

set @sum = 0;

w:while @i <= 10 do

if @i = 5 then

set @i = @i + 1;

iterate w;

end if;

set @sum = @sum + @i;

set @i = @i + 1;

end while w;

return @sum;

end

$$

delimiter ;

说明:即使在函数内部声明的变量,如果使用@变量 形式,也是全局变量,在函数外部也可以访问。要想使用局部变量,有以下两种方法:

1.函数参数: 格式: 参数名 类型

2.函数声明局部变量: 使用declare声明局部变量

declare i int default 0; (局部变量没有@符号)

例1(使用参数):

drop function if exists sayHello2;

delimiter $$

create function sayHello2(user_name varchar(10)) returns varchar(20)

begin

return concat(‘hello ‘,user_name);

end

$$

delimiter ;

还可以像下面一样使用函数:

select id,sayHello2(userName) from student;

例2(使用declare声明局部变量):

drop function if exists mySum;

delimiter $$

create function mySum() returns int

begin

declare i int default 1;

declare sum int default 0;

while i<=100 do

set sum=sum+i;

set i=i+1;

end while;

return sum;

end

$$

delimiter ;

应用:

1.存储过程

2.存储函数

3.触发器

时间: 01-05

MySQL-10-mysql编程的相关文章

MySQL基础及MySQL C API编程

MySQL基础及MySQL C API编程 一.MySQL For Windows安装: 1. 下载: 上官网下载即可: http://www.mysql.com/downloads/ 2. 安装: 没有什么好说的,傻瓜式,也没有什么要注意的. 3. 配置: 添加系统变量MYSQL_HOME和修改PATH,目的就是让系统默认能够找到MySQL命令.(安装目录的/bin下面) PS: 补充一下,有的朋友可能下载的是免安装版本,拷贝到一个地方就可以了,这个时候,配置还是需要的,但是配置完成之后,需要

MariaDB 10 (MySQL DB) 多主复制并实现读写分离

MMM 即Master-Master Replication Manager for MySQL(mysql主主复制管理器)关于mysql主主复制配置的监控.故障转移和管理的一套可伸缩的脚本套件(在任何时候只有一个节点可以被写 入),这个套件也能对居于标准的主从配置的任意数量的从服务器进行读负载均衡,所以你可以用它来在一组居于复制的服务器启动虚拟ip,除此之外,它还有实 现数据备份.节点之间重新同步功能的脚本.MySQL本身没有提供replication failover的解决方案,通过MMM方

CentOS 7运维管理笔记(10)----MySQL源码安装

MySQL可以支持多种平台,如Windows,UNIX,FreeBSD或其他Linux系统.本篇随笔记录在CentOS 7 上使用源码安装MySQL的过程. 1.下载源码 选择使用北理工的镜像文件: 在CentOS 7 中输入如下命令: [[email protected]:~/Downloads] # wget http://mirror.bit.edu.cn/mysql/Downloads/MySQL-5.6/mysql-5.6.31.tar.gz 2.解压mysql源码压缩文件,并更新软件

【Mysql】Mysql的安装、部署与图形化

Mysql是一个必须学会如何安装与部署的工具,它不同于其它那些傻瓜式的应用/程序,一键到底,如果是初次在Windows下安装Mysql的初学者还是有一定难度的. 本文配合之前的<[Javaweb]前台开发环境的配置Myeclipse6.5+JDK1.6+Tomcat6.0+SVN1.8>(点击打开链接)一文中的前台开发环境的部署,也就形成了JavaWeb.JSP.J2EE的基本开发环境. 一.Mysql的下载 首先打开Mysql的官网(点击打开链接),百度一下是搜不到的,我也找了很久才找到My

MySQL配置文件mysql.ini参数详解、MySQL性能优化

MySQL配置文件mysql.ini参数详解.MySQL性能优化 my.ini(Linux系统下是my.cnf),当mysql服务器启动时它会读取这个文件,设置相关的运行环境参数. my.ini分为两块:Client Section和Server Section.   Client Section用来配置MySQL客户端参数.   要查看配置参数可以用下面的命令: show variables like '%innodb%'; # 查看innodb相关配置参数 show status like

CoroSync + Drbd + MySQL 实现MySQL的高可用集群

Corosync + DRBD + MySQL 构建高可用MySQL集群 节点规划: node1.huhu.com172.16.100.103 node2.huhu.com172.16.100.104 资源名称规划 资源名称:可以是除了空白字符外的任意ACSII码字符 DRBD设备:在双节点上,此DRBD设备文件,一般为/dev/drbdN,主设备号147 磁盘:在双方节点上,各自提供存储设备 网络配置:双方数据同步所使用的网络属性 DRBD从Linux内核2.6.33起已经整合进内核 1.配置

mysql初学,mysql修改,mysql查找,mysql删除,mysql基本命令

Mysql 下载地址https://dev.mysql.com/downloads/mysql/ 1.连接Mysql格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密码前必须没有空格,否则让你重新输入密码. 如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,M

mysql之 mysql 5.6不停机主主搭建(活跃双主基于日志点复制)

环境说明:版本 version 5.6.25-log 主库ip: 10.219.24.25从库ip:10.219.24.22os 版本: centos 6.7已安装热备软件:xtrabackup 防火墙已关 补充:主从复制原理: http://blog.csdn.net/zhang123456456/article/details/72972701mysql 5.6安装 :http://blog.csdn.net/zhang123456456/article/details/53608554xt

centos lvs+keepalived+mysql实现mysql数据库热备主主复制-亲测ok

实验环境: linux:centos6.6 虚拟ip(vip):192.168.135.199 mysql master:192.168.20.193 mysql slave:192.168.20.195 (这里只是为了后文方便区分,一个叫master,一个叫slave,其实在主主复制中,都是master也都是slave,没有主从之分) mysql的版本: [[email protected] ~]# mysql -V mysql  Ver 14.14 Distrib 5.1.73, for r

跟王老师学MySQL:MySQL数据类型之小数类型

跟王老师学MySQL:MySQL数据类型之小数类型 主讲教师:王少华   QQ群号:483773664 学习内容 小数类型有哪些以及它们的取值范围 定义语法中的M和D的含义 定点型和浮点型的区别 一.简介 MySQL中使用浮点数类型和定点数类型来表示小数. 浮点数类型包括单精度浮点数(FLOAT型)和双精度浮点数(DOUBLE型). 定点数类型就是DECIMAL型. 二.字节数.取值范围 三.定义语法 1 类据类型 (M,D) M:精度,数据的总长度 D:标度,小数点后的长度 注: 小数点不占长