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.触发器

时间: 2024-12-14 08:06:17

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方

Navicat MySql 10.1.7软件和注册码

Navicat MySql 10.1.7很精致的软件 地址: 注册码:名,组织,注册码都是:NAVN-LNXG-XHHX-5NOO

The MySQL C API 编程实例

在网上找了一些MYSQL C API编程的文章,看了后认为还是写的不够充分,依据自己经验写了这篇<The MySQL C API 编程实例>,希望对须要调用到MYSQL的C的API的朋友有所帮助,附例中的环境为RedHat 在这篇文章里,我们将学会怎么使用MySQL 的C APIs(Application Programming Interfaces 编程接口).为了非常好地了解这篇文章,您须要具备下面前提知识: C语言变量 C语言函数 C语言指针 简单介绍 C APIs包括在mysqlcli

No module named &#39;MySQLdb&#39; python3.6 + django 1.10 + mysql 无法连接

学习python 连接mysql数据库的时候遇到了问题 首先安装mysql: 工具栏 ===>file ==> default settings==>Project Interpreter ==> 点击右侧的+ 号==>pymysql==>OK (1) 进入 settings.py==> DATABASES = { 'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'pymysql_test','US

mysq&#39;l系列之10.mysql优化&amp;权限控制

网站打开慢如何排查 1.打开网页, 用谷歌浏览器F12, 查看network: 哪个加载时间长就优化哪个 2.如果是数据库问题 2.1 查看大体情况 # top # uptime  //load average 负载 mysql> show full processlist; 2.2 查看慢查询日志: long_query_time = 1 log-slow-queries = /data/3306/slow.log 日志分析工具: mysqldumpslow  mysqlsla  myprof

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源码压缩文件,并更新软件

10 : mysql 主从复制 - 延时从库

延时从库 主从复制很好的解决了物理损坏,但是如果主库有个误删除写入的操作怎么办? 正常情况下从库也会同步这个错误的,企业中应该怎么避免这个情况?这个时候就需要使用延时同步来解决: 延时从库?delay(延时)从节点同步数据. 对SQL线程进行延时设置.IO线程正常的执行.企业中一般延迟3-6小时 延时从库的配置过程:mysql>stop slave;mysql>CHANGE MASTER TO MASTER_DELAY = 60; (延时60s)mysql>start slave;mys

【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