|
進(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,編碼等)。
信息發(fā)布:廣州名易軟件有限公司 http://m.jetlc.com
|