MySql數(shù)據(jù)庫(kù)基本語(yǔ)法

數(shù)據(jù)庫(kù)操作

  1. cmd命令進(jìn)入數(shù)據(jù)庫(kù) MySQL-u root -p
  2. 創(chuàng)建數(shù)據(jù)庫(kù) Create database [if not exists] database_name character set utf8|gbk
  3. collate 表示校隊(duì)規(guī)則 utf8_bin 區(qū)分字母的大小寫(xiě) uft-8_general_ci 表示不區(qū)分字母的大小寫(xiě)
  4. 查看數(shù)據(jù)庫(kù) SHOW DATABASES;
  5. 查看數(shù)據(jù)庫(kù)的創(chuàng)建語(yǔ)句 SHOW CREATE DATABASE 數(shù)據(jù)庫(kù)名字
  6. 修改數(shù)據(jù)庫(kù)編碼:ALTER DATABASE DB_NAME CHARACTER SET UTF8
  7. 刪除數(shù)據(jù)庫(kù): DROP DATABASE [IF EXISTES] DB_NAME;
  8. 選擇進(jìn)去特定數(shù)據(jù)庫(kù):USE DB_NAME;
  9. 如何在cmd窗口進(jìn)行包含漢語(yǔ)的查詢(xún)和插入:set character_set_cilent=gbk;set character_set_results=gbk;因?yàn)閏md窗口只識(shí)別gbk編碼的漢字馋贤,所以設(shè)置之后不影響數(shù)據(jù)庫(kù)的編碼斟或,只是方便查看而已梦碗。

數(shù)據(jù)表操作

創(chuàng)建表 :

( ID INT PRIMARY KEY AUTO_INCREMENT,

  NAME VARCHAR(40) UNIQUE,

  MATH DOUBLE,

  ENGLISH DOUBLE,

  CHINESE DOUBLE
                      
 )[CHCARACTER SET UTF8]; 

  • 查看當(dāng)前數(shù)據(jù)庫(kù)的所有表 : SHOW TABLES;
  • 查看建表語(yǔ)句:SHOW CREATE TABLE TABLE_NAME;
  • 查看表結(jié)構(gòu) : DESC TABLE_NAME;
修改表
  1. 增加一列:ALTER TABLE TABLE_NAME ADD 列名 類(lèi)型
  2. 修改一列:ALTER TABLE TABLE_NAME MODIFY 列名 新類(lèi)型
  3. 修改表的字符集: ALTER TABLE TABLE_NAME CHARACTER SET UTF8
  4. 修改表名:ALTER TABLE 舊的表名 TO 新的表名
  5. 修改列名:ALTER TABLE TABLE_NAME CHANGE 舊的列名 新的列名 新的類(lèi)型
  6. 刪除表: DROP TABLE TABLE_NAME;

操作表記錄

  • INSERT
    INSERT INTO TABLE_NAME [(column,[column,...])] VALUES (VALUE,[VALUE...]);

插入的數(shù)據(jù)應(yīng)與字段的數(shù)據(jù)類(lèi)型相同。
數(shù)據(jù)的大小應(yīng)在列的規(guī)定范圍內(nèi),例如:不能將一個(gè)長(zhǎng)度為80的字符串加入到長(zhǎng)度為40的列中。
在values中列出的數(shù)據(jù)位置必須與被加入的列的排列位置相對(duì)應(yīng)。
字符和日期型數(shù)據(jù)應(yīng)包含在單引號(hào)中。
插入空值:不指定或insert into table value(null)
如果要插入所有字段可以省寫(xiě)列列表递鹉,直接按表中字段順序?qū)懼盗斜?/p>

  • UPDATE

UPDATE語(yǔ)法可以用新值更新原有表行中的各列。
SET子句指示要修改哪些列和要給予哪些值藏斩。
WHERE子句指定應(yīng)更新哪些行躏结。如沒(méi)有WHERE子句,則更新所有的行

  • DELETE
    DELETE FROM TABLE_NAME [WHERE 子句]

如果不使用where子句狰域,將刪除表中所有數(shù)據(jù)媳拴。
Delete語(yǔ)句不能刪除某一列的值(可使用update)
使用delete語(yǔ)句僅刪除記錄,不刪除表本身兆览。如要?jiǎng)h除表禀挫,使用drop table語(yǔ)句。
同insert和update一樣拓颓,從一個(gè)表中刪除記錄將引起其它表的參照完整性問(wèn)題语婴,在修改數(shù)據(jù)庫(kù)數(shù)據(jù)時(shí),頭腦中應(yīng)該始終不要忘記這個(gè)潛在的問(wèn)題驶睦。
外鍵約束
刪除表中數(shù)據(jù)也可使用TRUNCATE TABLE 語(yǔ)句砰左,它和delete有所不同,參看mysql文檔场航。

  • QUERY
  1. 基本查詢(xún):
    SELECT [DISTINCT] FROM TABLE_NAME [WHERE 子句]
  • 查詢(xún)學(xué)生表中的所有數(shù)據(jù) :SELECT * FROM STUDENT;
  • 查詢(xún)學(xué)生表中所有學(xué)生的name和math:SELECT NAME,MATH FROM STUDENT;
  • 使用別名查詢(xún):SELECT NAME [AS] 姓名缠导,ENGLISH+MATH+CHINESE [AS] 總成績(jī) FROM STUDENG;
  1. 使用where子句過(guò)濾查詢(xún)(操作符+ - > < % _ between and or in ):
  • 查詢(xún)姓名為lu的學(xué)生的語(yǔ)文成績(jī):SELECT CHINESE FROM STUDENT WHERE NAME='lu';

  • 查詢(xún)總分大于200分的學(xué)生姓名:SELECT NAME FROM STUDENT WHERE CHINESE+MATH+ENGLISH>200;

  • 查詢(xún)姓張的學(xué)生的姓名:SELECT NAME FROM STUDENT WHERE NAME LIKE '張%'|'張_';

  • 查詢(xún)數(shù)學(xué)成績(jī)?cè)?0~90的所有學(xué)生姓名:SELECT NAME FROM STUDENT WHERE MATH BETWEEN 70 AND 90;

  • 查詢(xún)英語(yǔ)成績(jī)大于80,數(shù)學(xué)成績(jī)大于90的學(xué)生: SELECT * FROM STUDENT WHERE MATH>80 AND ENGLISH>90;

  • 查詢(xún)學(xué)生語(yǔ)文成績(jī)?yōu)?0溉痢、70僻造、80的學(xué)生:SELECT * FROM STUDENG WHERE CHINESE IN (60,70孩饼,80);

  1. 使用ORDER BY 關(guān)鍵字對(duì)查詢(xún)結(jié)果排序(DESC 降序排列 ASC升序排列(默認(rèn)排列形式))
  • 查詢(xún)學(xué)生的總成績(jī)按降序排列: SELECT NAME AS 名字髓削,MATH+ENGLISH+CHINESE AS 總成績(jī) FROM ATUDENG WHERE ORDER BY 總成績(jī) DESC;
  • 對(duì)姓張的學(xué)生成績(jī)排序輸出: SELECT NAME AS 名字,MATH+ENGLISH+CHINESE AS 總成績(jī) FROM STUDENG WHERE NAME LIKE '張%' ORDER BY 總成績(jī) DESC;
  1. 聚合函數(shù)-用來(lái)將查詢(xún)結(jié)果包裹起來(lái)計(jì)算(SUM(求和)镀娶、COUNT(數(shù)據(jù)個(gè)數(shù))立膛、 AVG(平均數(shù))、MAX(最大值)、MIN(最小值))
  • SUM 用來(lái)將查詢(xún)結(jié)果的列進(jìn)行求和計(jì)算:
    統(tǒng)計(jì)一個(gè)班各科成績(jī)的總成績(jī):SELECT SUM(MATH),SUM(CHINESE),SUM(ENGLISH) FROM STUDENT;
  • COUNT 用來(lái)統(tǒng)計(jì)查詢(xún)結(jié)果的個(gè)數(shù):
    統(tǒng)計(jì)一個(gè)班數(shù)學(xué)成績(jī)大于70的人數(shù):SELECT COUNT(*) FROM STUDENT WHERE MATH>70;
  • AVG 用來(lái)計(jì)算查詢(xún)結(jié)果的列數(shù)據(jù)的平均值:
    求出整個(gè)班數(shù)學(xué)成績(jī)平均值:SELECT AVG(MATH) FROM STUDENT;
  • MAX 用來(lái)計(jì)算查詢(xún)結(jié)果列數(shù)據(jù)中的最大值:
    求出整個(gè)班數(shù)學(xué)成績(jī)的最大值:SELECT MAX(MATH) FROM STUDENT;
  • MIN 用來(lái)計(jì)算查詢(xún)結(jié)果列數(shù)據(jù)的最小值:
    求出整個(gè)班數(shù)學(xué)成績(jī)的最小值:SELECT MIN(MATH) FROM STUDENT;
如果數(shù)據(jù)有null值宝泵,則會(huì)造成聚合失敗好啰,因?yàn)閚ull值無(wú)法進(jìn)行計(jì)算,所以在查詢(xún)時(shí)需要添加判空:SELECT AVG(IFNULL(MATH,0)) FROM STUDENG;切記IFNULL 之間沒(méi)有空格儿奶。
分組查詢(xún)(字段和數(shù)據(jù)表名字不能使用sql語(yǔ)句的關(guān)鍵字)
create table orders(

id int primary key auto_increment,

name varchar(40) unique,

product varchar(40),

price double);
GROUP BY(分組查詢(xún))
  • 對(duì)訂單中的商品歸類(lèi)后框往,查詢(xún)每個(gè)商品類(lèi)的總價(jià):SELECT PRODUCT,SUM(PRICE) FROM ORDERS GROUP BY PRODUCT;
  • 查詢(xún)購(gòu)買(mǎi)了幾類(lèi)產(chǎn)品,每類(lèi)產(chǎn)品的總價(jià)不大于20的產(chǎn)品:SELECT PRODUCT FROM ORDERS GROUP BY PRODUCT HAVING SUM(PRICE)<20;

where子句和having子句的區(qū)別:

where子句在分組之前進(jìn)行過(guò)濾having子句在分組之后進(jìn)行過(guò)濾
having子句中可以使用聚合函數(shù),where子句中不能使用
很多情況下使用where子句的地方可以使用having子句進(jìn)行替代

  • 查詢(xún)單價(jià)小于20而總價(jià)大于30的商品的名稱(chēng) :SELECT PRODUCT FROM ORDERS WHERE PRICE<20 GROUP BY PRODUCT HAVING SUM(PRICE)>30

SQL語(yǔ)句書(shū)寫(xiě)順序:

SELECT FROM WHERE GROUP BY HAVING ORDER BY

SQL語(yǔ)句執(zhí)行順序

FROM WHERE SELECT GROUP BY HAVING ORDER BY

備份恢復(fù)數(shù)據(jù)庫(kù)

備份: 在cmd窗口下 mysqldump -u root -p dbName>c:/1.sql
恢復(fù): 方式1:在cmd窗口下 mysql -u root -p dbName<c:/1.sql
方式2:在mysql命令下, source c:/1.sql
要注意恢復(fù)數(shù)據(jù)只能恢復(fù)數(shù)據(jù)本身,數(shù)據(jù)庫(kù)沒(méi)法恢復(fù),需要先自己創(chuàng)建出數(shù)據(jù)后才能進(jìn)行恢復(fù).

多表設(shè)計(jì)多表查詢(xún)

  1. 外鍵約束:在進(jìn)行多表設(shè)計(jì)時(shí)闯捎,為了保證表與表之間的約束關(guān)系椰弊,引出了外鍵約束來(lái)進(jìn)行關(guān)聯(lián):
  2. 創(chuàng)建兩個(gè)表,部門(mén)表和員工表隙券,員工表的dept_id作為關(guān)聯(lián)部門(mén)表的外鍵
create table dept(

id int primary key auto_increment,

name varchar(20)

);

insert into dept values(null,'財(cái)務(wù)部'),(null,'人事部'),(null,'銷(xiāo)售部'),(null,'行政部');

create table emp(

id int primary key auto_increment,

name varchar(20),

dept_id int,

foreign key(dept_id) references dept(id)

);

insert into emp values(null,'奧巴馬',1),(null,'詹姆斯',2),(null,'本拉登',3),(null,'科比',3);

3.多表查詢(xún)

笛卡爾積查詢(xún):

將兩張表的記錄進(jìn)行一個(gè)相乘的操作查詢(xún)出來(lái)的結(jié)果就是笛卡爾積查詢(xún),如果左表有n條記錄,右表有m條記錄,笛卡爾積查詢(xún)出有n*m條記錄,其中往往包含了很多錯(cuò)誤的數(shù)據(jù),所以這種查詢(xún)方式并不常用
select * from dept,emp;

內(nèi)連接查詢(xún):查詢(xún)的是左邊表和右邊表都能找到對(duì)應(yīng)記錄的記錄

select * from dept,emp where dept.id = emp.dept_id;
select * from dept inner join emp on dept.id=emp.dept_id;

外連接查詢(xún):

左外連接查詢(xún):在內(nèi)連接的基礎(chǔ)上增加左邊表有而右邊表沒(méi)有的記錄
select * from dept left join emp on dept.id=emp.dept_id;

右外連接查詢(xún):在內(nèi)連接的基礎(chǔ)上增加右邊表有而左邊表沒(méi)有的記錄
select * from dept right join emp on dept.id=emp.dept_id;
全外連接查詢(xún):在內(nèi)連接的基礎(chǔ)上增加左邊表有而右邊表沒(méi)有的記錄和右邊表有而左表表沒(méi)有的記錄

select * from dept full join emp on dept.id=emp.dept_id; -- mysql不支持全外連接

可以使用union關(guān)鍵字模擬全外連接:

select * from dept left join emp on dept.id = emp.dept_id
union
select * from dept right join emp on dept.id = emp.dept_id;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市闹司,隨后出現(xiàn)的幾起案子娱仔,更是在濱河造成了極大的恐慌,老刑警劉巖游桩,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牲迫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡借卧,警方通過(guò)查閱死者的電腦和手機(jī)盹憎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)铐刘,“玉大人陪每,你說(shuō)我怎么就攤上這事×常” “怎么了檩禾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)疤祭。 經(jīng)常有香客問(wèn)我盼产,道長(zhǎng),這世上最難降的妖魔是什么勺馆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任戏售,我火速辦了婚禮,結(jié)果婚禮上草穆,老公的妹妹穿的比我還像新娘灌灾。我一直安慰自己,他們只是感情好悲柱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布紧卒。 她就那樣靜靜地躺著,像睡著了一般诗祸。 火紅的嫁衣襯著肌膚如雪跑芳。 梳的紋絲不亂的頭發(fā)上轴总,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音博个,去河邊找鬼怀樟。 笑死,一個(gè)胖子當(dāng)著我的面吹牛盆佣,可吹牛的內(nèi)容都是我干的往堡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼共耍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼虑灰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起痹兜,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤穆咐,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后字旭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體对湃,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年遗淳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拍柒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屈暗,死狀恐怖拆讯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情养叛,我是刑警寧澤往果,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站一铅,受9級(jí)特大地震影響陕贮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜潘飘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一肮之、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧卜录,春花似錦戈擒、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春柑土,著一層夾襖步出監(jiān)牢的瞬間蜀肘,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工稽屏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扮宠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓狐榔,卻偏偏與公主長(zhǎng)得像坛增,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子薄腻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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

  • 5.多表查詢(xún) 多表查詢(xún) 目的:從多張表獲取數(shù)據(jù) 前提:進(jìn)行連接的多張表中有共同的列 等連接 通過(guò)兩個(gè)表具有相同意義...
    喬震閱讀 1,238評(píng)論 0 0
  • 1.簡(jiǎn)介 數(shù)據(jù)存儲(chǔ)有哪些方式收捣?電子表格,紙質(zhì)文件庵楷,數(shù)據(jù)庫(kù)罢艾。 那么究竟什么是關(guān)系型數(shù)據(jù)庫(kù)? 目前對(duì)數(shù)據(jù)庫(kù)的分類(lèi)主要是...
    喬震閱讀 1,723評(píng)論 0 2
  • 1. 問(wèn)題的提出## 在應(yīng)用系統(tǒng)開(kāi)發(fā)初期嫁乘,由于開(kāi)發(fā)數(shù)據(jù)庫(kù)數(shù)據(jù)比較少昆婿,對(duì)于查詢(xún)SQL語(yǔ)句球碉,復(fù)雜視圖的的編寫(xiě)等體會(huì)不出...
    七寸知架構(gòu)閱讀 5,373評(píng)論 1 111
  • 1.操作數(shù)據(jù)庫(kù) (1)創(chuàng)建數(shù)據(jù)庫(kù) CREATE DATABASE [IF NOT EXISTS] db_name ...
    newdolphintime閱讀 773評(píng)論 0 1
  • mysql數(shù)據(jù)庫(kù)中 :database : 文件夾table : 數(shù)據(jù)表(數(shù)據(jù)文件) 進(jìn)入mysqlmysql -...
    賦閑閱讀 566評(píng)論 0 0