您好,登錄后才能下訂單哦!
本文主要給大家介紹mysql 語法結構講義,希望可以給大家補充和更新些知識,如有其它問題需要了解的可以持續在億速云行業資訊里面關注我的更新文章的。
一:
創建數據庫:
create {database | schema} [if not exists] 庫名 [default] character set [=] charset_name
if not exists 如果存在,就忽略。
character set 默認字符集編碼。
創建數據庫: create database
修改數據庫: alter database
刪除數據庫: drop database
1、mysql常見的數據類型;
數據類型是指列、存儲過程參數、表達式和局部變量的數據特征,它決定了數據的存儲格式,代表了不同的信息類型。
整型:
數據類型 字節
tinyint 1
smallint 2
mediumint 3
int 4
bigint 8
浮點型:
float[(M,D)] M是數字總位數,D是小數點后面的位數。
如果M和D被省略,根據硬件允許的限制來保存值。單精度浮點數。
double[(M,D)]
日期時間型:
date 3字節 YYY-MMM-DD 日期值
time 3字節 HH:MM:SS 時間值
year 1字節 YYYY 年份值
datetime 8字節 YYYY-MM-DD 混合日期和時間值
timestamp 8字節 YYYYMMDDHHMMSS 混合日期和時間值,時間戳。
字符型:
char 0-255字節 定長字符串
varchar 0-65535字節 變長字符串
tinytext 短文本字符串
text 長文本數據
mediumtext 中等長度文本數據
longtext 極大文本數據
enum('value1','value2') 1或2個字節
取決于枚舉值的個數(最多65535個數).
set(‘value1','value2') , 1、2、3、4或8個字節,取決于set成員的數目u(最多64個成員)
打開數據庫:use 庫名;
驗證用戶打開的數據庫:
select database();
創建數據表:
create table [if not exists] 表名(列名稱 數據類型,...)
查看數據表列表
show tables [from 庫名] [like 'pattern' | where expr]
查看數據表結構:
show columns from 表名; 或 desc 表名
插入記錄:
insert [into] 表名 [(字段名,...)] values(值,...);
insert 表名 values(值,...)
查找記錄
select 字段,........ from 表名;
mysql空值和非空:
空值與非空值
NULL: 表示字段可以為空
NOT NULL:表示字段不允許為空。
mysql自動編號:
自動編號,且必須和主鍵組合使用
默認情況下,起始值為1,每次增量為1. auto_increment
mysql主鍵約束:
primary key或key
主鍵約束特點:
每張數據表只能存在一個主鍵,
主鍵保證記錄的唯一性。
主鍵自動為not null
mysql唯一約束:
unique key
唯一約束特點:
唯一約束可以保證記錄的唯一性
唯一約束的字段可以為空值(null)
每張數據表可以存在多個唯一約束。
mysql默認約束:
default
默認值
當插入記錄時,如果沒有明確為字段賦值,則自動賦予默認值。
總結:
數字類型: 字符型,整型,浮點型, 日期時間型
數據表操作: 插入記錄,查找記錄。
記錄操作: 創建數據表,約束的使用。
二:
數據表操作:
如何創建數據表:
主鍵約束(primary key)
唯一約束(unique key)
默認約束(default)
非空約束(not null)
記錄插入
記錄查找
約束:
約束保證數據的完整性和一致性
約束分為表級約束和列級約束
約束類型包括:
主鍵約束(primary key)
唯一約束(unique key)
默認約束(default)
非空約束(not null)
外鍵約束(foreign key)
外鍵約束(foreign key)
保證數據一致性,完整性
實現一對一或一對多關系
外鍵約束的要求:
1、父表和子表必須使用相同的存儲引擎,而且禁止使用臨時表。
2、數據表的存儲引擎只能為INNODB。
3、外鍵列和參照列必須具有相似的數據類型。其中,數字的長度或是否有符號位必須相同,而字符的長度則可以不同。
4、外鍵列和參照列必須創建索引。如果外鍵列不存在索引的話,mysql將自動創建索引。
編輯數據表的默認存儲引擎:
mysql配置文件
Default-storage-engine=INNODB
查看表名所使用的引擎或表詳細結構: show create table 表名;
查看表的索引: show indexes from 表名\G
查看mysql下所有數據庫: show databases;
查看當前庫下所有的表: show tables;
查看視圖基本信息: desc 視圖名;
查看視圖基本信息: show table status like '視圖名';
查看視圖詳細信息: show create view 視圖名
查詢所有觸發器的信息: show triggers
查詢指定觸發器的詳細信息:
select * from information_schema.triggers where trigger_name='觸發器名';
查看存儲過程和函數的狀態:
show {查詢存儲過程 | 查詢存儲函數} status [like 'pattern'];
注意: like 'pattern' : 匹配存儲過程或函數名稱。
查看存儲過程和函數狀態:
show create {procedure | function} sp_name;
procedure : 表示查詢存儲過程。
function : 表示查詢存儲函數。
sp_name : 表示存儲過程或函數名。
select * from information_schema.Routines WHERE routine_name='sp_name';
注意: routine_name : 存儲過程和函數名。
sp_name 存儲過程或函數名。
mysql 外鍵約束的參照操作:
1、cascade:從父表刪除或更新且自動刪除或更新子表中匹配的行。
2、set null:從父表刪除或更新行,并設置子表中的外鍵列為null.如果使用該選項,必須保證子表列沒有指定not null.
3、resttict:拒絕對父表的刪除或更新操作。
4、no action: 標準SQL的關鍵字,在mysql中restrict相同。
mysql表級約束和列級約束
列級約束:指對一個數據列建立的約束
表級約束:指對多個數據列建立的約束。
列級約束既可以在列定義時聲明,也可以在列定義后聲明。
表級約束只能在列定義后聲明。
mysql修改數據表--添加刪除列
修改數據表
添加單列:
alter table 表名 add [column] 列名 列定義 [first | after 列名]
列名(col_name)
列定義(column_definition)
添加多列:
alter table 表名 add [column] (列名 列定義,...)
刪除列:
alter table 表名 drop [列] 列名
添加主鍵約束:
alter table 表名 add [constraint [symbol]] primary key [index_type](index_col_name)
例如:
mysql> create table user2(
-> username varchar(10) not null,
-> pid smallint unsigned
-> );
Query OK, 0 rows affected (0.02 sec)
mysql> desc user2;
mysql> alter table user2 add id smallint unsigned;
mysql> alter table user2 add constraint pk_user2_id primary key(id);
添加唯一約束:
alter table 表名 add [constraint [symbol]] unique [index | key] [index_name] [index_type] (index_col_name,....)
例:
mysql> alter table user2 add unique(username);
mysql> desc user2;
mysql> alter table user2 add foreign key(pid) references provinces(id);
添加/刪除默認約束
alter table 表名 alter [column] col_name {set default literal | drop default}
例:
mysql> alter table user2 add age tinyint unsigned not null;
mysql> alter table user2 alter age set default 15;
mysql修改數據表---刪除約束
刪除主鍵約束
alter table 表名 drop primary key
例:
mysql> alter table user2 drop primary key;
mysql> desc user2;
刪除唯一約束:
alter table 表名 drop {index|key} index_name
例:
mysql> alter table user2 drop index username;
刪除外鍵約束:
alter table 表名 drop foreign key fk_symbol(外鍵約束名稱)
例如:
mysql> show create table user2;
mysql> alter table user2 drop foreign key user2_ibfk_1;
mysql> alter table user2 drop index pid;
mysql修改數據表---修改列定義和更名數據表
修改列定義:
alter table 表名 modify [column]
col_name col_definition [first | after col_name]
例如:
mysql> alter table user2 modify id smallint unsigned not null first;
mysql> show columns from user2;
mysql> alter table user2 modify id tinyint unsigned not null;
修改列名稱
alter table 表名 change [column] old_col_name new_col_name col_definition [first | after col_name]
例如:
mysql> desc user2;
mysql> alter table user2 change pid p_id tinyint unsigned not null;
mysql> desc user2;
數據表更名:
方法一:
alter table 表名 rename [to|as] new_tb1_name
方法二:
rename table 表名 to 新表名 [,表名2 to 新表名2]...
例如:
mysql> alter table user2 rename user3;
或:
mysql> rename table user3 to user2;
總結:
一、約束:
(1)按功能劃分:not null,primary key,unique key, default, foreign key
(2) 按數據列的數目劃分:表級約束,列級約束。
二、修改數據表;
(1)針對字段的操作:添加/刪除字段,修改列定義,修改列名稱等。
(2)針對約束的操作:添加/刪除各種約束。
(3)針對數據表的操作:數據表更名(兩種方式)
mysql 插入記錄insert
插入記錄:
insert [into] 表名 [(col_name,...)]
{values | value} {{expr | default},...),(...),....}
例如:
mysql> create table user(
-> id smallint unsigned primary key auto_increment,
-> username varchar(20) not null,
-> password varchar(30) not null,
-> age tinyint unsigned not null default 10,
-> sex boolean
-> );
mysql> insert user values(null,'Tom','123',24,1);
mysql> insert user values(null,'join','456',25,1);
mysql> insert user values(default,'Tom','456',26,0);
mysql> insert user values(default,'join','123',2*8+3,0),(null,'jack','5678',default,0);
插入記錄:
insert [into] 表名 set col_name={expr | default}...
例如:
mysql> insert user set username='jack',password='123.cn';
插入記錄:
insert [into] 表名 [(col_name,...)] select ...
mysql單表更新update和刪除記錄delete
update
更新記錄(單表更新)
update [low_priority] [ignore] table_reference set col_name1={expr1 | default} [,col_name2={expr2 | default}]... [where where_condition]
例如:
mysql> update user set age=age+5;
mysql> update user set age=age-id,sex=0;
mysql> update user set age=age+5 where id%2=0;
delete
刪除記錄(單表刪除)
delete from 表名 [where 搜索條件]
例如:
mysql> delete from user where id=3;
mysql> insert user values(null,'111','456','30',null);
select
查找記錄
select select_expr [.select_expr..]
[
from table_references
[where 條件表達式]
[group by {col_name | position} [asc | desc],...]
[having 條件表達式]
[order by {col_name | expr | position } [asc | desc],...]
[limit {[offset]row_count | row_count offset offset}]
]
查詢表達式
查詢表達式表示你想要的某一列,必須至少有一列
多個列之間用英文逗號分隔。
星號(*)表示所有列,tbl_name.*可以表示命名表的所有列
查詢表達式可以使用[AS]alias_name為其賦予別名。
別名可以用于group by,order by 或having子句。
where
條件表達式:
對記錄進行過濾,如果沒有指定where子句,則顯示所有記錄。
在where表達式中,可以使用mysql支持的函數或運算符。
group by
查詢結果分組
[group by {col_name | position} [asc | desc ],...]
例如:
mysql> select sex from user group by sex;
having
分組條件
[having 分組條件]
例如:
mysql> select age from user group by age having age>300;
mysql> select sex,age from user group by 1 having count(id)>=2;
order by
對查詢結果進行排序
[order by {col_name | expr |position } [asc | desc],....]
例如:
mysql> insert user values(null,'123','234','30',1);
mysql> select * from user order by id asc;
mysql> select * from user order by age,id desc;
limit
限制查詢結果返回的數量
[LIMIT {[offset,]row_count | row_count OFFSET offset}]
例如:
mysql> select * from user limit 2,2;
mysql> select * from user limit 3;
mysql> create table test(
-> id tinyint unsigned primary key auto_increment,
-> username varchar(20)
-> );
mysql> insert test(username) select username from user where age >=30;
mysql> select * from test;
mysql三種常見的子查詢:
用any,some或all修飾的比較運算符:
operand comparison_operator any(subquery)
operand comparison_operator some(subquery)
operand comparison_operator all(subquery)
any,some,all關鍵字
運算符 any some all
>,>= 最小值 最小值 最大值
<,<= 最大值 最大值 最小值
= 任意值 任意值
<>,!= 任意值
例如:
mysql> select goods_id,goods_name,goods_price from tdb_goods where goods_price>any(select goods_price from tdb_goods where goods_cate='超級本');
使用[not] in的子查詢
語法:
operand comparison_operator [not] in (subquery)
=any 運算符與in等效
!=all 或<>all運算與not in等效。
例如:
創建商品分類:
mysql> create table if not exists tdb_goods_cates(
-> cate_id smallint unsigned primary key auto_increment,
-> cate_name varchar(40) not null
-> );
mysql> select goods_cate from tdb_goods group by goods_cate;
將這個插入到tdb_goods_cates
mysql> desc tdb_goods_cates;
mysql> insert tdb_goods_cates(cate_name) select goods_cate from tdb_goods group by goods_cate;
mysql> select * from tdb_goods_cates;
mysql多表更新
多表更新
update table_references
set col_name1(列)={表達式1 | default}
[,col_name2={表達式2 | default}]..
[where where_condition]
表的參照關系:
table_reference
{[inner內 | cross] join | {left|right} [outer] join}
table_reference
on conditional_expr 表的連接條件
連接類型:
inner join,內連接
在mysql中,join,cross join和inner join是等價的。
left [outer] join,左外連接。
right [outer] join,右外連接。
例如:
mysql> update tdb_goods inner join tdb_goods_cates on goods_cate=cate_name set goods_cate=cate_id;
create...select
創建數據表同時將查詢結果寫入到數據表
create table [if not exists] 表名
[(create_definition,....)]
select_statement
例如:
mysql> select brand_name from tdb_goods group by brand_name;
mysql> create table tdb_goods_brands(
-> brand_id smallint unsigned primary key auto_increment,
-> brand_name varchar(40) not null
-> )
-> select brand_name from tdb_goods group by brand_name;
mysql> select * from tdb_goods_brands;
mysql> update tdb_goods AS a inner join tdb_goods_brands AS b on a.brand_name=b.brand_name set a.brand_name=b.brand_id;
mysql> desc tdb_goods\G;
需要修改字段名和字段類型:
mysql> alter table tdb_goods
-> change goods_cate cate_id smallint unsigned not null,
-> change brand_name brand_id smallint unsigned not null;
mysql> insert tdb_goods_cates(cate_name) values
-> ('路由器'),('交換機'),('網卡');
mysql> insert tdb_goods_brands(brand_name)values('海爾'),('清華同方'),('神舟');
mysql> insert tdb_goods(goods_name,cate_id,brand_id,goods_price)values('yuan 123.cn密碼集合','13','4','1849');
mysql內連接inner join
子查詢與連接:
連接
mysql的select語句,多表更新,多表刪除語句中支持join操作。
語法結構;
table_reference
{[inner |cross] join | {left | right} [outer] join}
table_reference
on conditional_expr 連接條件。
數據表參照:
table_reference
表名 [[as] alias] | table_subquery [as] alias
數據表可以使用:表名 AS 別名 或表名 別名 賦予別名
table_subquery可以作為子查詢使用在from子句中,這樣的子查詢必須為其賦予別名。
連接類型:
inner join, 內連接
在mysql中,join,cross join和inner join是等價的。
left [outer] join,左外連接。
right [outer] join,右外連接。
連接條件:
使用on關鍵字來設定連接條件,也可以使用where來代替。
通常使用on關鍵字來設定連接條件。
使用where關鍵字來進行結果集記錄的過濾。
內連接
顯示左表和右表符合連接條件的記錄。
例如:
mysql> select goods_id,goods_name,cate_name from tdb_goods inner join tdb_goods_cates on tdb_goods.cate_id=tdb_goods_cates.cate_id;
mysql外連接outer join
左外連接
顯示左表的全部記錄及右表符合連接條件的記錄
右外連接
顯示右表的全部記錄及左表符合連接條件的記錄。
左外連接:
例如:
mysql> select goods_id,goods_name,cate_name from tdb_goods left join tdb_goods_cates on tdb_goods.cate_id=tdb_goods_cates.cate_id;
右外連接:
mysql> select goods_id,goods_name,cate_name from tdb_goods right join tdb_goods_cates on tdb_goods.cate_id=tdb_goods_cates.cate_id\G;
mysql多表連接:
例如:
mysql> select goods_id,goods_name,cate_name,brand_name,goods_price from tdb_goods AS a inner join tdb_goods_cates AS b ON a.cate_id=b.cate_id
-> inner join tdb_goods_brands AS c ON a.brand_id=c.brand_id\G;
外連接:
A LEFT JOIN B join_condition
數據表B的結果集依賴數據表A
數據表A的結果集根據左連接條件依賴所有數據表(B表除外)
左外連接條件決定如何檢索數據表B(在沒有指定where條件的情況下)
如果數據表A的某條記錄符合where條件,但是在數據表B中不存在符合連接條件的記錄,將生成一個所有列為空的額外的B行。
外連接:
如果使用內連接查找的記錄在連接數據表中不存在,并且在where子句中嘗試以下操作:col_name is null時,如果col_name被定義為not null, mysql將在找到符合連接條件的記錄后停止搜索更多的行。
mysql無限級分類表設計:
無限級分類數據表的設計
例如:
mysql> create table tdb_goods_types(
-> type_id smallint unsigned primary key
-> auto_increment,
-> type_name varchar(20) not null,
-> parent_id smallint unsigned not null default 0);
parent_id 父類的ID。
mysql> select * from tdb_goods_types;
例如:
mysql> select s.type_id,s.type_name,p.type_name from tdb_goods_types AS s LEFT JOIN tdb_goods_types AS p ON s.parent_id=p.type_id;
mysql> select p.type_id,p.type_name,s.type_name from tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id=p.type_id;
mysql> select p.type_id,p.type_name,s.type_name from tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id=p.type_id GROUP BY p.type_name;
mysql> select p.type_id,p.type_name,s.type_name from tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id=p.type_id GROUP BY p.type_name ORDER BY p.type_id;
mysql> select p.type_id,p.type_name,count(s.type_name) child_count from tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id=p.type_id GROUP BY p.type_name ORDER BY p.type_id;
mysql多表刪除:
例如:
mysql> select goods_id,goods_name from tdb_goods group by goods_name;
mysql> select goods_id,goods_name from tdb_goods group by goods_name HAVING count(goods_name)>1;
mysql> DELETE t1 from tdb_goods AS t1 LEFT JOIN (SELECT goods_id,goods_name from tdb_goods GROUP BY goods_name HAVING count(goods_name)>1) AS t2 ON t1.goods_name=t2.goods_name WHERE t1.goods_id>t2.goods_id;
mysql> select * from tdb_goods\G
mysql字符函數:
運算符和函數
根據功能的不同可以劃分為:
1、字符函數
2、數值運算符與函數
3、比較運算與函數
4、日期時間函數
5、信息函數
6、聚合函數
7、加密函數
字符函數:
函數名
CONCAT( ) : 字符連接
CONCAT_WS( ) : 使用指定分隔符進行字符連接。
FORMAT( ) : 數字格式化
LOWER( ) : 轉換成小寫字母
UPPER( ) : 轉換成大寫字母
LEFT( ) : 獲取左側字符。
RIGHT( ) : 獲取右側字符。
例如:
mysql> select * from test;
mysql> select concat('yuan','_','MYSQL');
mysql> select * from user;
將兩個字段合并為一個字段。
mysql> select concat(username,age) as fullname from user;
mysql> select concat('dajiangtai','_','Mysql');
mysql> select concat_ws('@','a','b','c');
mysql> select format(12345.678,2);
mysql> select lower('ANXIAOYU');
mysql> select upper('anxiaoyu');
mysql> select left('DaJiangTai',3);
mysql> select lower(left('DaJiangTai',3));
mysql> select length('dajiangtai');
length() : 獲取字符串長度。
ltrim() : 刪除前導空格。
rtrim() : 刪除后續空格。
trim() : 刪除前導和后續空格。
substring() : 字符串截取。
[not] like : 模式匹配。
replace() : 字符串替換。
例如:
mysql> select ltrim(' dajiangtai ');
mysql> select length(ltrim(' dajiangtai '));
mysql> select trim(leading '@' from '@@@dajiangtai@@@@');
mysql> select trim(trailing '@' from '@@@dajiangtai@@@@');
mysql> select trim(both '@' from '@@@dajiangtai@@@@');
mysql> select replace('@@@dajiang@@tai@@@','@','');
mysql> select replace('@@@dajiang@@tai@@@','@','##');
mysql> select substring('dajiangtai',3,5);
mysql> select substring('dajiangtai',3);
mysql> select substring('dajiangtai',-3);
mysql> select 'dajiangtai' like 'd%';
mysql 數值運算符和函數
ceil() : 進一取整
div : 整數除法
floor() : 舍一取整
mod : 取余數(取模)
power() : 冪運算。
round() : 四舍五入
truncate() : 數字截取
例如:
mysql> select 1+2;
mysql> select ceil(3.14);
mysql> select floor(3.14);
mysql> select 1/2;
mysql> select 1 div 2;
mysql> select 4%3;
mysql> select 4 mod 3;
mysql> select 4.2 mod 3;
mysql> select power(2,3);
mysql> select round(3.1415,3);
mysql> select truncate(12.3456,2);
mysql> select truncate(12.3456,-1);
mysql比較運算符和函數
[not] between...and... : [不] 在范圍之內
[not] in() : [不] 在列出值范圍內。
is [not] null : [不]為空。
例如;
mysql> select 2 between 1 and 3;
mysql> select 1 between 2 and 3;
mysql> select 2 between 2 and 3;
mysql> select 1 in (1,2,3,4);
mysql> select null is null;
mysql> select '' is null;
mysql日期時間函數
日期時間函數:
now() : 當前日期和時間
curdate() : 當前日期
curtime() : 當前時間
date_add() : 日期變化。
datediff() : 日期差值。
date_format() :日期格式化。
例如:
mysql> select now();
mysql> select curdate();
mysql> select date_add('2015-1-1',interval 365 day);
mysql> select date_add('2015-1-1',interval -365 day);
mysql> select datediff('2015-1-2','2015-2-2');
mysql> select date_format('2015-5-5','%m/%d/%y');
mysql 信息函數
connection_id() : 連接ID
database() : 當前數據庫
last_insert_id() : 最后插入記錄的ID號。
user() : 當前用戶
version() : 版本信息。
例如:
mysql> select connection_id();
mysql> select database();
mysql> create table test(
-> id tinyint(3) unsigned not null primary key auto_increment,
-> username varchar(20) not null);
mysql> select last_insert_id();
mysql> insert test(username) values('join');
mysql> insert test(username) values('111');
mysql> insert test(username) values('123');
mysql> insert test(username) values('11');
mysql> insert test(username) values('22'),('33');
mysql> select last_insert_id();
mysql> select user();
mysql> select version();
mysql 聚合函數:
avg() : 平均值
count() : 計數。
max() :最大值。
min() : 最小值。
sum() : 求和。
例如:
mysql> select avg(id) from test;
mysql> select count(id) from test;
mysql 加密函數:
MD5() : 信息摘要算法
PASSWORD() : 密碼算法
例如:
mysql> select md5('admin');
mysql> select PASSWORD('admin');
mysql> set PASSWORD=PASSWORD('root');
mysql自定義函數:
用戶自定義函數(UDF) 是一種對mysql擴展的途徑,其用法與內置函數相同。
自定義函數的兩個必要條件:
(1), 參數
(2), 返回值。
函數可以返回任意類型的值,同樣可以接收這些類型的參數。
創建自定義函數:
create function function_name
returns
{string | integer | real | decimal}
routine_body
關于函數體:
(1) 函數體由合法的SQL語句構成。
(2) 函數體可以是簡單的select或insert語句。
(3) 函數體如果為復合結構則使用begin....end語句。
(4) 復合結構可以包含聲明,循環,控制語句。
設置客戶端編碼為gbk :
mysql> set names gbk;
mysql> select date_format(now(),'%Y年%m月%d日 %H點: %i分: %s秒');
mysql> create function f1()
-> returns varchar(30)
-> return date_format(now(),'%Y年%m月%d日 %H點: %i分: %s秒');
mysql> CREATE FUNCTION Q1(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
-> RETURNS FLOAT(10,2) UNSIGNED
-> RETURN (num1*num2)/2;
mysql> select Q1(3,4);
mysql> create function adduser(username VARCHAR(20))
-> RETURNS INT UNSIGNED
-> BEGIN
-> INSERT test(username) values(username);
-> RETURN LAST_INSERT_ID();
-> END
-> //
mysql> select adduser('hello');
-> //
刪除函數:
DROP FUNCTION [IF EXISTS] function_name
mysql存儲過程:
SQL命令----> mysql引擎---》語法分析----》 可執行命令---》執行結果----》 客戶端。
存儲過程:
存儲過程是SQL語句和控制語句的預編譯集合,以一個名稱存儲并作為一個單元處理。
存儲過程優點:
增強了SQL語句的功能和靈活性。
實現較快的執行速度。
減少網絡流量。
創建存儲過程的語法:
create
[DEFINER={USER | CURRENT_USER}]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
proc_parameter:
[IN | OUT | INOUT ] param_name type
參數:
IN : 表示該參數的值必須在調用存儲過程中指定。
OUT : 表示該參數的值可以被存儲過程改變,并且可以返回。
INOUT : 表示該參數在調用時指定,并且可以被改變和返回。
過程體:
過程體由合法的SQL語句構成。
過程體可以是"任意"的SQL語句。
過程體如果為復合結構則使用BEGIN...END語句。
復合結構可以包含聲明,循環,控制結構。
例如:
mysql> create procedure sp1() select VERSION();
mysql> CALL sp1;
調用存儲過程:
CALL sp_name([parameter[,...]])
CALL sp_name[( )]
mysql創建帶有IN類型參數的存儲過程:
例如:
mysql> delimiter //
mysql>
mysql> create procedure removeTestByid(IN id INT unsigned)
-> BEGIN
-> DELETE FROM test where id=id;
-> END
-> //
修改存儲過程:
alter procedure sp_name
[characteristic ...]
COMMENT 'string'
| {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL
DATA}
| SQL SECURITY {DEFINER | INVOKER}
刪除存儲過程:
drop procedure 名字;
例如:
mysql> insert user(username,password,age,sex) values('Tom1','123',21,1),('Tom2',
'1234',22,1);
mysql> insert user(username,password,age,sex) values('Tom3','123',30,1),('Tom4',
'1234',30,1);
mysql> insert user(username,password,age,sex) values('Tom5','12',20,1),('Tom6','
1234',32,1);
mysql> delimiter //
mysql> create procedure removeUserByid(IN p_id INT UNSIGNED)
-> BEGIN
-> DELETE FROM user where id=p_id;
-> END
-> //
mysql> delimiter ;
mysql> CALL removeUserByid(2);
mysql> SELECT * FROM user where id=2;
看了以上關于mysql 語法結構講義,希望能給大家在實際運用中帶來一定的幫助。本文由于篇幅有限,難免會有不足和需要補充的地方,如有需要更加專業的解答,可在官網聯系我們的24小時售前售后,隨時幫您解答問題的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。