溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql 語法結(jié)構(gòu)講義

發(fā)布時(shí)間:2020-04-28 11:46:07 來源:億速云 閱讀:327 作者:三月 欄目:MySQL數(shù)據(jù)庫

本文主要給大家介紹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)字符集編碼。

mysql 語法結(jié)構(gòu)講義

創(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í)幫您解答問題的。

 

 




向AI問一下細(xì)節(jié)

免責(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)容。

AI