mysql是一款很牛逼的關(guān)系型數(shù)據(jù)庫。
上大學(xué)時,導(dǎo)論老師教的是用SQL Server,開發(fā)老師教的是用MySQL,Oracle也在課程體系之內(nèi),自學(xué)用的是Redis和Mongodb,以上構(gòu)成了前段時間我對數(shù)據(jù)庫我接觸過的并且使用過然而也只是個crud boy的全部認(rèn)知。在沒聽過丁奇老師的《MySQL實戰(zhàn)45講》之前,我覺得MySQL CURD寫的6,然后事務(wù)啥的搞搞懂就還行吧??戳怂恼n后,受益良多,遂決定重新梳理下MySQL的知識點,這也堅定了我離開學(xué)校后,每個月花點錢投資在學(xué)習(xí)上的決心,付出就會有回報。
兄弟關(guān)系,是這樣子的,收購sun公司的Oracle公司,財大氣粗,收購了MySQL。MySQL開源社區(qū)擔(dān)心有閉源的風(fēng)險,就另起爐灶,開了一個MySQL的分支,叫MariaDB(這個Maria起的好啊,MySQL的創(chuàng)始人女兒的名字)
參考我的GitHub開源筆記:https://github.com/ataola/ataolaSkillsStack/blob/master/ToolsUseage/Mysql/README.md
好啦,看到這里,你大致應(yīng)該是電腦上有個MySQL,別急先別跑起來,我們先坐下約定啊。
關(guān)于MySQL的一些基本操作,規(guī)范一點,統(tǒng)一這里數(shù)據(jù)庫名小寫(都小寫的,你大寫也沒用),數(shù)據(jù)庫表名前面加個“t_”后面小寫,字段名首字母大寫,跟一個表名的首字母,然后數(shù)據(jù)庫語句基本組成大寫, 這樣子看上去整齊就比較美觀了。
寫法一:
# This is jiangtao Zheng Speaking!
寫法二:
--- This is Jiangtao Speaking!
# 方法一:刪庫重建
DROP DATABASE IF EXISTS helloworld;
CREATE DATABASE helloworld;
# 方法二:有庫不重建,沒庫重建
CREATE DATABASE IF NOT EXISTS helloworld;
這里的話,我們通常寫方法二這句話就夠了,為什么要加樓上這句話呢?就說,我們可能會遇到這樣一種情況,我創(chuàng)建了一個數(shù)據(jù)庫,但是有沖突,我數(shù)據(jù)庫里面已經(jīng)有了一個這樣的數(shù)據(jù)庫了。所以你是不是要判斷一下, 如果有,刪它。這里有兩種寫法, 一種是 "DROP DATABASE IF EXISTS helloworld", 另一種是"CREATE DATABASE IF NOT EXISTS helloworld", 這里我更傾向于前者,因為你不能保證后者的表就跟我要創(chuàng)建的一致吧。
同樣的按照樓上2.1的思路,你應(yīng)該猜也能猜到了。
# 方法一: 刪表重建
USE helloworld;
DROP TABLE IF EXISTS t_user;
CREATE TABLE t_user (
`Uid` INT PRIMARY KEY, --id
`Uname` VARCHAR(20) NOT NULL --姓名
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
DESCRIBE `user`;
#方法二:有表不刪表, 沒表重建
USE helloworld;
CREATE TABLE IF NOT EXISTS t_user (
`Uid` INT PRIMARY KEY, --id
`Uname` VARCHAR(20) NOT NULL --姓名
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO t_user (`Uname`, `Uage`, `Uaddress`) VALUES('鄭江濤', '23', '浙江杭州');
"增 "需要注意的是主鍵是否需要自增,如果自增的話,那么就不需要寫上去了,這里我們可以考慮這樣兩種情況一種是部分插入、一種是完全插入。部分插入就是在符合表的約束前提下,我只插入表的一部分,剩下我不管,置空還是初始值你自己定義。完全插入看樓上例子。
DELETE FROM t_user WHERE `Uname` = "鄭江濤";
UPDATE t_user SET Uage = 23 WHERE Uname = "鄭江濤";
查是比較頭疼的,查詢這里也分,條件查詢、連接查詢、嵌套查詢、關(guān)聯(lián)查詢、部分查詢和全部查詢等等。
# 全部查詢
SELECT * FROM t_user;
#條件查詢
--- 查詢年齡為22的選手
SELECT * FROM t_user WHERE `UAge` = 22;
#嵌套查詢
--- 查詢開發(fā)部工資小于10000的選手的姓名和地址 (IN)
SELECT DISTINCT `EName`, `EAddress` FROM t_employee WHERE `ESalary` < 10000 AND `Dno` IN (SELECT `Dno` FROM t_department WHERE `DName` = '開發(fā)部');
#連接查詢
--- 查詢開發(fā)部工資小于10000的選手的姓名和地址 (NATURAL JOIN)
SELECT DISTINCT `EName`, `EAddress` FROM t_employee NATURAL JOIN t_department WHERE `DName` = '開發(fā)部' AND `ESalary` < 10000;
# 部分查詢
SELECT `UName`, `UAge` FROM t_user;
這里只是列舉一些最基本的,深入地學(xué)習(xí)還需要大家靠平時去CRUD。
字符串好,也沒聽說過電話號碼能夠拿來加減啊,所以還是字符串好,從這個方面考慮。
-- 部門表(主表)
CREATE TABLE t_dept(
Did INT PRIMARY KEY,
Dname VARCHAR(20)
)
-- 修改員工表(副表/從表)
CREATE TABLE t_employee(
Eid INT PRIMARY KEY,
Ename VARCHAR(20),
Deptid INT,-- 把部門名稱改為部門ID
-- 聲明一個外鍵約束
CONSTRAINT employee_dept_fk FOREIGN KEY(Deptid) REFERENCES t_dept(Did)
-- 外鍵名稱 外鍵 參考表(參考字段)
)
交叉連接查詢:不管三七二十一,查什么字段,需要什么表都給我寫上,效率不高,會有笛卡爾積的產(chǎn)生,運氣好會碰到數(shù)據(jù)重復(fù)。
SELECT Ename, Dname FROM t_employee, t_dept;
內(nèi)連接查詢:寫清楚那些表的字段存在關(guān)系,然后用等號 連起來,使用很平凡啊
SELECT Ename, Dname FROM t_employee, t_dept WHERE t_employee.Deptid = t_dept.Did;
內(nèi)連接還可以這樣寫
SELECT Ename, Dname FROM t_employee INNER JOIN t_dept ON t_employee.Deptid = t_dept.Did
有內(nèi)連接我們也很容易想到有外連接,所以接下來看下外連接
左[外]連接查詢:使用左邊表的數(shù)據(jù)去匹配右邊表的數(shù)據(jù),如果符合連接條件的結(jié)果則顯示,如果不符合連接條件則顯示null
SELECT d.DeptName, e.EName FROM t_dept d LEFT OUTER JOIN t_employee e ON d.Did = e.DeptId
右[外]連接查詢: 使用右邊表的數(shù)據(jù)去匹配左邊表的數(shù)據(jù),如果符合連接條件的結(jié)果則顯示,如果不符合連接條件則顯示null
SELECT d.DeptName, e.EName FROM t_dept d RIGHT OUTER JOIN t_employee e ON d.Did = e.DeptId
聯(lián)系客服