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

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

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

數(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ù)庫的所有表 : SHOW TABLES;
  • 查看建表語句:SHOW CREATE TABLE TABLE_NAME;
  • 查看表結(jié)構(gòu) : DESC TABLE_NAME;
修改表
  1. 增加一列:ALTER TABLE TABLE_NAME ADD 列名 類型
  2. 修改一列:ALTER TABLE TABLE_NAME MODIFY 列名 新類型
  3. 修改表的字符集: ALTER TABLE TABLE_NAME CHARACTER SET UTF8
  4. 修改表名:ALTER TABLE 舊的表名 TO 新的表名
  5. 修改列名:ALTER TABLE TABLE_NAME CHANGE 舊的列名 新的列名 新的類型
  6. 刪除表: DROP TABLE TABLE_NAME;

操作表記錄

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

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

  • UPDATE

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

  • DELETE
    DELETE FROM TABLE_NAME [WHERE 子句]

如果不使用where子句,將刪除表中所有數(shù)據(jù)。
Delete語句不能刪除某一列的值(可使用update)
使用delete語句僅刪除記錄,不刪除表本身。如要刪除表,使用drop table語句。
同insert和update一樣,從一個表中刪除記錄將引起其它表的參照完整性問題,在修改數(shù)據(jù)庫數(shù)據(jù)時,頭腦中應(yīng)該始終不要忘記這個潛在的問題。
外鍵約束
刪除表中數(shù)據(jù)也可使用TRUNCATE TABLE 語句,它和delete有所不同,參看mysql文檔。

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

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

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

  • 查詢數(shù)學(xué)成績在70~90的所有學(xué)生姓名:SELECT NAME FROM STUDENT WHERE MATH BETWEEN 70 AND 90;

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

  • 查詢學(xué)生語文成績?yōu)?0、70、80的學(xué)生:SELECT * FROM STUDENG WHERE CHINESE IN (60,70,80);

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

id int primary key auto_increment,

name varchar(40) unique,

product varchar(40),

price double);
GROUP BY(分組查詢)
  • 對訂單中的商品歸類后,查詢每個商品類的總價:SELECT PRODUCT,SUM(PRICE) FROM ORDERS GROUP BY PRODUCT;
  • 查詢購買了幾類產(chǎn)品,每類產(chǎn)品的總價不大于20的產(chǎn)品:SELECT PRODUCT FROM ORDERS GROUP BY PRODUCT HAVING SUM(PRICE)<20;

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

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

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

SQL語句書寫順序:

SELECT FROM WHERE GROUP BY HAVING ORDER BY

SQL語句執(zhí)行順序

FROM WHERE SELECT GROUP BY HAVING ORDER BY

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

備份: 在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ù)庫沒法恢復(fù),需要先自己創(chuàng)建出數(shù)據(jù)后才能進(jìn)行恢復(fù).

多表設(shè)計多表查詢

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

id int primary key auto_increment,

name varchar(20)

);

insert into dept values(null,'財務(wù)部'),(null,'人事部'),(null,'銷售部'),(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.多表查詢

笛卡爾積查詢:

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

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

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

外連接查詢:

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

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

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)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評論 6 538
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,067評論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 177,467評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,184評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,582評論 1 325
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,794評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,343評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,096評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,291評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,513評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,026評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,253評論 2 375

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

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