您好,登錄后才能下訂單哦!
本文主要給大家介紹mysql 語法結(jié)構(gòu)講義,希望可以給大家補(bǔ)充和更新些知識(shí),如有其它問題需要了解的可以持續(xù)在億速云行業(yè)資訊里面關(guān)注我的更新文章的。
一:
創(chuàng)建數(shù)據(jù)庫:
create {database | schema} [if not exists] 庫名 [default] character set [=] charset_name
if not exists 如果存在,就忽略。
character set 默認(rèn)字符集編碼。
創(chuàng)建數(shù)據(jù)庫: create database
修改數(shù)據(jù)庫: alter database
刪除數(shù)據(jù)庫: drop database
1、mysql常見的數(shù)據(jù)類型;
數(shù)據(jù)類型是指列、存儲(chǔ)過程參數(shù)、表達(dá)式和局部變量的數(shù)據(jù)特征,它決定了數(shù)據(jù)的存儲(chǔ)格式,代表了不同的信息類型。
整型:
數(shù)據(jù)類型 字節(jié)
tinyint 1
smallint 2
mediumint 3
int 4
bigint 8
浮點(diǎn)型:
float[(M,D)] M是數(shù)字總位數(shù),D是小數(shù)點(diǎn)后面的位數(shù)。
如果M和D被省略,根據(jù)硬件允許的限制來保存值。單精度浮點(diǎn)數(shù)。
double[(M,D)]
日期時(shí)間型:
date 3字節(jié) YYY-MMM-DD 日期值
time 3字節(jié) HH:MM:SS 時(shí)間值
year 1字節(jié) YYYY 年份值
datetime 8字節(jié) YYYY-MM-DD 混合日期和時(shí)間值
timestamp 8字節(jié) YYYYMMDDHHMMSS 混合日期和時(shí)間值,時(shí)間戳。
字符型:
char 0-255字節(jié) 定長字符串
varchar 0-65535字節(jié) 變長字符串
tinytext 短文本字符串
text 長文本數(shù)據(jù)
mediumtext 中等長度文本數(shù)據(jù)
longtext 極大文本數(shù)據(jù)
enum('value1','value2') 1或2個(gè)字節(jié)
取決于枚舉值的個(gè)數(shù)(最多65535個(gè)數(shù)).
set(‘value1','value2') , 1、2、3、4或8個(gè)字節(jié),取決于set成員的數(shù)目u(最多64個(gè)成員)
打開數(shù)據(jù)庫:use 庫名;
驗(yàn)證用戶打開的數(shù)據(jù)庫:
select database();
創(chuàng)建數(shù)據(jù)表:
create table [if not exists] 表名(列名稱 數(shù)據(jù)類型,...)
查看數(shù)據(jù)表列表
show tables [from 庫名] [like 'pattern' | where expr]
查看數(shù)據(jù)表結(jié)構(gòu):
show columns from 表名; 或 desc 表名
插入記錄:
insert [into] 表名 [(字段名,...)] values(值,...);
insert 表名 values(值,...)
查找記錄
select 字段,........ from 表名;
mysql空值和非空:
空值與非空值
NULL: 表示字段可以為空
NOT NULL:表示字段不允許為空。
mysql自動(dòng)編號(hào):
自動(dòng)編號(hào),且必須和主鍵組合使用
默認(rèn)情況下,起始值為1,每次增量為1. auto_increment
mysql主鍵約束:
primary key或key
主鍵約束特點(diǎn):
每張數(shù)據(jù)表只能存在一個(gè)主鍵,
主鍵保證記錄的唯一性。
主鍵自動(dòng)為not null
mysql唯一約束:
unique key
唯一約束特點(diǎn):
唯一約束可以保證記錄的唯一性
唯一約束的字段可以為空值(null)
每張數(shù)據(jù)表可以存在多個(gè)唯一約束。
mysql默認(rèn)約束:
default
默認(rèn)值
當(dāng)插入記錄時(shí),如果沒有明確為字段賦值,則自動(dòng)賦予默認(rèn)值。
總結(jié):
數(shù)字類型: 字符型,整型,浮點(diǎn)型, 日期時(shí)間型
數(shù)據(jù)表操作: 插入記錄,查找記錄。
記錄操作: 創(chuàng)建數(shù)據(jù)表,約束的使用。
二:
數(shù)據(jù)表操作:
如何創(chuàng)建數(shù)據(jù)表:
主鍵約束(primary key)
唯一約束(unique key)
默認(rèn)約束(default)
非空約束(not null)
記錄插入
記錄查找
約束:
約束保證數(shù)據(jù)的完整性和一致性
約束分為表級(jí)約束和列級(jí)約束
約束類型包括:
主鍵約束(primary key)
唯一約束(unique key)
默認(rèn)約束(default)
非空約束(not null)
外鍵約束(foreign key)
外鍵約束(foreign key)
保證數(shù)據(jù)一致性,完整性
實(shí)現(xiàn)一對(duì)一或一對(duì)多關(guān)系
外鍵約束的要求:
1、父表和子表必須使用相同的存儲(chǔ)引擎,而且禁止使用臨時(shí)表。
2、數(shù)據(jù)表的存儲(chǔ)引擎只能為INNODB。
3、外鍵列和參照列必須具有相似的數(shù)據(jù)類型。其中,數(shù)字的長度或是否有符號(hào)位必須相同,而字符的長度則可以不同。
4、外鍵列和參照列必須創(chuàng)建索引。如果外鍵列不存在索引的話,mysql將自動(dòng)創(chuàng)建索引。
編輯數(shù)據(jù)表的默認(rèn)存儲(chǔ)引擎:
mysql配置文件
Default-storage-engine=INNODB
查看表名所使用的引擎或表詳細(xì)結(jié)構(gòu): show create table 表名;
查看表的索引: show indexes from 表名\G
查看mysql下所有數(shù)據(jù)庫: show databases;
查看當(dāng)前庫下所有的表: show tables;
查看視圖基本信息: desc 視圖名;
查看視圖基本信息: show table status like '視圖名';
查看視圖詳細(xì)信息: show create view 視圖名
查詢所有觸發(fā)器的信息: show triggers
查詢指定觸發(fā)器的詳細(xì)信息:
select * from information_schema.triggers where trigger_name='觸發(fā)器名';
查看存儲(chǔ)過程和函數(shù)的狀態(tài):
show {查詢存儲(chǔ)過程 | 查詢存儲(chǔ)函數(shù)} status [like 'pattern'];
注意: like 'pattern' : 匹配存儲(chǔ)過程或函數(shù)名稱。
查看存儲(chǔ)過程和函數(shù)狀態(tài):
show create {procedure | function} sp_name;
procedure : 表示查詢存儲(chǔ)過程。
function : 表示查詢存儲(chǔ)函數(shù)。
sp_name : 表示存儲(chǔ)過程或函數(shù)名。
select * from information_schema.Routines WHERE routine_name='sp_name';
注意: routine_name : 存儲(chǔ)過程和函數(shù)名。
sp_name 存儲(chǔ)過程或函數(shù)名。
mysql 外鍵約束的參照操作:
1、cascade:從父表刪除或更新且自動(dòng)刪除或更新子表中匹配的行。
2、set null:從父表刪除或更新行,并設(shè)置子表中的外鍵列為null.如果使用該選項(xiàng),必須保證子表列沒有指定not null.
3、resttict:拒絕對(duì)父表的刪除或更新操作。
4、no action: 標(biāo)準(zhǔn)SQL的關(guān)鍵字,在mysql中restrict相同。
mysql表級(jí)約束和列級(jí)約束
列級(jí)約束:指對(duì)一個(gè)數(shù)據(jù)列建立的約束
表級(jí)約束:指對(duì)多個(gè)數(shù)據(jù)列建立的約束。
列級(jí)約束既可以在列定義時(shí)聲明,也可以在列定義后聲明。
表級(jí)約束只能在列定義后聲明。
mysql修改數(shù)據(jù)表--添加刪除列
修改數(shù)據(jù)表
添加單列:
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);
添加/刪除默認(rèn)約束
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修改數(shù)據(jù)表---刪除約束
刪除主鍵約束
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修改數(shù)據(jù)表---修改列定義和更名數(shù)據(jù)表
修改列定義:
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;
數(shù)據(jù)表更名:
方法一:
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;
總結(jié):
一、約束:
(1)按功能劃分:not null,primary key,unique key, default, foreign key
(2) 按數(shù)據(jù)列的數(shù)目劃分:表級(jí)約束,列級(jí)約束。
二、修改數(shù)據(jù)表;
(1)針對(duì)字段的操作:添加/刪除字段,修改列定義,修改列名稱等。
(2)針對(duì)約束的操作:添加/刪除各種約束。
(3)針對(duì)數(shù)據(jù)表的操作:數(shù)據(jù)表更名(兩種方式)
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 條件表達(dá)式]
[group by {col_name | position} [asc | desc],...]
[having 條件表達(dá)式]
[order by {col_name | expr | position } [asc | desc],...]
[limit {[offset]row_count | row_count offset offset}]
]
查詢表達(dá)式
查詢表達(dá)式表示你想要的某一列,必須至少有一列
多個(gè)列之間用英文逗號(hào)分隔。
星號(hào)(*)表示所有列,tbl_name.*可以表示命名表的所有列
查詢表達(dá)式可以使用[AS]alias_name為其賦予別名。
別名可以用于group by,order by 或having子句。
where
條件表達(dá)式:
對(duì)記錄進(jìn)行過濾,如果沒有指定where子句,則顯示所有記錄。
在where表達(dá)式中,可以使用mysql支持的函數(shù)或運(yùn)算符。
group by
查詢結(jié)果分組
[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
對(duì)查詢結(jié)果進(jìn)行排序
[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
限制查詢結(jié)果返回的數(shù)量
[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修飾的比較運(yùn)算符:
operand comparison_operator any(subquery)
operand comparison_operator some(subquery)
operand comparison_operator all(subquery)
any,some,all關(guān)鍵字
運(yùn)算符 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='超級(jí)本');
使用[not] in的子查詢
語法:
operand comparison_operator [not] in (subquery)
=any 運(yùn)算符與in等效
!=all 或<>all運(yùn)算與not in等效。
例如:
創(chuàng)建商品分類:
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;
將這個(gè)插入到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(列)={表達(dá)式1 | default}
[,col_name2={表達(dá)式2 | default}]..
[where where_condition]
表的參照關(guān)系:
table_reference
{[inner內(nèi) | cross] join | {left|right} [outer] join}
table_reference
on conditional_expr 表的連接條件
連接類型:
inner join,內(nèi)連接
在mysql中,join,cross join和inner join是等價(jià)的。
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
創(chuàng)建數(shù)據(jù)表同時(shí)將查詢結(jié)果寫入到數(shù)據(jù)表
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
-> ('路由器'),('交換機(jī)'),('網(wǎng)卡');
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內(nèi)連接inner join
子查詢與連接:
連接
mysql的select語句,多表更新,多表刪除語句中支持join操作。
語法結(jié)構(gòu);
table_reference
{[inner |cross] join | {left | right} [outer] join}
table_reference
on conditional_expr 連接條件。
數(shù)據(jù)表參照:
table_reference
表名 [[as] alias] | table_subquery [as] alias
數(shù)據(jù)表可以使用:表名 AS 別名 或表名 別名 賦予別名
table_subquery可以作為子查詢使用在from子句中,這樣的子查詢必須為其賦予別名。
連接類型:
inner join, 內(nèi)連接
在mysql中,join,cross join和inner join是等價(jià)的。
left [outer] join,左外連接。
right [outer] join,右外連接。
連接條件:
使用on關(guān)鍵字來設(shè)定連接條件,也可以使用where來代替。
通常使用on關(guān)鍵字來設(shè)定連接條件。
使用where關(guān)鍵字來進(jìn)行結(jié)果集記錄的過濾。
內(nèi)連接
顯示左表和右表符合連接條件的記錄。
例如:
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
數(shù)據(jù)表B的結(jié)果集依賴數(shù)據(jù)表A
數(shù)據(jù)表A的結(jié)果集根據(jù)左連接條件依賴所有數(shù)據(jù)表(B表除外)
左外連接條件決定如何檢索數(shù)據(jù)表B(在沒有指定where條件的情況下)
如果數(shù)據(jù)表A的某條記錄符合where條件,但是在數(shù)據(jù)表B中不存在符合連接條件的記錄,將生成一個(gè)所有列為空的額外的B行。
外連接:
如果使用內(nèi)連接查找的記錄在連接數(shù)據(jù)表中不存在,并且在where子句中嘗試以下操作:col_name is null時(shí),如果col_name被定義為not null, mysql將在找到符合連接條件的記錄后停止搜索更多的行。
mysql無限級(jí)分類表設(shè)計(jì):
無限級(jí)分類數(shù)據(jù)表的設(shè)計(jì)
例如:
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字符函數(shù):
運(yùn)算符和函數(shù)
根據(jù)功能的不同可以劃分為:
1、字符函數(shù)
2、數(shù)值運(yùn)算符與函數(shù)
3、比較運(yùn)算與函數(shù)
4、日期時(shí)間函數(shù)
5、信息函數(shù)
6、聚合函數(shù)
7、加密函數(shù)
字符函數(shù):
函數(shù)名
CONCAT( ) : 字符連接
CONCAT_WS( ) : 使用指定分隔符進(jìn)行字符連接。
FORMAT( ) : 數(shù)字格式化
LOWER( ) : 轉(zhuǎn)換成小寫字母
UPPER( ) : 轉(zhuǎn)換成大寫字母
LEFT( ) : 獲取左側(cè)字符。
RIGHT( ) : 獲取右側(cè)字符。
例如:
mysql> select * from test;
mysql> select concat('yuan','_','MYSQL');
mysql> select * from user;
將兩個(gè)字段合并為一個(gè)字段。
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() : 刪除前導(dǎo)空格。
rtrim() : 刪除后續(xù)空格。
trim() : 刪除前導(dǎo)和后續(xù)空格。
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 數(shù)值運(yùn)算符和函數(shù)
ceil() : 進(jìn)一取整
div : 整數(shù)除法
floor() : 舍一取整
mod : 取余數(shù)(取模)
power() : 冪運(yùn)算。
round() : 四舍五入
truncate() : 數(shù)字截取
例如:
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比較運(yùn)算符和函數(shù)
[not] between...and... : [不] 在范圍之內(nèi)
[not] in() : [不] 在列出值范圍內(nèi)。
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日期時(shí)間函數(shù)
日期時(shí)間函數(shù):
now() : 當(dāng)前日期和時(shí)間
curdate() : 當(dāng)前日期
curtime() : 當(dāng)前時(shí)間
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 信息函數(shù)
connection_id() : 連接ID
database() : 當(dāng)前數(shù)據(jù)庫
last_insert_id() : 最后插入記錄的ID號(hào)。
user() : 當(dāng)前用戶
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 聚合函數(shù):
avg() : 平均值
count() : 計(jì)數(shù)。
max() :最大值。
min() : 最小值。
sum() : 求和。
例如:
mysql> select avg(id) from test;
mysql> select count(id) from test;
mysql 加密函數(shù):
MD5() : 信息摘要算法
PASSWORD() : 密碼算法
例如:
mysql> select md5('admin');
mysql> select PASSWORD('admin');
mysql> set PASSWORD=PASSWORD('root');
mysql自定義函數(shù):
用戶自定義函數(shù)(UDF) 是一種對(duì)mysql擴(kuò)展的途徑,其用法與內(nèi)置函數(shù)相同。
自定義函數(shù)的兩個(gè)必要條件:
(1), 參數(shù)
(2), 返回值。
函數(shù)可以返回任意類型的值,同樣可以接收這些類型的參數(shù)。
創(chuàng)建自定義函數(shù):
create function function_name
returns
{string | integer | real | decimal}
routine_body
關(guān)于函數(shù)體:
(1) 函數(shù)體由合法的SQL語句構(gòu)成。
(2) 函數(shù)體可以是簡單的select或insert語句。
(3) 函數(shù)體如果為復(fù)合結(jié)構(gòu)則使用begin....end語句。
(4) 復(fù)合結(jié)構(gòu)可以包含聲明,循環(huán),控制語句。
設(shè)置客戶端編碼為gbk :
mysql> set names gbk;
mysql> select date_format(now(),'%Y年%m月%d日 %H點(diǎn): %i分: %s秒');
mysql> create function f1()
-> returns varchar(30)
-> return date_format(now(),'%Y年%m月%d日 %H點(diǎn): %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');
-> //
刪除函數(shù):
DROP FUNCTION [IF EXISTS] function_name
mysql存儲(chǔ)過程:
SQL命令----> mysql引擎---》語法分析----》 可執(zhí)行命令---》執(zhí)行結(jié)果----》 客戶端。
存儲(chǔ)過程:
存儲(chǔ)過程是SQL語句和控制語句的預(yù)編譯集合,以一個(gè)名稱存儲(chǔ)并作為一個(gè)單元處理。
存儲(chǔ)過程優(yōu)點(diǎn):
增強(qiáng)了SQL語句的功能和靈活性。
實(shí)現(xiàn)較快的執(zhí)行速度。
減少網(wǎng)絡(luò)流量。
創(chuàng)建存儲(chǔ)過程的語法:
create
[DEFINER={USER | CURRENT_USER}]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
proc_parameter:
[IN | OUT | INOUT ] param_name type
參數(shù):
IN : 表示該參數(shù)的值必須在調(diào)用存儲(chǔ)過程中指定。
OUT : 表示該參數(shù)的值可以被存儲(chǔ)過程改變,并且可以返回。
INOUT : 表示該參數(shù)在調(diào)用時(shí)指定,并且可以被改變和返回。
過程體:
過程體由合法的SQL語句構(gòu)成。
過程體可以是"任意"的SQL語句。
過程體如果為復(fù)合結(jié)構(gòu)則使用BEGIN...END語句。
復(fù)合結(jié)構(gòu)可以包含聲明,循環(huán),控制結(jié)構(gòu)。
例如:
mysql> create procedure sp1() select VERSION();
mysql> CALL sp1;
調(diào)用存儲(chǔ)過程:
CALL sp_name([parameter[,...]])
CALL sp_name[( )]
mysql創(chuàng)建帶有IN類型參數(shù)的存儲(chǔ)過程:
例如:
mysql> delimiter //
mysql>
mysql> create procedure removeTestByid(IN id INT unsigned)
-> BEGIN
-> DELETE FROM test where id=id;
-> END
-> //
修改存儲(chǔ)過程:
alter procedure sp_name
[characteristic ...]
COMMENT 'string'
| {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL
DATA}
| SQL SECURITY {DEFINER | INVOKER}
刪除存儲(chǔ)過程:
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;
看了以上關(guān)于mysql 語法結(jié)構(gòu)講義,希望能給大家在實(shí)際運(yùn)用中帶來一定的幫助。本文由于篇幅有限,難免會(huì)有不足和需要補(bǔ)充的地方,如有需要更加專業(yè)的解答,可在官網(wǎng)聯(lián)系我們的24小時(shí)售前售后,隨時(shí)幫您解答問題的。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。