MySQL技術(shù)內(nèi)幕(第四版)讀書筆記

2015/4/22


MySQL采用的是客戶/服務(wù)器體系結(jié)構(gòu)瓦糕,因此,當(dāng)你使用MySQL時款筑,你實際上是在使用兩個程序智蝠,MySQL服務(wù)器程序,指的是mysqld程序奈梳,它運(yùn)行在你存放你的數(shù)據(jù)庫的機(jī)器上杈湾,負(fù)責(zé)在網(wǎng)絡(luò)上監(jiān)聽并處理倆字客戶端的服務(wù)請求,根據(jù)這行請求去訪問數(shù)據(jù)庫的內(nèi)容攘须,再把有關(guān)信息回傳給客戶端漆撞;另一個程序是MySQL客戶端程序,它們負(fù)責(zé)連接到數(shù)據(jù)庫服務(wù)器于宙,并通過向服務(wù)器發(fā)出查詢命令來告知客戶端需要哪些數(shù)據(jù)浮驳。mysql是最常用的客戶端程序。其他的有mysqldump捞魁、mysqladmin至会,前者把數(shù)據(jù)表的內(nèi)容導(dǎo)出到一個文件里,后者用來檢查數(shù)據(jù)庫服務(wù)器的工作狀態(tài)和執(zhí)行一些數(shù)據(jù)庫管理方面的任務(wù)谱俭。也就是說MySQL和mysql是兩種不同的事物奋献,前者指一個完整的MySQL RDBMS,而后者指的是一個特定的客戶端程序旺上。

使用mysql連接數(shù)據(jù)庫服務(wù)器(WINDOWS CMD下):
cd D:/WAMP/wamp/bin/mysql/mysql5.5.20/bin
mysql -h host_name -p -u user_name
回車,輸入密碼糖埋。
或者宣吱,mysql -h host_name -pyour_pass -u user_name
或者,mysql --host=host_name --password=your_pass --user=user_name
-h,-u與其后的內(nèi)容有無空格均可瞳别,但是-p必須沒有空格征候。
如果不想輸入-u選項杭攻,可以設(shè)置環(huán)境變量(既然說是環(huán)境變量,那么疤坝,可以去控制面板->系統(tǒng)中設(shè)置):
set USER=user_name(但是親測不好用)
如果是連接本地數(shù)據(jù)庫兆解,則可省略-h選項。
此處把我的幾個錯誤記錄下來跑揉,我剛開始用命令行連接數(shù)據(jù)庫時锅睛,切到mysql.exe所在的目錄下,沒有輸入上述連接命令历谍,直接就是mysql.exe现拒,然后回車,然后再輸入mysql -h host_name -p -u user_name就是不行望侈。
還有印蔬,密碼必須是手動敲進(jìn)去的,復(fù)制粘貼的不行脱衙。


2015/4/23

Q1:嘗試不使用-u侥猬、-p登錄,發(fā)現(xiàn)可以連接捐韩。按理說不行啊退唠。我想是不是因為環(huán)境變量中已經(jīng)有了用戶名的原因,退出mysql奥帘,輸入SET USER=noUser铜邮,然后不使用-u、-p登錄寨蹋,結(jié)果依然可以登錄松蒜。想不明白是為什么。
A1:可能是SET USER=noUser沒有起作用已旧,然后存在''@localhost這個用戶秸苗。
Q:LINUX下的命令提示符為$或者#,書上說Unix為%或者$运褪,windows為C:>惊楼。是這樣么?

可以在連接的時候直接指定數(shù)據(jù)庫:
mysql -h host_name -pyour_pass -u user_name dbname
SQL語句末尾的分號表示語句的結(jié)束秸讹,也可以使用“\g”(表示go)檀咙,也可以使用“\G”(表示數(shù)值排列顯示結(jié)果)。
“\c”璃诀,退出當(dāng)前語句輸入(有時前面輸入一個引號弧可,后面輸入一個“\c”不好使,是因為MySQL將\c認(rèn)為是字符串的內(nèi)容了劣欢,退不出語句輸入棕诵,這時候?qū)⒆址Y(jié)束裁良,即輸入另一個引號即可)。

連接MySQL直接執(zhí)行文件中的SQL命令:
mysql -h host_name -pyour_pass -u user_name < my.sql

顯示當(dāng)前數(shù)據(jù)庫:
SELECT DATABASE();

進(jìn)入mysql后校套,讀入文件中的SQL語句:
source my.sql;


2015/4/26

AUTO_INCREMENT和PRIMARY KEY的關(guān)系:
MySQL要求必須給具有AUTO_INCREMENT屬性的列定義某種形式的唯一化索引价脾,若沒有,數(shù)據(jù)表的定義就不合法笛匙。PRIMARY KEY表示對列創(chuàng)建索引以加快查找速度侨把,同時,也要求該數(shù)據(jù)列里面的值都是唯一且存在的膳算,所以具有PRIMARY KEY屬性的字段可以省略NOT NULL座硕。

兩個的語句:
當(dāng)前服器所有數(shù)據(jù)庫 SELECT DATABASE();
當(dāng)前使用的數(shù)據(jù)庫 SHOW DATABASES;

SHOW TABLES;
也就是說,SHOW后面不是函數(shù)且為復(fù)數(shù)涕蜂,而 SELECT后面是函數(shù)华匾。

查看表結(jié)構(gòu):
DESCRIBE table_name;
DESC table_name;
EXPLAIN table_name;
SHOW COLUMNS FROM table_name;
SHOW FIELDS FROM table_name;
同時,這些字句還允許將輸出內(nèi)容限制為指定的數(shù)據(jù)列机隙,比如說加上LIKE字句蜘拉,或者直接指定需要查詢的列名:DESCRIBE table_name column_name

Q:語句SHOW FULL COLUMNS FROM table_name;SHOW COLUMNS FROM table_name有什么區(qū)別有鹿?

使用SHOW命令得到的內(nèi)容都可以使用mysqlshow客戶端得到旭旭。
mysqlshow -h host_name -u user_name -pyour_pass;
mysqlshow -h host_name -u user_name -pyour_pass database_name;
mysqlshow -h host_name -u user_name -pyour_pass database_name table_name;
“ISAM”是“indexed sequential access method”(索引化順序訪問方法)的縮寫,MyISAM引擎在這種訪問方法的基礎(chǔ)上增加了一些MySQL獨有的東西葱跋。

Q:P31中有這么一句話持寄,

InnoDB引擎通過引入“外鍵”概念而具備了保持“引用一致性”的特點。

意思是不是MyISAM引擎就沒有“外鍵”這一概念娱俺?

這樣的建表語句:
CREATE TABLE table_name ( FOREIGN KEY (column_name) REFERENCES another_table_name (column_name) ) ENGINE = InnoDB;
這樣即可定義外鍵稍味。外鍵的作用是確保被插入的列值必須與另一張表中的指定列中的值可以匹配上。出現(xiàn)在FOREIGN KEY 里的數(shù)據(jù)列荠卷,要么它本身有一個索引模庐,要么是某個多數(shù)據(jù)列索引里第一個被列出的數(shù)據(jù)列。如果不是油宜,最好使用INDEX(column_name)顯式指定一個掂碱,雖然,InnoDB存儲引擎會為出現(xiàn)在外鍵定義里面的數(shù)據(jù)列自動創(chuàng)建一個索引慎冤,但它創(chuàng)建的未必是合適的疼燥,所以,最好顯式指定一個蚁堤。

使用SET子句插入數(shù)據(jù):
INSERT INTO table_name SET column_name1 = value1,column_name2 = value2;

讀取本地文件my_sql.txt中的內(nèi)容醉者,插入數(shù)據(jù)庫:
LOAD DATA LOCAL INFILE 'my_sql.txt' INTO TABLE table_name;
如果沒有LOCAL關(guān)鍵字,即為讀取服務(wù)器上的文件。
在默認(rèn)情況下湃交,LOAD DATA 語句將假設(shè)各數(shù)據(jù)列的值以制表符分割,各數(shù)據(jù)行以換行符分隔藤巢,數(shù)據(jù)值的排列順序與各數(shù)據(jù)列在數(shù)據(jù)表里的先后順序一致搞莺。
也可以使用mysqlimport客戶端
mysqlimport -h host_name -u user_name -pyour_pass --local database_name my_sql.txt注意這里沒有“;”,如果加上掂咒,分號會被當(dāng)做文件名的一部分
Q:不加--local參數(shù)是不是就可以訪問服務(wù)器端的文件了才沧?

獲得數(shù)據(jù)庫版本:
SELECT VERSION();

MySQL不區(qū)分?jǐn)?shù)據(jù)列的大小寫,但是卻未必不區(qū)分?jǐn)?shù)據(jù)庫和數(shù)據(jù)表名字的大小寫绍刮,這取決于服務(wù)器主機(jī)上使用的文件系統(tǒng)以及MySQL的配置情況温圆。

關(guān)于NULL值的比較:
使用普通的算術(shù)比較運(yùn)算符對NULL值進(jìn)行操作,其結(jié)果是不可預(yù)知的孩革,甚至使用普通的算術(shù)比較運(yùn)算符比較NULL和其自身岁歉,結(jié)果也是不可預(yù)料的。
比較NULL值只能使用IS NULL 或者IS NOT NULL或者<=>或者NOT <=>膝蜈,比如锅移,SELECT NOT NULL<=>NULL;返回0。

MySQL部分算術(shù)運(yùn)算符:

DIV 整數(shù)除法
% 求余
/ 除法

MySQL部分邏輯運(yùn)算符:

XOR 邏輯異或
NOT 邏輯非

有這么一個需求饱搏,將記錄以某一個可能包含NULL值的列降序排列非剃,但是還需要讓該列為NULL的記錄在結(jié)果集的前面,可以這樣:
SELECT (*) FROM table_name ORDER BY IF(column_name <=> NULL,0,1) column_name DESC
這里使用了IF函數(shù)推沸,當(dāng)?shù)谝粋€參數(shù)為真备绽,IF()函數(shù)返回第二個參數(shù),否則返回第三個參數(shù)鬓催。


2015/5/7

Q:一個變量@val肺素,它的生存周期是多長?我試驗過深浮,在mysql客戶端压怠,設(shè)置一個變量,然后執(zhí)行別的SQL語句飞苇,該變量一直存在菌瘫,但是quit或者exit后,再連接數(shù)據(jù)庫布卡,該變量就不存在了雨让。這是不是就是與常連接的概念有關(guān)。

隨機(jī)取出某條數(shù)據(jù):
SELECT col_name FROM table_name ORDER BY RAND()
COUNT(*)COUNT(col_name)的區(qū)別:后者只統(tǒng)計非NULL行忿等。
統(tǒng)計某列的不重復(fù)值 的數(shù)目栖忠,以前我一直是COUNT()函數(shù)和GROUP BY col_name一起用來實現(xiàn),還可以這樣,更簡單:COUNT(DISTINCT col_name)


2015/8/11

存儲引擎的可移植性:
從某種意義上講庵寞,任何一個MySQL服務(wù)器所管理的任何數(shù)據(jù)表都可以移植到另一臺服務(wù)器上去狸相,想用mysqldump工具把它備份出來,然后把備份文本文件放到另一臺服務(wù)器主機(jī)捐川,并通過加載備份的方法重新創(chuàng)建該數(shù)據(jù)表脓鹃。可移植性還有另一層含義古沥,即二進(jìn)制可移植性瘸右,指的是你可以直接把代表某個數(shù)據(jù)表的硬盤文件復(fù)制到另一臺機(jī)器,并把他們安裝到數(shù)據(jù)子目錄下的相應(yīng)地點岩齿,然后那臺機(jī)器上的MySQL服務(wù)器就可以使用該數(shù)據(jù)表了太颤。
一般來說,MyISAM和InnoDB的存儲格式與機(jī)器無關(guān)盹沈,他們具備二進(jìn)制可移植性龄章。

從其他數(shù)據(jù)表或查詢結(jié)果創(chuàng)建數(shù)據(jù)表:
CREATE TABLE new_table_name LIKE table_name;
INSERT INTO new_table_name SELECT...;

CREATE TABLE new_table_name SELECT ...;
前者首先復(fù)制表結(jié)構(gòu)及所有數(shù)據(jù)列的屬性,然后填充數(shù)據(jù)襟诸。后者直接將SELECT得到的數(shù)據(jù)填充至新的數(shù)據(jù)表瓦堵,但是不會復(fù)制數(shù)據(jù)列的屬性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末歌亲,一起剝皮案震驚了整個濱河市菇用,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌陷揪,老刑警劉巖惋鸥,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異悍缠,居然都是意外死亡卦绣,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門飞蚓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滤港,“玉大人,你說我怎么就攤上這事趴拧〗ρ” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵著榴,是天一觀的道長添履。 經(jīng)常有香客問我,道長脑又,這世上最難降的妖魔是什么暮胧? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任锐借,我火速辦了婚禮,結(jié)果婚禮上往衷,老公的妹妹穿的比我還像新娘钞翔。我一直安慰自己,他們只是感情好席舍,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布嗅战。 她就那樣靜靜地躺著,像睡著了一般俺亮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疟呐,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天脚曾,我揣著相機(jī)與錄音,去河邊找鬼启具。 笑死本讥,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鲁冯。 我是一名探鬼主播拷沸,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼薯演!你這毒婦竟也來了撞芍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤跨扮,失蹤者是張志新(化名)和其女友劉穎序无,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衡创,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡帝嗡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了璃氢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哟玷。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖一也,靈堂內(nèi)的尸體忽然破棺而出巢寡,到底是詐尸還是另有隱情,我是刑警寧澤塘秦,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布讼渊,位于F島的核電站,受9級特大地震影響尊剔,放射性物質(zhì)發(fā)生泄漏爪幻。R本人自食惡果不足惜菱皆,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挨稿。 院中可真熱鬧仇轻,春花似錦、人聲如沸奶甘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽臭家。三九已至疲陕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钉赁,已是汗流浹背蹄殃。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留你踩,地道東北人诅岩。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像带膜,于是被迫代替她去往敵國和親吩谦。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 什么是數(shù)據(jù)庫膝藕? 數(shù)據(jù)庫是存儲數(shù)據(jù)的集合的單獨的應(yīng)用程序式廷。每個數(shù)據(jù)庫具有一個或多個不同的API,用于創(chuàng)建芭挽,訪問懒棉,管理...
    chen_000閱讀 4,032評論 0 19
  • MySQL 數(shù)據(jù)庫常用命令 1、MySQL常用命令 create database name; 創(chuàng)建數(shù)據(jù)庫 use...
    55lover閱讀 4,776評論 1 57
  • 轉(zhuǎn)載览绿,覺得這篇寫 SQLAlchemy Core策严,寫得非常不錯。不過后續(xù)他沒寫SQLAlchemy ORM... ...
    非夢nj閱讀 5,377評論 1 14
  • 今天寶寶鬧著不午睡饿敲,于是我就帶他去附近的景點逛逛妻导,快結(jié)束的黃金周人沒有那么擁擠了,但那些攤販們卻依然堅守著怀各。 捏面...
    OQ熊閱讀 144評論 0 0
  • 江南煙雨后的巷子倔韭,斑駁的墻面悄然爬上的青苔,課后偏要繞小道回家的妞瓢对!
    安錦素閱讀 153評論 0 0