MySQL,寫兩句~

MySQL 從放棄到入門

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

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

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

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

>mysql --help


Step 1, connecting&disconnecting

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

>mysql -h host -u user -p

Enter password:

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

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

mysql>?QUIT(or \q)

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


Step 2,寫兩句

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


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

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

mysql>SHOW DATABASES;

特別注意:當(dāng)前用戶是否擁有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)看當(dāng)前數(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é)能減排”,對某些屬性設(shè)置特定長度可以有效的減小資源占用,如name設(shè)置長度為20。當(dāng)后期有變更的時候,可以使用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三個屬性值。

當(dāng)成功創(chuàng)建表需要查看創(chuàng)建表語句檢驗是否符合設(shè)計預(yù)期,或者忘記表中列的屬性定義的時候,可以查看表各列及其屬性,[關(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)上,對應(yīng)修改成 LINES TERMINATED BY '\r'

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

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

當(dāng)插入值缺失的時候,用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,默認(rèn)排序為升序,降序則添加關(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為自增,并設(shè)置為主鍵:

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

(4)增加字段:

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

(5)修改字段默認(rèn)值:

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 NULLIS NOT NULL]:

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

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

注意:將一個值與NULL進(jìn)行比較運算(=, <, <>),結(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提供了正則表達(dá)式相關(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個字符

查看更多正則表達(dá)運算符


·10 多表查詢

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

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

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

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';

有時候也用當(dāng)前表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é)果是:輸出會增加顯示當(dāng)前時間(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是數(shù)據(jù)庫? 數(shù)據(jù)庫是存儲數(shù)據(jù)的集合的單獨的應(yīng)用程序。每個數(shù)據(jù)庫具有一個或多個不同的API,用于創(chuàng)建,訪問,管理...
    chen_000閱讀 4,124評論 0 19
  • MySQL 數(shù)據(jù)庫常用命令 1、MySQL常用命令 create database name; 創(chuàng)建數(shù)據(jù)庫 use...
    55lover閱讀 5,038評論 1 57
  • 目錄 MySQL簡介 基本輸入查詢 創(chuàng)建并使用數(shù)據(jù)庫 SELECT語句 選擇特殊行 條件 通配符 選擇特殊列 排序...
    鬼宇書生閱讀 1,082評論 2 1
  • MySQL5.6從零開始學(xué) 第一章 初始mysql 1.1數(shù)據(jù)庫基礎(chǔ) 數(shù)據(jù)庫是由一批數(shù)據(jù)構(gòu)成的有序的集合,這些數(shù)據(jù)...
    星期四晚八點閱讀 1,228評論 0 4
  • 工作狀態(tài): 1.盡職盡責(zé),將自己的事情、工作做到它因有的狀態(tài)。 2.團(tuán)結(jié)助人,和同事上下級打理好關(guān)系,共同發(fā)展事業(yè)...
    王德彪閱讀 132評論 0 0

友情鏈接更多精彩內(nèi)容