<output id="r87xx"></output>
    1. 
      
      <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
        •   

               當(dāng)前位置:首頁>軟件介紹>MySQL學(xué)習(xí)分享 查詢:
               
          MySQL學(xué)習(xí)分享

                  進(jìn)入mysql 命令操作行的命令:

                  1、首先在系統(tǒng)環(huán)境變量中寫入mysql安裝目錄中bin文件的路徑;

                  2、打開cmd,寫:mysql -h服務(wù)器地址(本地:localhost) -P端口號(hào)(默認(rèn)3306) -u用戶名(默認(rèn):root) -p密碼

                  1創(chuàng)建數(shù)據(jù)庫

                  create datebase `db_name`[字符選項(xiàng),字符校對(duì)選項(xiàng)];

                  注意:

                  1、數(shù)據(jù)庫名的命名方式(漢字也可以),最好加上反引號(hào)“``”,建議

                  表名也加上。

                  2、所有語句以“;”結(jié)尾,還可以用G來結(jié)尾(簡(jiǎn)單的圖形化界面),

                  兩者的顯示格式不同。

                  3、數(shù)據(jù)庫創(chuàng)建完成后會(huì)生成一個(gè).org文件,里面存儲(chǔ)數(shù)據(jù)庫創(chuàng)建時(shí)的

                  配置內(nèi)容(如:字符類型等)。

                  2查看當(dāng)前存在數(shù)據(jù)庫:

                  show datebases;

                  3查看某個(gè)數(shù)據(jù)庫的創(chuàng)建語句:

                  show create datebase `db_name`;

                  4數(shù)據(jù)庫刪除(慎用,不可逆):

                  drop database `db_name`;

                  5修改數(shù)據(jù)庫信息:

                  Alert database `db_name` character set gbk;(修改字符類型)

                  6更改數(shù)據(jù)庫名:

                  可以直接修改數(shù)據(jù)庫的文件夾的名稱(不通用,不推薦)。

                  還可以將書庫中的內(nèi)容重新導(dǎo)入到新建的數(shù)據(jù)庫中,來實(shí)現(xiàn)改名,然后再刪除原來的數(shù)據(jù)庫(注意:一定要先確定數(shù)據(jù)已經(jīng)完全導(dǎo)入,在刪除舊的數(shù)據(jù)庫)。

                  7數(shù)據(jù)庫用戶名和密碼的修改:

                  1.用root 進(jìn)入mysql后

                  mysql>set password =password('你的密碼');

                  mysql>flush privileges;

                  2.使用GRANT語句

                  mysql>grant all on *.* to 'root'@'localhost' IDENTIFIED BY '你的密碼'with grant option ; mysql>flush privileges;

                  3.進(jìn)入mysql庫修改user表

                  mysql>use mysql;

                  mysql>update user set password=password('你的密碼') where user='root'; mysql>flush privileges;

                  表的相關(guān)操作:

                  1、創(chuàng)建表(創(chuàng)建表一定要指定所屬的數(shù)據(jù)庫,可以用“數(shù)據(jù)庫.表”來指定所屬數(shù)據(jù)庫):

                  Create table `database`.table_name (

                  字段名 數(shù)據(jù)類型(長度) [約束條件],字段名 數(shù)據(jù)類型(長度) [約束條件],........

                  ) character set utf8 engine InnoDB;

                  也可以在操作表之前打開一個(gè)數(shù)據(jù)庫,這樣建立的表就會(huì)默認(rèn)建立在打開的表

                  中,但同樣可以在打開一個(gè)數(shù)據(jù)庫的情況下用上述方法給其他數(shù)據(jù)庫創(chuàng)建表。

                  表的存儲(chǔ)引擎(engine):

                  

                  InnoDB與myisam的區(qū)別:

                  Myisam:一個(gè)表三個(gè)文件,table_name.frm 結(jié)構(gòu)文件 ,table_name.myd 數(shù)據(jù)文件,table_name.myi索引文件。

                  InnoDB:一個(gè)表一個(gè)文件,table_name.frm,所有的innodb文件都使用相同的數(shù)據(jù)存儲(chǔ)空間來存儲(chǔ)數(shù)據(jù)和索引打開數(shù)據(jù)庫的命令:

                  Use `db_name`;

                  2、查看數(shù)據(jù)表:

                  查看某個(gè)數(shù)據(jù)庫中現(xiàn)有的表:

                  Use db_name;

                  Show tables ;

                  要查詢某一個(gè)表:

                  Show tables like ‘%(部分表名)%’; (%是通配符,); Like同樣適用于查找數(shù)據(jù)庫。

                  查看數(shù)據(jù)表的創(chuàng)建命令:

                  Show craete table `table_name`;

                  3、查看表結(jié)構(gòu):

                  Describe table_name;或者簡(jiǎn)寫:desc table_name;

                  4、刪除表:

                  Drop table `table_name`;

                  如果表存在則刪除(if 語句判斷):

                  Drop table if exists `table_name`;

                  5、修改表

                  修改表名:

                  Rename table `table_name` to `new_name `;

                  此語句支持多個(gè)表名同時(shí)修改(用逗號(hào)隔開):

                  Rename table `table_name1` to `new_name`,`table_name2` to `new_name2`,........;

                  支持夸數(shù)據(jù)庫重命名操作:

                  Rename table `table_name` to `db_name`.`new_name`; (這樣可以將表從一個(gè)數(shù)據(jù)庫中移動(dòng)到另一個(gè)數(shù)據(jù)庫中,并將表名修改。能實(shí)現(xiàn)表的移動(dòng),或?qū)⒁粋€(gè)數(shù)據(jù)庫中的表全部表移動(dòng)到新建的數(shù)據(jù)庫中,實(shí)現(xiàn)數(shù)據(jù)庫的重命名)。 表中字段的(增、刪、改):

                  這一上級(jí)命令之后進(jìn)行操作。 都在:alert table `table_name`

                  增:

                  Alert table `table_name` add 字段名 數(shù)據(jù)類型;

                  刪:

                  Alert table `table_name` drop 字段名;

                  改:

                  Alert table `table_name` modify 字段名 int(40);

                  字段重命名:

                  Alert table `table_name` change 字段名 新字段名 數(shù)據(jù)類型; 修改表選項(xiàng):

                  Alert table `table_name` 新的選項(xiàng);

                  數(shù)據(jù)操作:

                  數(shù)據(jù)的增、刪、改、查:

                  插入數(shù)據(jù):

                  Insert into `table_name` (字段名,字段名.......) values (對(duì)應(yīng)值,對(duì)應(yīng)值.......);

                  注:可以 或

                  Insert into ‘table_name’ set 字段名=’值’,字段名=‘值’??

                  可以單獨(dú)插入某個(gè)字段,則沒有插入數(shù)據(jù)的字段為空(NULL)。

                  如果插入時(shí)數(shù)據(jù)主鍵或唯一索引發(fā)生沖突時(shí),進(jìn)行強(qiáng)制插入(即更新):

                  Insert into ‘table_n’ (key,field_1,field_2) values (value_1,value_2,value_3) on duplicate key update field_1=value_2,field_2=value_3;

                  使用select 查詢語句的結(jié)果作為數(shù)據(jù)源來進(jìn)行插入(要求字段數(shù)量和類型一致):

                  Insert into `table_name` (field_1,field_2) select field_1,field_2 from `table_name` ; 獲得數(shù)據(jù)(查詢數(shù)據(jù)):

                  Select 字段列表 from `表名` [查詢條件];

                  如果不希望獲得重復(fù)的數(shù)據(jù)信息(所有字段都重復(fù)而不是部分字段重復(fù))可用distinct: Select distinct 字段表 from `表名` [查詢條件];

                  注:“*”可以用來表示所有的字段,查詢條件如果默認(rèn)不寫或者用 where 1 來表示,則將查詢出所有的數(shù)據(jù)。

                  數(shù)據(jù)排序:

                  Order by 字段1,字段2,?? asc(從小到大)|desc(從大到小) Limit用法:用于限制查找的記錄的數(shù)量和位置。

                  格式:limit offset ,rowcount; offset :偏移量(開始的位置),rowcount:要取得條數(shù); 當(dāng)limit后只有一個(gè)參數(shù)時(shí),表示條數(shù)。

                  刪除數(shù)據(jù):

                  Delete from `表名` 條件;(在刪除操作中,條件顯得尤為重要,一定要在邏輯上是嚴(yán)格控制條件。)

                  修改數(shù)據(jù):

                  Update 表名 set 字段名=值 [條件]; (條件同樣很重要)

                  查看mysql 中所有的變量:

                  Show variables;

                  查看字符集有關(guān)變量:

                  Show variables like ‘character_set%’;

                  校對(duì)規(guī)則:是指當(dāng)前字符集中,字符之間進(jìn)行比較與排序的規(guī)則(在設(shè)置字符集的時(shí)候可以更改當(dāng)前字符集的校對(duì)規(guī)則,如果不設(shè)置,每種字符集都有其默認(rèn)的校對(duì)規(guī)則)。

                  區(qū)_校對(duì)規(guī)則 格式: 字符集_地

                  Cs :表示區(qū)分大小寫;ci: 表示不區(qū)分大小寫;bin: 以二進(jìn)制形式進(jìn)行比較;

                  顯示所有校對(duì)規(guī)則的命令:show collation;

                  數(shù)據(jù)類型:(整型,小數(shù)型,日期時(shí)間型)

                  整型:

                  

                  例:

                  Create table `name` (

                  Name int(4) unsigned

                  )

                  表示name字段為int型,最小顯示位數(shù)為4位,如果不夠用前導(dǎo)零來補(bǔ)齊,沒有正負(fù)數(shù),默認(rèn)是有的。

                  小數(shù)型:

                  

                  浮點(diǎn)數(shù):

                  小數(shù)型在數(shù)據(jù)庫中的存儲(chǔ)方式:

                  分為精度和范圍兩個(gè)部分,例如:123456.23452453的存儲(chǔ)方式為一部分空間來

                  存儲(chǔ)精度(0.12345623452453),另一部分空間來存儲(chǔ)范圍*10^8,但只存儲(chǔ)指數(shù)8,所以每個(gè)小數(shù)都是經(jīng)過計(jì)算取出來的,也因此會(huì)出現(xiàn)精度丟失的問題。

                  Float(單精度):默認(rèn)精度范圍6位左右

                  Double(雙精度):默認(rèn)精度范圍16位左右

                  小數(shù)型更通用的定義方式:

                  Float/double (m,n) m:表示總的數(shù)值位數(shù)(不包括小數(shù)點(diǎn)和正負(fù)號(hào));n:表示小數(shù)點(diǎn)后最大的數(shù)值位數(shù)。如果所插入的數(shù)的范圍超過了規(guī)定范圍,數(shù)據(jù)無法插入。

                  支持科學(xué)記數(shù)法:123.456 表示為: 0.123456E3

                  定點(diǎn)數(shù):

                  以九位數(shù)為四個(gè)字節(jié)進(jìn)行存儲(chǔ),將數(shù)值原樣存儲(chǔ),防止精度丟失。

                  同樣支持顯示位數(shù)的規(guī)定 decimal(m,n) m:數(shù)值總長默認(rèn)是10,n:小數(shù)部分長度默認(rèn)是0;但當(dāng)存入的數(shù)的長度超過規(guī)定時(shí)會(huì)進(jìn)行四舍五入存儲(chǔ)。

                  時(shí)間日期型:

                  

                  Datetime (年月日時(shí)分秒) date (年月日) timestamp(時(shí)間戳)

                  例:

                  Create table `time1` (

                  a datetime,

                  b timestamp

                  );

                  Insert into `time1` values (‘2015-01-24 10:44:14’,’2015-01-26’);

                  Mysql支持任何符號(hào)的分隔符,沒有分割符同樣可以識(shí)別。Timestamp類型的在檢索時(shí)可以在其字段后加“+0”,則顯示為時(shí)間戳形式的。

                  當(dāng)插入的時(shí)間年份為后兩位時(shí)則按70-69的輪回進(jìn)行19與20世紀(jì)的區(qū)分(當(dāng)后兩位為0-69時(shí),世紀(jì)為20,當(dāng)后兩位為70-99時(shí),世紀(jì)為19)。

                  當(dāng)插入的數(shù)據(jù)為Insert into `time1` values (0,0);時(shí),mysql自動(dòng)將時(shí)間存成0000-00-00

                  00:00:00時(shí)間。

                  Time 類型不僅可以表示時(shí)間點(diǎn),還可以表示時(shí)間段(過去和現(xiàn)在都可以)格式:d tt:mm:ss d:表示天數(shù),但提取數(shù)據(jù)時(shí)則是將天全部換為時(shí)分秒來表示,天數(shù)范圍是正負(fù)34.9天。

                  例:create table `t_1` (

                  Ago time

                  );

                  Insert into `t_1` values (‘20 03:24:45’);

                  顯示結(jié)果:

                  

                  Year:存儲(chǔ)空間為一個(gè)字節(jié),只能表示255個(gè)年份:范圍是從1901-2055年;

                  字符串類型:

                  

                  Char(m)固定長度 m:表示嚴(yán)格的固定長度的字符數(shù)而不是字節(jié)數(shù)

                  Varchar(m)可變長度 m:表示允許的最大字符長度字符數(shù)而不是字節(jié)數(shù)

                  注:但總的字符的字節(jié)長度不能超過每種類型的最大長度,varchar 還要有1到2個(gè)字節(jié)來存儲(chǔ)字節(jié)長度,當(dāng)長度大于255時(shí)則需要用兩個(gè)字節(jié)來存儲(chǔ)長度,還需要一個(gè)字節(jié)來存儲(chǔ)當(dāng)前紀(jì)錄中所有字段的unll類型的個(gè)數(shù),因此實(shí)際的最大存儲(chǔ)長度為65533到65532。

                  Null該類型在記錄中進(jìn)行統(tǒng)一管理,而不是每個(gè)字段都有各自管理空間。

                  Enum :枚舉類型(單選):可以用來記錄性別等,單選類記錄。

                  例:create table `enum1` (

                  Sex enum (‘famale’,’male’)

                  )

                  Insert into `enum1` values (‘famale’); 演示結(jié)果:

                  

                  Set :(多選類型內(nèi)存中以二進(jìn)制形式進(jìn)行存儲(chǔ)) 例:create table set1 (

                  Hobby set(‘basketball’,’baseball’,’football’) )

                  Insert into set1 values (‘basketball’,’football’);

                  演示結(jié)果:

                  

                  字段類型選擇的一些原則:

                  1、盡量精確。

                  2、考慮應(yīng)用語言處理。

                  3、考慮兼容性。

                  字段屬性:

                  是否為空(NULLNOT NULL):是否允許值為空,默認(rèn)可以為空。

                  Default(默認(rèn)值):黨委有輸入數(shù)據(jù)時(shí)該字段的默認(rèn)值,默認(rèn)值必須是固定值。

                  主鍵(primary key):可以用來唯一標(biāo)識(shí)某條記錄的字段或字段的集合,就是主鍵。

                  主鍵可以是具體的(字段)實(shí)體屬性,但最好的解決方案是:用一個(gè)與實(shí)體不相關(guān)的屬性來作為唯一的標(biāo)識(shí)。

                  主鍵不能為空,不能為NULL不能重復(fù)。

                  通常每個(gè)表都應(yīng)該有一主鍵,并最好用與實(shí)體沒有聯(lián)系的可以唯一標(biāo)識(shí)每個(gè)記錄的字段來實(shí)現(xiàn)。

                  定義方法:

                  方法一:

                  例:create table key1(

                  Id tinyint primary key,

                  Name varchar

                  )

                  方法二:

                  該方法可以定義組合主鍵(一個(gè)主鍵里有多個(gè)值,而不是每個(gè)值都是主鍵)。

                  例:create table key2(

                  Id tinyint ,

                  Name varchar,

                  Class varchar,

                  Primary key (name,class)

                  )

                  自動(dòng)增長(auto_increment):

                  通常用于主鍵的自動(dòng)增長,來確保主鍵不重復(fù)。

                  要求:該字段必須是整型,要有索引(系統(tǒng)會(huì)認(rèn)為主鍵也是一個(gè)索引)。

                  在插入時(shí),該字段可以插入NULL,也可以不插入。

                  例:

                  create table key2(

                  Id tinyint auto_increment ,

                  Name varchar,

                  Class varchar,

                  Primary key (name,class)

                  )

                  自動(dòng)增長的初始值是可以設(shè)置的:

                  例:

                  Alter table key2 auto_increment 10;設(shè)置初始值為10。 如果初始值小于已經(jīng)存在的值,則按照記錄中最大的值加一。 該字段的值依舊可以更新,但如果是主鍵,則不能有重復(fù)。

                  表之間的關(guān)聯(lián):

                  一對(duì)一關(guān)系:

                  兩個(gè)表之間的主鍵存在一一對(duì)應(yīng)關(guān)系。

                  設(shè)計(jì):講一個(gè)很多字段的表進(jìn)行垂直分割,通常是將常用信息與不常用信息進(jìn)行分割,然后設(shè)置主鍵一一對(duì)應(yīng)。

                  一對(duì)多關(guān)系:

                  一個(gè)實(shí)體對(duì)應(yīng)多個(gè)其他實(shí)體,例如:一個(gè)班級(jí)對(duì)應(yīng)多個(gè)學(xué)生。

                  4 設(shè)計(jì):再多的那端增加一個(gè)字段,用于指向該實(shí)體所屬的少的實(shí)體。 多對(duì)多關(guān)系: 多個(gè)實(shí)體對(duì)應(yīng)多個(gè)實(shí)體。

                  設(shè)計(jì):利用一個(gè)中間表,表示實(shí)體之間的對(duì)應(yīng)關(guān)系。

                  中間表的一個(gè)記錄表示一個(gè)關(guān)系。

                  多對(duì)多就是由兩個(gè)一對(duì)多來實(shí)現(xiàn)的。

                  例:

                  講師主鍵 講師 班級(jí)主鍵 班級(jí)號(hào)

                  a 王 01 Php01

                  b 李 02 Php02

                  班級(jí)主鍵 講師主鍵

                  01 a

                  02 a

                  02 b

                  外鍵:

                  如果A實(shí)體的某個(gè)字段指向B實(shí)體的主鍵,那么就稱A實(shí)體的這個(gè)字段為B實(shí)體的外鍵。

                  被指向的實(shí)體成為主實(shí)體(主表),也叫父實(shí)體(父表)。負(fù)責(zé)指向的實(shí)體稱為從實(shí)體(從表),也叫子實(shí)體(子表)。

                  作用:

                  用于約束處于關(guān)系中的實(shí)體,當(dāng)增加子表的記錄時(shí)是否有與之對(duì)應(yīng)的父表記錄,在刪除或者更新主表記錄時(shí),子表中的記錄信息應(yīng)該如何改變。

                  外鍵的刪除與修改:

                  刪除:

                  Alter table table_name drop foreign key foreign key_name;

                  Foreign key_name:

                  

                  刪除后再添加:

                  Alter table table_name add foreign key (字段) 主表(字段);

                  設(shè)置級(jí)聯(lián)操作:

                  在主表數(shù)據(jù)發(fā)生變化時(shí)從表的數(shù)據(jù)應(yīng)該如何改變。

                  主表更新:使用字段 on update

                  主表刪除:使用字段 on delete

                  允許的級(jí)聯(lián)動(dòng)作:

                  Cascade :關(guān)聯(lián)操作,如果主表發(fā)生該表,從表也會(huì)執(zhí)行相應(yīng)的操作。

                  Set null: 設(shè)置外鍵為null ,表示從表不指向主表的任何字段。

                  Restrict:拒絕主表的相關(guān)操作。

                  連和查詢(union):

                  將多條select語句合并到一起的操作,并將查詢結(jié)果一起顯示。

                  用法:(select 語句?)union(select 語句?)union(select 語句?);

                  子句結(jié)果的排序:

                  1、子句必須包含在()內(nèi),

                  2、子句的order by 必須在配合limit 的情況下才能生效,原因是union在做子句時(shí)會(huì)對(duì)沒有Limit的子句進(jìn)行優(yōu)化(忽略)。

                  3、多個(gè)select 語句檢索到的字段數(shù)必須是一致的,結(jié)果的字段名稱由第一個(gè)

                  select語句中的字段決定。

                  4、在最后的括號(hào)外加order by 對(duì)所有記錄進(jìn)行整體的排序。

                  5、對(duì)應(yīng)字段的數(shù)據(jù)類型必須相同(如果不同,mysql內(nèi)部會(huì)做類型轉(zhuǎn)換處理)。

                  一般應(yīng)用場(chǎng)景:

                  獲得數(shù)據(jù)的邏輯條件出現(xiàn)沖突,或者很難在一個(gè)邏輯內(nèi)表示,就可以拆分成兩個(gè)邏輯條件,分別查找,然后再將結(jié)果進(jìn)行合并。

                  子查詢(查詢語句的嵌套):

                  Select xxx from xxx where in ( select xxx from xxx where);

                  分類:返回值不同(單一值,一列,多列,表);出現(xiàn)位置:where 后;from 后;exists型。

                  常用操作運(yùn)算符: =,>,<,>=,<=,in,not in,some(集合或列)any(集合或列),=any(集合或列),all(集合或列),!=all(集合或列)。

                  !=any(集合):不等于子集合中的某些即可,也就是說得到的結(jié)果,可以有與子查詢結(jié)果一樣的元素,但一定要有不一樣的。

                  !=all(集合):不等于子集合中的所欲元素,不能有相同的元素存在。

                  Some與any的用法一樣。

                  行子查詢:

                  Select 字段,字段,字段 from 表 where (字段,字段)=(select 字段,字段,字段 from 表 where 字段=值 字段=值 limit 1);

                  此格式用于將一行數(shù)據(jù)作為子查詢語句,或查詢條件來查詢。通過創(chuàng)建行,并將子查詢的結(jié)果作為行的值為查詢條件。

                  表子查詢:

                  Select from (select 字段 ,字段,字段 from 表 where 條件) as 自定義表名 where 條件;

                  此句中,子句的查詢結(jié)果是一個(gè)表,所以放在from子句中,并且還應(yīng)給以其再定義一個(gè)表名(用as語句)。

                  Exits子查詢:

                  Select 字段,字段 from 表1 where exits (select 字段 from 表2 where 條件);

                  Exits后的子查詢?yōu)檎鎰t返回查詢結(jié)果,為假則不反回。

                  Exits 查詢方法可以用其他的方法代替,比如in 只是思維邏輯不同。

                  鏈接查詢:

                  當(dāng)一個(gè)業(yè)務(wù)需要多個(gè)表,多個(gè)表需要一起使用,需要將多個(gè)表連接起來。

                  思路:將多個(gè)表通過某種關(guān)系連接起來,再進(jìn)行篩選。

                  鏈接分類:內(nèi)鏈接,外鏈接,自然鏈接。

                  內(nèi)鏈接: 數(shù)據(jù)內(nèi)部的鏈接,要求,要鏈接的數(shù)據(jù)必須全部存在才能實(shí)現(xiàn)鏈接。

                  語法:select 字段 from left_table inner join right_table on 鏈接信息;

                  例:select 字段 from t_table inner join c_table on t_id=c_id;

                  拓展語法:select 字段 from left_table inner join right_table on 鏈接信息 where 條件;(標(biāo)準(zhǔn)寫法)

                  select 字段 from Left_table inner join right_table where 連接信息 and 條件;(過濾式寫法)

                  select 字段 from Left_table inner join right_table where 連接信息 and 條件;

                  條件分類:

                  Where :數(shù)據(jù)過濾,先進(jìn)行數(shù)據(jù)的交叉連接,然后根據(jù)條件進(jìn)行過濾。

                  On:在鏈接是直接對(duì)數(shù)據(jù)進(jìn)行判斷。

                  Using:要求負(fù)責(zé)鏈接的連個(gè)字段的名稱必須一致。

                  例:select 字段 from left_table inner join right_table using (兩表相同的字段);

                  鏈接處理:內(nèi)鏈接在連接時(shí)可以省略鏈接條件,這意味著,所有左表的數(shù)據(jù)都要與右表的數(shù)據(jù)做一個(gè)鏈接,因此存在M*N個(gè)鏈接記錄,這種連接稱之為交叉連接,或者笛卡兒積鏈接。此時(shí)可以用cross join代替inner join。在mysql中inner join鏈接是默認(rèn)的鏈接,因此可以省略inner join 。

                  表的別名:用as來實(shí)現(xiàn),database.table.字段 as xx; 這樣可以使代碼更加的簡(jiǎn)潔友好,簡(jiǎn)化SQL語句。

                  外鏈接(分為:左鏈接,右鏈接):與內(nèi)鏈接相似,但不必所有數(shù)據(jù)都存在,將不存在對(duì)應(yīng)信息的字段用NULL 表示。

                  語法:left_table left out join right_table on 鏈接信息(必須有);

                  外鏈接的條件不支持where 可以使用using和on。

                  Using :得到的結(jié)果中using中的字段只保留主表的。

                  左鏈接:在連接時(shí)如果出現(xiàn)左邊表數(shù)據(jù)連接不到右邊表的數(shù)據(jù),則保留左邊表的數(shù)據(jù),右邊表數(shù)據(jù)用NULL代替,如果右邊表的數(shù)據(jù)連接不到左邊表的數(shù)據(jù),則右邊表數(shù)據(jù)被丟棄。

                  union來模擬: 全外鏈接:mysql不支持全外鏈接,但是可以用

                  (select * from left_table left join right_table on xxx=xxx)union (select * from left_table right join right_table on xxx=xxx)

                  注:內(nèi)鏈接不寫條件就是交叉連接,外鏈接不寫條件則語法錯(cuò)誤。

                  自然鏈接:

                  Mysql 通過自己的判斷進(jìn)行連接,不需要寫任何的鏈接條件,mysql會(huì)根據(jù)多表中的相同字段進(jìn)行連接。

                  自然鏈接分為內(nèi)鏈接和外鏈接。

                  內(nèi)鏈接:nature join

                  外鏈接:左外鏈接:nature left join ;右外鏈接nature right join

                  自然鏈接其結(jié)果相當(dāng)于:條件用using 查詢的inner join 和 left/right join;

                  多表鏈接:

                  例:Select s.* ,sd.* from class left as c left join student as s on c.id=s.c_id left join student_detail

                  as sd on s.id =sd.s_id where c.c_name=’計(jì)1323’;

                  數(shù)據(jù)的備份與導(dǎo)出:

                  語法:select xxx into outfile ‘d:/file1/file2/file_name’ from xxx where 條件;

                  注:存儲(chǔ)的路徑一定要存在,文件名自定義,可以自動(dòng)創(chuàng)建新的文件,但是不能覆蓋或重寫已存在的文件。

                  生成的文件格式:為了滿足某種需求,mysql支持多種類型的字段數(shù)據(jù)分割方式,并可字段被什么包裹 字段以什么結(jié)束 以自行設(shè)置。

                  語法(默認(rèn)):select * into outfile ‘e:ddd’ fields terminated by ‘ ’ enclosed by ‘’ line terminated by ‘ ’ starting by ‘’ from teacher;

                  還可以用dumpfile來代替outfile 將數(shù)據(jù)進(jìn)行原樣輸出,沒有任何格式和分隔符,適用行以什么開行以什始 于二進(jìn)制數(shù)據(jù)的導(dǎo)出。 么結(jié)束

                  Default默認(rèn)值的使用:

                  在創(chuàng)建表時(shí),設(shè)置好默認(rèn)值,插入字段時(shí),要使用默認(rèn)值的字段值可以是 null 或者 default或default(該字段),不能為空;

                  Replace :主鍵或唯一索引沖突則更新,否則插入。

                  語法:replace into `table_name` (field_1,field_2) values (value_1,value_2);

                  功能與Insert into ‘table_n’ (key,field_1,field_2) values (value_1,value_2,value_3) on duplicate key update field_1=value_2,field_2=value_3;相同。

                  一個(gè)表中只能有一個(gè)主鍵,所以想要更換主鍵是必須先刪除掉原來的主鍵(alter table `table_name` drop primary key) 然后再從新進(jìn)行添加主鍵,和自動(dòng)增長。

                  表的導(dǎo)入:

                  Load data infile ‘file路徑’ into table `table_name`; 用來導(dǎo)入用select * into outfile ‘路徑’ from `table_name` 條件;導(dǎo)出的數(shù)據(jù),兩者之間數(shù)據(jù)的分割符命令一樣。

                  導(dǎo)入時(shí)要注意主鍵之間的沖突,所以一般在導(dǎo)出時(shí)將主鍵導(dǎo)出為null,然后利用自動(dòng)增長,自動(dòng)建立新的主鍵。

                  Delete 語法細(xì)節(jié)補(bǔ)充:

                  Delete from table_name 條件;

                  條件中通常用order by xxx limit xx where xxxx;來作為約束條件。

                  Delete 還支持多表之間的鏈接刪除:

                  Delete from one ,two using one join two on one_id=two_id where one_id=2;

                  鏈接條件 要?jiǎng)h除的表 那種鏈接方式 約束條件

                  這種鏈接刪除方法,代替了使用外鍵關(guān)聯(lián)進(jìn)行的刪除操作,也就脫離的引擎的限制。

                  Truncate:清空表。與delete from table_name功能類似,但是delete是將表中的數(shù)據(jù)逐一刪除,保留了所有數(shù)據(jù)的記錄數(shù),插入新數(shù)據(jù)時(shí)主鍵進(jìn)行累加。而truncate是先將表刪除后再新建表,不會(huì)保留記錄數(shù),插入數(shù)據(jù)是主鍵從心開始計(jì)數(shù)。

                  Update :更新操作細(xì)節(jié)(支持order by x limit x where 作為條件,支持多表鏈接更新): 語法:update one join two on one_id=two_id set one_name=’xx’ ,two_name=’yy’ where one_id=3;(其中的語法與上圖delete中的相同)。

                  表的備份還原:

                  方案一:(適用于mysiam引擎的表)

                  直接將存儲(chǔ)表結(jié)構(gòu),數(shù)據(jù)和配置信息的三個(gè)文件進(jìn)行備份,需要時(shí)直接將這三個(gè)文件進(jìn)行復(fù)制即可。

                  方案二:(通用方案)

                  將創(chuàng)建表和數(shù)據(jù)庫的所有sql語句進(jìn)行保留備份,在需要時(shí)直接執(zhí)行一次即可。

                  利用mysql提供的工具mysqldump.exe完成,不屬于sql語句,可獨(dú)立執(zhí)行的文件,存在于mysql的bin目錄下,若已經(jīng)寫入環(huán)境變量,可以直接在cmd中執(zhí)行,若沒有,則要進(jìn)入mysql的bin目錄下再執(zhí)行。

                  語法:mysqldump -uroot -p database_name > e:xxx/xxx/xxx.sql;

                  鏈接數(shù)據(jù)庫 保存數(shù)據(jù)的文件

                  還原:用source指定存放sql語句的文件,一次性將文件中所有的sql語句執(zhí)行完畢。

                  語法:source e:/xxx/xxx/xxx.sql;

                  可以備份數(shù)據(jù)庫中的某幾個(gè)表:mysqldump -uroot -p db_name table_1 table_2 >e:/xxx/xxx/xx.sql

                  視圖:

                  功能:為真實(shí)的表建立一個(gè)虛擬的表,來隱藏某些關(guān)鍵的字段,不被客戶端看見或者操作。

                  創(chuàng)建視圖:create view v_name as select field_1,field_2 from table_name ;

                  視圖本身沒有數(shù)據(jù)和結(jié)構(gòu),對(duì)視圖進(jìn)行操作被隱藏的字段不能被操作。

                  刪除視圖:drop view v_name;(不會(huì)影響到真實(shí)表中的數(shù)據(jù))

                  修改視圖:alter view v_name as select field_1,field_2,field_3 from table_name;

                  對(duì)視圖中顯示的字段進(jìn)行虛擬:

                  Create view v_name (v_field_1,field_2) as select field_1,field_2 from table_name;

                  虛擬字段

                  視圖可以將多個(gè)關(guān)聯(lián)表中的字段集中顯示在一個(gè)視圖中,所以,通過建立視圖來縮減多表之間的鏈接查詢的業(yè)務(wù)量,直接調(diào)用視圖即可進(jìn)行查詢,是視圖的又一強(qiáng)大功能。 如果做外部應(yīng)用,一個(gè)數(shù)據(jù)庫對(duì)應(yīng)多個(gè)業(yè)務(wù),則應(yīng)針對(duì)每個(gè)業(yè)務(wù)建立一個(gè)對(duì)應(yīng)的視圖。

                  事務(wù):

                  一組sql語句操作單元,組內(nèi)所有語句共同完成一個(gè)業(yè)務(wù)。如果整組成功,意味著整個(gè)業(yè)務(wù)成功。如果其中的一條語句失敗,意味著整個(gè)業(yè)務(wù)失敗,其余的正確操作沒有任何意義,應(yīng)該回到數(shù)據(jù)庫操作前的狀態(tài)。

                  功能:失敗后可以回到初始位置。在沒有全部執(zhí)行成功之前,別的用戶(進(jìn)程、會(huì)話)看不到未完成業(yè)務(wù)的中間結(jié)果。

                  思路:在一組操作之間設(shè)置一個(gè)記錄點(diǎn),備份點(diǎn)。

                  實(shí)現(xiàn):利用innodb或BDB引擎的事務(wù)日志功能。

                  分析:sql語句的執(zhí)行分為兩個(gè)階段;1、sql語句執(zhí)行階段;2、sql語句執(zhí)行的結(jié)果的提交階段。

                  事務(wù)功能就是對(duì)第一階段的執(zhí)行結(jié)果進(jìn)行存儲(chǔ),暫時(shí)不進(jìn)行上傳到數(shù)據(jù)庫。

                  語法:通過系統(tǒng)變量autocommit進(jìn)行配置。

                  默認(rèn)autocommit=1自動(dòng)進(jìn)行上傳數(shù)據(jù)庫。

                  Autocommit=0不會(huì)自動(dòng)上傳sql語句執(zhí)行結(jié)果。

                  在執(zhí)行事務(wù)期間所有的結(jié)果造成的影響,只能在當(dāng)前回話中看到。當(dāng)判斷所有的事物的語句全部執(zhí)行成功就可以選擇提交,若沒有,則滾回到初始狀態(tài)。

                  語法:提交:commit 滾回:rollback

                  最常用的事務(wù)命令:start transaction 該命令不論事務(wù)是否成功或者失敗,在完成后會(huì)自動(dòng)回到start前的狀態(tài)。

                  事務(wù)功能的特點(diǎn):原子性、隔離性、一致性、封閉性;當(dāng)一個(gè)事務(wù)正在操作時(shí),其他客戶端無法操作數(shù)據(jù)庫。

                  觸發(fā)器:

                  對(duì)數(shù)據(jù)監(jiān)聽進(jìn)行操作;在當(dāng)前表的每行記錄上設(shè)置監(jiān)聽器,監(jiān)聽相關(guān)事件的發(fā)生,當(dāng)事件發(fā)生時(shí),就執(zhí)行一段sql代碼段。

                  創(chuàng)建觸發(fā)器:create trigger 名字 事件 執(zhí)行性代碼

                  事件:插入(insert )、刪除(delete)、更新(update)

                  事件的發(fā)生時(shí)機(jī):前(before)、后(after)

                  所以共有六種事件:before insert 、before delete、before update、after insert、after delete、after update

                  例:create trigger mn after update mmm for each row update nnn set aaa=aaa+100;

                  觸發(fā)器觸發(fā)時(shí)可執(zhí)行代碼 觸發(fā)事件 名稱 機(jī)在觸發(fā)器內(nèi)獲得觸發(fā)該觸發(fā)器時(shí)的相關(guān)數(shù)據(jù):

                  利用觸發(fā)程序內(nèi)的old 和new關(guān)鍵字來記錄觸發(fā)前后的數(shù)據(jù)狀態(tài)。 Old:監(jiān)聽所在表上的數(shù)據(jù)在事件發(fā)生之前的狀態(tài)。

                  New:監(jiān)聽所在表上的數(shù)據(jù)在事件發(fā)生之后的狀態(tài)。

                  Old、new相當(dāng)于一個(gè)記錄號(hào)

                  例:create trigger mn after update on mmm for each row update nnn set

                  aaa=aaa+(old.gg-new.gg);

                  Insert 觸發(fā)器不能使用 old

                  Delete觸發(fā)器不能使用new

                  當(dāng)可執(zhí)行代碼為多條語句時(shí):

                  1、使用begin end為容器進(jìn)行包裹

                  2、每條語句使用‘;’作為結(jié)束標(biāo)志。

                  3、由于2的原因,還要對(duì)默認(rèn)的語句結(jié)束標(biāo)志進(jìn)行修改:

                  Delimiter 符號(hào) 修改默認(rèn)的語句結(jié)束符,在整個(gè)觸發(fā)器創(chuàng)建語句執(zhí)行完成后,用此符號(hào)結(jié)束,并改回原來的語句結(jié)束符號(hào)。

                  例:drop trigger mn;

                  delimiter $

                  create trigger mn after insert on mmm for each row

                  begin update nnn set `add`=`add`+ 200;

                  update nnn set del=del-200;

                  end$

                  delimiter ;

                  注意:1、觸發(fā)器不能同名2、mysql當(dāng)前只支持一個(gè)事件構(gòu)建一個(gè)觸發(fā)器。 觸發(fā)器刪除:drop trigger trigger_name;

                  查看觸發(fā)器:show create trigger trigger_name;

                  PHP與mysql:

                  

                  PHP與mysql的鏈接語法:

                  Mysql_connect(‘地址+端口’,’用戶名’,’密碼’) 設(shè)置編碼:mysql_query(‘set name gbk’);

                  

                  Mysql_fetch_assoc():返回關(guān)聯(lián)數(shù)組,數(shù)組的下表為字符串。 Mysql_fetch_row():返回索引數(shù)組,數(shù)組的下表為數(shù)字,表示所在位置。 Mysql_fetch_array():返回混合數(shù)組,既有索引數(shù)組也有關(guān)聯(lián)數(shù)組。 關(guān)閉數(shù)據(jù)庫:mysql_close();

                  

                  常用函數(shù):

                  錯(cuò)誤處理函數(shù):php在利用其拓展功能執(zhí)行sql語句時(shí),一旦sql語句發(fā)生語法錯(cuò)誤,不會(huì)有錯(cuò)誤提示,稱之為靜默模式的處理機(jī)制。

                  提示錯(cuò)誤信息函數(shù):

                  mysql_error() :錯(cuò)誤信息

                  Mysql_errno() :錯(cuò)誤編碼

                  例:if (!mysql_query($query)){

                  Exit(mysql_erron().’:’.mysql_error)

                  }經(jīng)常將此語句封裝到一個(gè)方法中在每次執(zhí)行完sql語句時(shí)候都來調(diào)用此方法。

                  獲得結(jié)果集內(nèi)數(shù)據(jù)的數(shù)量:mysql_num_rows(結(jié)果集);適用于查找之后結(jié)果集的數(shù)量查詢 操作后受影響的行數(shù):mysql_affected_rows();適用于增、刪、改之后受影響的行數(shù)查詢獲得最新的自動(dòng)增長的字段的值(通常每個(gè)表都會(huì)有一個(gè)自動(dòng)增長的主鍵id,但其自動(dòng)增長的值是數(shù)據(jù)庫自行生成,有事需要知道最新的主鍵值來進(jìn)行數(shù)據(jù)的插入): Mysql_insert_id(): 不論表中自動(dòng)增長的字段是什么,都會(huì)自動(dòng)識(shí)別自動(dòng)增長的字段,很常用。

                  資源使用完畢后釋放資源:myslq_free_result(結(jié)果集); 釋放資源要有選擇性的釋放。

                  SQL編程:

                  注釋:行注釋:-- 或者 #

                  塊注釋:/* */

                  語句結(jié)束符:命令行(3種):“;”,“g”,“G” “;”和“g”是原樣輸出?!癎”簡(jiǎn)單的格式化輸出。

                  變量:

                  1、系統(tǒng)變量:可以直接調(diào)用,show variables;顯示所有系統(tǒng)變量。

                  2、用戶自定義變量:

                  定義方法:set @變量名=值 注意:為了區(qū)分系統(tǒng)變量和用戶自定義變量,在定義時(shí)需要在變量名前加@符號(hào)。

                  用select @a;可以看出@a的值

                  多變量同時(shí)賦值:select 10,20,30 into @a,@b,@c; 查看變量:select @a,@b,@c; 也可以將表中的記錄注入到變量中:

                  Select aaa from t_name into @a where id=3; 注意:要注入的值只能是一個(gè)值,否則賦值失敗。

                  Select @who=’馬寧’ 次語句不是賦值語句,而是用來判斷變量@who中的值是否與‘馬寧相等’。若賦值,應(yīng)該用‘:=’來賦值,select @who:=’馬寧’。

                  Set 是專門的賦值語句,既可以set @who=’馬寧’也可以set @who:=’馬寧’ 復(fù)合語句:set @aa=(select count(*) from t_name);

                  自定義變量:作用域:全局,但存在局部作用域變量(在函數(shù)內(nèi)定義的變量)。

                  有效期:回話結(jié)束,即鏈接斷開之后,變量存在,但值歸為NULL。

                  函數(shù):

                  內(nèi)置函數(shù):rand() 取得0到1之間的隨機(jī)數(shù)。

                  例: 取得5到10之間的隨機(jī)數(shù):5+5*rand(); 取得5到10之間的隨機(jī)整數(shù):5+floor(5*rand());

                  顯示當(dāng)前時(shí)間函數(shù):now()

                  時(shí)間戳函數(shù):unix_timestamp()

                  將時(shí)間戳轉(zhuǎn)換為時(shí)間函數(shù):from_timestamp()

                  Substring(元字符串,開始位置,截取長度) 字符串截取長度(字符數(shù)不是字節(jié)數(shù),而且從1開始)

                  Concat() 字符串連接函數(shù)

                  Lpad(要操作的字符串,最大填充長度,填充物) 左邊填充函數(shù)加密函數(shù):md5(要加密的字符)項(xiàng)目常用

                  Password(要加密的字符)mysql內(nèi)部獨(dú)用

                  Sha1(要加密的字符)項(xiàng)目常用

                  自定義函數(shù):

                  結(jié)構(gòu):函數(shù)名,參數(shù)列表,函數(shù)體,返回值

                  語法:定義:create fountion(參數(shù)列表)返回值類型

                  函數(shù)體

                  例:delimiter $

                  create function holle_world () returns varchar(20) begin

                  return 'holle world!';

                  end$

                  delimiter ;

                  調(diào)用:select 函數(shù)名(); 例:select holle_world(); 注意:函數(shù)與當(dāng)前數(shù)據(jù)庫綁定,只在當(dāng)前數(shù)據(jù)庫中可以使用,但同樣可以使用 數(shù)據(jù)庫.函數(shù)名 的方法來調(diào)用。

                  流程控制: delimiter $

                  If語句: create function funct1() returns varchar(20)

                  If 條件 then begin

                  if hour(now())>18 then --hour(時(shí)間)獲取當(dāng)前小時(shí)數(shù) 滿足條件要執(zhí)行的語句; return '天還亮~'; Else else

                  return '天要黑了~'; 不滿足條件要執(zhí)行的語句; end if;

                  Endif end$

                  delimiter ;

                  例: drop function if exists funct2;

                  delimiter $

                  While語句: create function funct2() returns int

                  begin While 條件 do

                  set @i=1;

                  Endwhile set @sum=0;

                  while (@i<=10) do

                  set @sum=@sum+@i;

                  set @i=@i+1;

                  end while;

                  return @sum;

                  end

                  $

                  delimiter ;

                  提前終止:

                  Leave 相當(dāng)于 break 用于退出循環(huán);

                  Iterate 相當(dāng)于 continue 用于退出當(dāng)前循環(huán);

                  注意:sql語句中,leave和iterate 不是有其出現(xiàn)的位置來決定何時(shí)推出的,而是使用了標(biāo)簽

                  語法(為循環(huán)體起名字)。

                  標(biāo)簽:while 條件 do 例: drop function if exists funct3;

                  delimiter $ 循環(huán)體; create function funct3() returns int

                  begin End while 標(biāo)簽;

                  set @i=0; set @sum=0;

                  w:while @i<10 do

                  set @i=@i+1; if @i=5 then

                  iterate w;

                  end if; set @sum=@sum+@i;

                  end while w;

                  return @sum;

                  end $

                  delimiter ;

                  參數(shù):參數(shù)的定義:1、要指明數(shù)據(jù)類型2、不用@符號(hào)定義3、是局部變量,函數(shù)外不起作用

                  4、一個(gè)函數(shù)可以有多個(gè)參數(shù)。

                  例: 例1:drop function if exists funct4;

                  delimiter $

                  create function funct4(_name varchar(10)) returns varchar

                  begin

                  return concat('你好' ,_name);

                  end

                  $

                  delimiter ;

                  還可以這樣使用:

                  : 例2

                  

                  局部變量的聲明:

                  要求:1、需要指明數(shù)據(jù)類型2、可以指明默認(rèn)值3、不用@符號(hào) 語法:declare i int default 0;

                  局部變量只在其所定義的函數(shù)內(nèi)起作用。

                  例;

                  drop function if exists funct3; delimiter $

                  create function funct3() returns int

                  begin

                  Declare i int default 1;

                  Declare sum1 int default 0;

                  w:while i<10 do

                  set i=i+1;

                  if i=5 then

                  iterate w;

                  end if;

                  set sum1=sum1+i;

                  end while w;

                  return sum1;

                  end

                  $

                  delimiter ;

                  s:

                  顯示當(dāng)前所處的狀態(tài)(所處的數(shù)據(jù)庫,id,編碼等)。

                   


          提高M(jìn)ySQL性能的方法 優(yōu)化MySQL數(shù)據(jù)庫性能的八大妙手
          MySQL動(dòng)態(tài)參數(shù)MySQL分區(qū)介紹
          MySQL分區(qū)表測(cè)試MySQL數(shù)據(jù)庫遷移常用方法
          MySQL集群方案MySQL配置優(yōu)化
          MySQL的計(jì)劃任務(wù)MySQL優(yōu)化策略
          Infobright基于MySQL的數(shù)據(jù)倉庫MySQL常用命令
          MySQL數(shù)據(jù)庫同步MySQL常用語句
          常用基本MySQL語句MySQL創(chuàng)建用戶
          信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
          • 勁爆價(jià):
            不限功能
            不限用戶
            1998元/年

          • 微信客服

            <output id="r87xx"></output>
          1. 
            
            <mark id="r87xx"><thead id="r87xx"><input id="r87xx"></input></thead></mark>
              • 久久福利社区一区 | 影音成人AV | 看国产黄色视频 | 精品欧美无人区乱码毛片 | 无码一区二区三区四 | 韩国一区二区在线视频 | 蜜桃视频高清无码 | 就爱添逼视频免费网站 | 大香操逼网 | 大香蕉成年人视频 |