MySQL皆愉,寫兩句~

MySQL 從放棄到入門

很久沒有寫sql語句了嗜价,今天當需要講數(shù)據(jù)庫的時候(是的艇抠,就是那樣~),發(fā)現(xiàn)已經(jīng)手生了炭剪,深夜看文檔后寫下了這篇文章练链。

這篇文章主要是針對有一定數(shù)據(jù)庫基礎(chǔ)知識的盆友。是的奴拦,就像走兩步是檢驗腳一樣媒鼓,作為了解數(shù)據(jù)庫的我們,得:寫兩句错妖。當然绿鸣,如果是對數(shù)據(jù)庫知之甚少的伙伴,按照本文的示例也能初步感受sql語句的魅力(就那么幾句)暂氯。數(shù)據(jù)庫版本尤其是商用版本夠多潮模,但是基本sql語句都是大同小異,本文主要是針對MySql痴施。

開發(fā)過程中擎厢,個人非常熱衷官方文檔。能用看文檔解決的問題辣吃,都不是大問題动遭,如果有問題,那就再看一遍神得!

所以厘惦,不得不第一個提起的就是:

>mysql --help


Step 1, connecting&disconnecting

當我們需要數(shù)據(jù)庫服務的時候,首先得通過既有賬號和密碼連接到數(shù)據(jù)庫哩簿。

>mysql -h host -u user -p

Enter password:

-h:what host(不填則為連接本機上的MySQL), -u:user name, -p:password to use,輸入密碼后就可以對數(shù)據(jù)庫進行各種溫柔的交流了宵蕉。

當我們不再需要操作數(shù)據(jù)庫的時候,作為一個有始有終的人节榜,這個時候一定不能原諒自己忘了斷開連接羡玛。

mysql>?QUIT(or \q)

如果使用的是Unix,也可通過 Control+D 斷開數(shù)據(jù)庫連接全跨。


Step 2,寫兩句

第一步我們已經(jīng)成功與數(shù)據(jù)庫建立連接缝左,下面就開始本文的重點啦,嗯浓若,寫上兩句。


2.1 首先蛇数,得有數(shù)據(jù)庫

查看當前server上已經(jīng)存在數(shù)據(jù)庫挪钓,[關(guān)鍵詞?SHOW]:

mysql>SHOW DATABASES;

特別注意:當前用戶是否擁有SHOW_DDATABASES 權(quán)限。

如果沒有既有的數(shù)據(jù)庫耳舅,則需要創(chuàng)建數(shù)據(jù)庫(庫名:test)碌上,[關(guān)鍵詞?CREATE]:

mysql> CREATE DATABASE test;

注意:Unix環(huán)境下是區(qū)分大小寫的倚评,所以,建表的時候表名避免大小寫混寫馏予,數(shù)據(jù)庫命名也是如此天梧!

訪問數(shù)據(jù)庫(本地存在該數(shù)據(jù)庫,本文測試數(shù)據(jù)庫名均為test)霞丧,[關(guān)鍵詞?USE]:

mysql> USE test


2.2 其次呢岗,得有表

基于步驟2.1已經(jīng)訪問到特定數(shù)據(jù)庫后,產(chǎn)看當前數(shù)據(jù)庫所有表蛹尝,[關(guān)鍵詞 SHOW TABLES]:

mysql> SHOW TABLES;

如果沒有需要的表的時候后豫,則創(chuàng)建一張新的表(表名 user),[關(guān)鍵詞 CREATE TABLE]:

mysql> CREATE TABLE user (name VARCHAR(20), sex CHAR(1), birth DATE);

表名:user突那,每個user都有name挫酿,sex以及birth三個屬性值。VARCHAR長度可以為1-65535愕难,為“節(jié)能減排”早龟,對某些屬性設置特定長度可以有效的減小資源占用,如name設置長度為20猫缭。當后期有變更的時候葱弟,可以使用ALTER TABLE對已有表添加、修改或刪除列饵骨。

mysql> create table users (id int(4) primary key not null auto_increment,name varchar(20) not null default '', gender char(1) not null default 'm',address varchar(20), tel varchar(20));

表名:users,每個user都有一個自增的主鍵id翘悉,name,gender居触,address以及tel三個屬性值妖混。

當成功創(chuàng)建表需要查看創(chuàng)建表語句檢驗是否符合設計預期,或者忘記表中列的屬性定義的時候轮洋,可以查看表各列及其屬性制市,[關(guān)鍵詞 DESCRIBEDESC]:

mysql> DESCRIBE user;


2.3 填充數(shù)據(jù)

將本地文件按順序填充到數(shù)據(jù)庫:

mysql> LOAD DATA LOCAL INFILE '/path/users.txt' INTO TABLE user;

若文件是在Windows上創(chuàng)建,則需要將上述語句改成:

mysql> LOAD DATA LOCAL INFILE '/path/users.txt' INTO TABLE user LINES TERMINATED BY '\r\n\';

在OS X系統(tǒng)上弊予,對應修改成 LINES TERMINATED BY '\r'祥楣。

插入數(shù)據(jù),[關(guān)鍵詞 INSERT]:

mysql> INSERT INTO user VALUES ('John', 'f', '1999-01-01');

當插入值缺失的時候汉柒,用NULL代替误褪。


2.4 操作表

·1 最簡單的方式,獲取表中所有數(shù)據(jù) [關(guān)鍵詞SELECT]

mysql> SELECT * FROM user;


·2 獲取特定行

mysql> SELECT * FROM user WHERE name = 'Tommy';

mysql> SELECT * FROM user WHERE birth >= '2000-01-01';

mysql> SELECT * FROM user WHERE name = 'Tommy' OR name = 'Tom';

mysql> SELECT * FROM user WHERE (sex = 'm' AND birth >= '2000-01-01') OR (sex = 'f' AND birth >= '2005-01-01');


·3 獲取特定列

mysql> SELECT name, birth FROM user;

mysql> SELECT DISTINCT birth FROM user; ?

DISTINCT:相同結(jié)果只輸出一次碾褂。


·4 排序兽间,[關(guān)鍵詞 ORDER BY,默認排序為升序正塌,降序則添加關(guān)鍵詞 DESC]

mysql> SELECT name, birth FROM user ORDER BY birth;

mysql> SELECT name, birth FROM user ORDER BY birth DESC;

mysql>SELECT?name, birth?FROM?user?ORDER BY sex,?birth?DESC;

關(guān)鍵詞DESC只對緊鄰產(chǎn)生影響(birth)嘀略。


·5 修改一條數(shù)據(jù)的值恤溶,[關(guān)鍵詞 UPDATE]

mysql> UPDATE user SET birth = '2000-01-01' WHERE name = 'Tommy';


·6 ALTER

(1)修改表名:

mysql> ALTER TABLE user RENAME TO db_user;

(2)增加主鍵:

mysql> ALTER TABLE user ADD id int(5) unsigned NOT NULL AUTO_INCREMENT , ADD PRIMARY KEY(id);

(3)修改id為自增,并設置為主鍵:

mysql> ALTER TABLE user MODIFY id INT AUTO_INCREMENT PRIMARY KEY;

(4)增加字段:

mysql> ALTER TABLE user ADD (address varchar(20));

(5)修改字段默認值:

mysql> ALTER TABLE user ALTER COLUMN gender set default 0;

(6)在某個自斷后增加字段:

mysql> ALTER TABLE user ADD COLUMN email VARCHAR(20) NOT NULL DEFAULT ''AFTER tel;

(7)修改原字段名稱及類型帜羊,修改字段名時必須重新制定字段類型:

mysql> ALTER TABLE user CHANGE project project_new varchar(20) NOT NULL DEFAULT '';

(8)刪除字段:

mysql> ALTER TABLE db_teacher DROP address;

(9)修改一個字段類型:

mysql> ALTER TABLE db_teacher MODIFY gender INT(1) UNSIGNED DEFAULT 0;


·7 NULL

NULL虐我千百遍咒程,還得待她如初戀~

官方文檔對于NULL的定義是:a missing unknown value

對于值的NULL判斷讼育,[關(guān)鍵詞 IS NULL帐姻,IS NOT NULL]:

mysql> SELECT 1 IS NULL, 1 IS NOT NULL;

1不為NULL窥淆,故上述結(jié)果分別是0卖宠,1。

注意:將一個值與NULL進行比較運算(=, <, <>),結(jié)果均為NULL忧饭。

查看更多比較運算扛伍。


·8 統(tǒng)計數(shù)據(jù)條數(shù) [關(guān)鍵方法 COUNT(*)]

mysql> SELECT COUNT(*) FROM user; ? ? 注:統(tǒng)計用戶數(shù)

mysql> SELECT sex, COUNT(*) FROM user GROUP BY sex; ? ?注:統(tǒng)計male,female (如果有NULL則還有NULL)人數(shù)

查看更多分組運算词裤。


·9 Pattern Matching

MySQL提供了正則表達式相關(guān)的模式匹配方法刺洒。

(1),"_":匹配一個字符吼砂,“%”:匹配任意字符數(shù)(包括0)逆航;

(2),不區(qū)分大小寫渔肩;

(3)因俐,關(guān)鍵詞 LIKENOT LIKE周偎。

mysql> SELECT * FROM user WHERE name LIKE 'a%'; ? 注:名字以a開頭

mysql> SELECT * FROM user WHERE name LIKE '%s'; ? ?注:名字以s結(jié)束

mysql> SELECT * FROM user WHERE name NOT LIKE '%b%';? ? 注:名字不包含b

mysql> SELECT * FROM user WHERE name LIKE? '___'; ? ? ?注:名字長度為5個字符

查看更多正則表達運算符抹剩。


·10 多表查詢

為準確記錄用戶一些重大事件,目前僅只有一張user表已經(jīng)無法滿足我們的需求了蓉坎,新增一張event表澳眷,分別記錄用戶名,日期蛉艾,事件類型以及備注钳踊。

mysql> CREATE TABLE event (name VARCHAR(20), date DATE, type VARCHAR(15), describe VARCHAR(255));

將數(shù)據(jù)導入或插入表中。

event表中記錄用戶一條type為marry的結(jié)婚事件勿侯,現(xiàn)在需要查詢各用戶的結(jié)婚年齡:

mysql> SELECT user.name, TIMESTAMPDIFF(YEAR,birth, date) AS age, desc FROM user INNER JOIN event ON user.name = event.name WHERE event.type = 'marry';

有時候也用當前表join表本身用于計算拓瞪。

mysql> SELECT u1.name, u1.sex FROM user AS u1 INNER JOIN user AS u2 ON u1.birth = u2.birth AND u1.sex = 'f' AND u2.sex = 'm';


·11 日期計算

日期計算在數(shù)據(jù)庫使用中非常普遍。MySQL也提供了日期相關(guān)的計算方法助琐。

計算年齡吴藻,[方法 TIMESTAMPDIFF()]

mysql> SELECT name, birth, CURDATE(), ?TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age FROM user;

mysql>?SELECT?name, birth,?CURDATE(), ?TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS?age?FROM user ORDER BY age;

mysql> SELECT name, birth, CURDATE(), TIMESTAMPDIFF(YEAR,birth, CURDATE()) AS age FROM user WHERE birth IS NOT NULL ORDER BY age;

上述sql語句執(zhí)行結(jié)果是:輸出會增加顯示當前時間(CURDATE()),年齡age(TIMESTAMPDIFF(YEAR,birth,CURDATE()))弓柱。

mysql> SELECT name, birth, MONTH(birth) FROM user;

獲取特定日期的月份使用 MONTH()沟堡,相似方法還有YEAR(),MONTH()矢空,DAYOFMONTH()等航罗,查看MySQL更過日期、時間計算方法屁药。


好了粥血,本次關(guān)于找回MySQL曾經(jīng)內(nèi)容就到這了,后續(xù)會寫深入MySQL相關(guān)內(nèi)容酿箭。

文中若有疏漏及錯誤复亏,煩請斧正,謝謝缭嫡。

在中秋假期的最后一天祝各位看官中秋快樂~


附:官方文檔地址 MySQL 5.6 Reference Manual

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缔御,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子妇蛀,更是在濱河造成了極大的恐慌耕突,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件评架,死亡現(xiàn)場離奇詭異眷茁,居然都是意外死亡,警方通過查閱死者的電腦和手機纵诞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門上祈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浙芙,你說我怎么就攤上這事登刺。” “怎么了茁裙?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵塘砸,是天一觀的道長。 經(jīng)常有香客問我晤锥,道長掉蔬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任矾瘾,我火速辦了婚禮女轿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘壕翩。我一直安慰自己蛉迹,他們只是感情好,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布放妈。 她就那樣靜靜地躺著北救,像睡著了一般荐操。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上珍策,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天托启,我揣著相機與錄音,去河邊找鬼攘宙。 笑死屯耸,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的蹭劈。 我是一名探鬼主播疗绣,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼铺韧!你這毒婦竟也來了多矮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤祟蚀,失蹤者是張志新(化名)和其女友劉穎工窍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體前酿,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡患雏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了罢维。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淹仑。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肺孵,靈堂內(nèi)的尸體忽然破棺而出匀借,到底是詐尸還是另有隱情,我是刑警寧澤平窘,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布吓肋,位于F島的核電站,受9級特大地震影響瑰艘,放射性物質(zhì)發(fā)生泄漏是鬼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一紫新、第九天 我趴在偏房一處隱蔽的房頂上張望均蜜。 院中可真熱鬧,春花似錦芒率、人聲如沸囤耳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽充择。三九已至德玫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間聪铺,已是汗流浹背化焕。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铃剔,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓查刻,卻偏偏與公主長得像键兜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子穗泵,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

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

  • 什么是數(shù)據(jù)庫普气? 數(shù)據(jù)庫是存儲數(shù)據(jù)的集合的單獨的應用程序。每個數(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
  • 目錄 MySQL簡介 基本輸入查詢 創(chuàng)建并使用數(shù)據(jù)庫 SELECT語句 選擇特殊行 條件 通配符 選擇特殊列 排序...
    鬼宇書生閱讀 1,030評論 2 1
  • MySQL5.6從零開始學 第一章 初始mysql 1.1數(shù)據(jù)庫基礎(chǔ) 數(shù)據(jù)庫是由一批數(shù)據(jù)構(gòu)成的有序的集合仔沿,這些數(shù)據(jù)...
    星期四晚八點閱讀 1,136評論 0 4
  • 工作狀態(tài): 1.盡職盡責,將自己的事情尺棋、工作做到它因有的狀態(tài)封锉。 2.團結(jié)助人,和同事上下級打理好關(guān)系膘螟,共同發(fā)展事業(yè)...
    王德彪閱讀 106評論 0 0