程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL-10-mysql編程

MySQL-10-mysql編程

編輯:MySQL綜合教程

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.觸發器

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved