7.MySQL入門

1. 數據庫操作

#創(chuàng)建數據庫
CREAT DATABASE IF NOT EXISTS db_name DEFAULT CHARACTER SET charset_name
#查看數據庫
SHOW DATABASE LIKE 'pattern' | WHERE expr
#修改數據庫
ALTER DATABASE db_name DEFAULT CHARACTER SET charset_name
#刪除數據庫
DROP DATABASE IF EXISTS db_name
#使用數據庫
USE db_name

2. MySQL 管理

端口號:3306
超級用戶名:root
連接:mysql -u root -p
關閉:cd /usr/bin 然後 ./mysqladmin -u root -p shutdown
檢查MySQL服務器是否啟動:ps -ef | grep mysqld
啟動mysql服務器cd /usr/bin 然後 ./mysqld_safe &

用戶管理

#新增用戶
INSERT INTO user (host, user, password, select_priv, insert_priv, update_priv) VALUES ('localhost', 'guest', PASSWORD('guest123'), 'Y', 'Y', 'Y');
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON TUTORIALS.* TO 'zara'@'localhost' IDENTIFIED BY 'zara123';

#刷新
FLUSH PRIVILEGES;
#查看用戶
SELECT host, user, password FROM user WHERE user = 'guest';
#權限列表
Select_priv、Insert_priv帆竹、Update_priv、Delete_priv青扔、Create_priv、Drop_priv、Reload_priv微猖、Shutdown_priv谈息、
Process_priv、File_priv凛剥、Grant_priv侠仇、References_priv、Index_priv犁珠、Alter_priv

數據表操作

創(chuàng)建數據表

#創(chuàng)建數據表
CREAT TABLE IF NOT EXISTS table_name(column_name data_type,...);
#同時插入數據
CREATE TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] select_statement

查看數據表

#查看數據表
SHOW TABLES [FROM db_name]
#查看數據表結構
SHOW COLUMNS FROM tbl_name
#查看數據表索引
SHOW INDEX FROM tbl_name
#查看Mysql的性能及統(tǒng)計信息
SHOW TABLE STATUS LIKE [FROM db_name] [LIKE 'pattern'] \G:

插入記錄

#插入記錄
INSERT INTO tbl_name [(col_name),...] VALUES(val,...) #普通插入

INSERT [INTO] tbl_name SET col_name={expr | DEFAULT},... #可使用子查詢

INSERT [INTO] tbl_name [(col_name)] SELECT ... #將查詢結果插入到指定表

更新記錄

#更新記錄
UPDATE [LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT}[,clo_name2={expr2|DEFAULT}]...[WHERE where_condition] #單表更新

UPDATE table_references SET col_name1={expr1|DEFAULT}[,col_name2={expr2|DEFAULT}]...[WHERE where_condition] #多表更新

刪除記錄

#刪除記錄
DELETE FROM tbl_name [WHERE where_condition] #單表刪除
 
DELETE tbl_name[.*][,tbl_name[.*]]... FROM table_references [WHERE where_condition] #多表刪除

查找記錄

#查詢表達式
SELECT id [AS] alias_name

#條件表達式
SELECT id [AS] alias_name [WHERE where_condition]

#LIKE子句
SELECT id [AS] alias_name WHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'

#結果分組, 分組條件
SELECT id [AS] alias_name [GROUP BY {col_name|position} [ASC|DESC],...]  [HAVING where_condition]

#UNION 操作符
SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions]
UNION [ALL | DISTINCT]
SELECT expression1, expression2, ... expression_n FROM tables [WHERE conditions];

#結果排序
SELECT id [AS] alias_name [ORDER BY {col_name | expr | position} [ASC | DESC],...]
#限制結果返回數量
SELECT id [AS] alias_name [LIMIT {[offset,] row_count | row_count OFFSET offset}]

子查詢

#語法
SELECT * FROM tb_name WHERE col_name =(SELECT col_name2 FROM tb_name2)
#內層-可包含多個關鍵字或條件
DISTINC逻炊、GROUP BY、ORDER BY盲憎、LIMIT嗅骄、函數等
#內層-可使用比較運算符
=胳挎、>饼疙、<、>=慕爬、<=窑眯、<>、!=医窿、<=>
#外層
SELECT磅甩、INSERT、UPDATE姥卢、SET卷要、DO

#ANY、SOME独榴、ALL僧叉、[NOT] IN、[NOT] EXISTS
operand comparison_operator ANY(subquery)
operand comparison_operator SOME(subquery)
operand comparison_operator ALL(subquery)
operand comparison_operator [NOT] IN(subquery)
operand comparison_operator [NOT] EXISTS(subquery)

連接

#語法
table_reference {[INNER | CROSS] JOIN | {LEFT|RIGHT} [OUTER] JOIN} table_reference ON conditional_expr
tbl_name [[AS] alias] | table_subquery [AS] alias


#內連接
INNER JOIN棺榔、JOIN瓶堕、CROSS JOIN #顯示左表及右表符合連接條件的記錄
#左外連接
LEFT [OUTER] JOIN #顯示左表全部記錄及右表符合連接條件的記錄
#右外連接
RIGHT [OUTER] JOIN #顯示右表全部記錄及左表符合連接條件的記錄
#自身連接
同一個數據表對其自身進行連接

約束使用

#自動編號
AUTO_INCREMENT
#空值與非空
NULL,NOT NULL
#主鍵約束
PRIMARY KEY
#唯一約束
UNIQUE KEY
#默認值
DEFAULT
#外鍵約束
FOREIGN KEY : CASCADE,SET NULL,RESTRICT,NO ACTION
#表級約束
#列級約束

存儲引擎

#配置文件
default-storage-engine=INNODB

#創(chuàng)建時指定引擎
CREATE TABLE tbl_name(...) ENGINE=engine;
#修改存儲引擎
ALTER TABLE tal

#MyISAM、InnoDB症歇、Memory郎笆、CSV、Archive類型
MyISAM #256TB忘晤、支持索引宛蚓、表級鎖定、數據壓縮
InnoDB #64TB设塔、支持事務和索引苍息、鎖顆粒為行鎖

共享鎖(讀鎖)
同一時間段時,多個用戶可以讀取同一資源,讀取過程中數據不會發(fā)生任何變化
排他鎖(寫鎖)
在任何時間只能有一個用戶寫入資源,當進行寫鎖時會阻塞其他的讀鎖或寫鎖操作

修改數據表

#添加單列
ALTER TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name]

#添加多列
ALTER TABLE tbl_name ADD[COLUMN] (col_name column_definition,...)

#刪除列
ALTER TABLE tbl_name DROP [COLUMN] col_name

#修改列定義
ALTER TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST|AFTER col_name]

#修改列名稱
ALTER TABLE tbl_name CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]

#添加主鍵約束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type](index_col_name,...)

#添加唯一約束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY][index_name] [index_type] (index_col_name,...)

#添加外鍵約束
ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) reference_definition

#添加/刪除默認約束
ALTER TABLE tbl_name ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}

#刪除主鍵約束
ALTER TABLE tbl_name DROP PRIMARY KEY

#刪除唯一約束
ALTER TABLE tbl_name DROP {INDEX|KEY} index_name

#刪除外鍵約束
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol

#數據表更名

ALTER TABLE tbl_name RENAME [TO|AS] new_tbl_name

RENAME TABLE tbl_name TO new_tbl_name [,tbl_name2 TO new_tbl_name2]...

臨時表

函數

內置函數-字符函數


CONCAT() #字符連接

CONCAT_WS() #使用指定的分隔符連接

FORMAT() #數字格式化

LOWER() #轉換成小寫字母

UPPER() #轉換成大寫字母

LEFT() #獲取左側字符

RIGHT() #獲取名側字符

LENGHT() #獲取字符串長度

LTRIM() #刪除前導空格

RTRIM() #刪除后續(xù)空格

TRIM() #刪除前導

SUBSTRIANG() #字符串截取

[NOT] LIKE #模糊匹配

REPLACE() #字符串替換

內置函數-數值運算符與函數

CEIL() #進一取整

FLOOR() #舍一取整

DIV() #整數除法

MOD() #取余數(取模)

POWER() #冪運算

ROUND() #四舍五入

TRUNCATE() #數字截取

內置函數-比較運算符與函數

[NOT] BETWEEN ... AND ... #[不]在范圍內

[NOT] IN() #[不]在列出值范圍內

IS [NOT] NULL #[不]為空

內置函數-日期時間函數

NOW() #當前日期和時間

CURDATE() #當前日期

CURTIME() #當前時間

DATE_ADD() #日期變化

DATEDIFF() #日期差值

DATE_FORMAT() #日期格式化

內置函數-信息函數

CONNECTION_ID() #連接ID

DATEBASE() #當前數據庫

LAST_INSERT_ID() #最后播放

USER() #當前用戶

VERSION() #版本信息

內置函數-聚合函數

AVG() #平均值

COUNT() #計數

MAX() #最大值

MIN() #最小值

SUM() #求和

內置函數-加密函數

MD5() #信息摘要算法

PASSWORD() #密碼算法

自定義函數

創(chuàng)建自定義函數

# 參數 : 0個或多個
# 返回值 : 只能有1個返回值
CREATE FUNCTION function_name(xxname VACHAR(32)) RETURNS {STRING | INTEGER | REAL | DECIMAL} routine_body

#復合結構
CREATE FUNCTION function_name(xxname VARCHAR(20))  RETURNS {STRING | INTEGER | REAL | DECIMAL} BEGIN routine_body END

# 刪除函數
DROP FUNCTION [IF EXISTS] function_name

存儲過程

流程
SQL命令->MySQL引擎->分析語法->可識別命令->執(zhí)行結果0>返回客服端
優(yōu)點
增加SQL功能和靈活性,實現較快的執(zhí)行速度,減少網絡流量

#創(chuàng)建存儲過程
CREATE [DEFINER={user | CURRENT_USER}] PROCEDURE sp_name ([proc_parameter[,...]])[characteristic ...] routine_body 
proc_parameter:[IN | OUT | INOUT ]param_name type #需要通過delimiter修改定界符

#修改存儲過程
ALTER PROCEDURE sp_name [characteristic ...] COMMENT 'string' | {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER }

#刪除存儲過程
DROP PROCEDURE [IF EXISTS] sp_name

#調用存儲過程
CALL sp_name([parameter[,...]])
CALL sp_name[()]

參數

IN #該參數必須在存儲過程時指定

OUT #該參數可被存儲過程改變,且可返回

INOUT #該參數調用時指定,且可被改變和返回

特性

COMMENT 'string' | {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | SQL SECURITY { DEFINER | INVOKER }

COMMENT #注釋

CONTAINS SQL #包含SQL語句,但不含讀或寫數據的語句

NO SQL #不包含SQL語句

READS SQL DATA #包含讀數據的語句

MODIFIES SQL DATA #包含寫數據的語句

SQL SECURITY { DEFINER | INVOKER } #指明誰有權限來執(zhí)行

存儲過程與自定義函數區(qū)別

  • 存儲過程實現的功能要復雜一些;函數針對性更強
  • 存儲過程可以返回多個值;函數只能有一個返回值
  • 存儲過程一般獨立來執(zhí)行;而函數可以作為其他SQL語句的組成部分出現

事務

控制語句

BEGIN或START TRANSACTION; #顯式地開啟一個事務

COMMIT 或 COMMIT WORK #提交事務,并使已對數據庫進行的所有修改成為永久性的竞思;

ROLLBACK 或 ROLLBACK WORK #回滾會結束用戶的事務表谊,并撤銷正在進行的所有未提交的修改

SAVEPOINT identifier #允許在事務中創(chuàng)建一個保存點,一個事務中可以有多個SAVEPOINT

RELEASE SAVEPOINT identifier #刪除一個事務的保存點盖喷,當沒有指定的保存點時爆办,執(zhí)行該語句會拋出一個異常

ROLLBACK TO identifier #把事務回滾到標記點

SET TRANSACTION #設置事務的隔離級別 : READ UNCOMMITTED,READ COMMITTED,REPEATABLE ,SERIALIZABLEREAD

事務處理

BEGIN  #開始一個事務

ROLLBACK  #事務回滾

COMMIT  #事務確認

SET AUTOCOMMIT=0 # 禁止自動提交

SET AUTOCOMMIT=1 # 開啟自動提交 
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市课梳,隨后出現的幾起案子距辆,更是在濱河造成了極大的恐慌,老刑警劉巖暮刃,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跨算,死亡現場離奇詭異,居然都是意外死亡椭懊,警方通過查閱死者的電腦和手機诸蚕,發(fā)現死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氧猬,“玉大人背犯,你說我怎么就攤上這事≈迅В” “怎么了漠魏?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長妄均。 經常有香客問我柱锹,道長,這世上最難降的妖魔是什么丰包? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任禁熏,我火速辦了婚禮,結果婚禮上烫沙,老公的妹妹穿的比我還像新娘匹层。我一直安慰自己,他們只是感情好锌蓄,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布升筏。 她就那樣靜靜地躺著,像睡著了一般瘸爽。 火紅的嫁衣襯著肌膚如雪您访。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天剪决,我揣著相機與錄音灵汪,去河邊找鬼檀训。 笑死,一個胖子當著我的面吹牛享言,可吹牛的內容都是我干的峻凫。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼览露,長吁一口氣:“原來是場噩夢啊……” “哼荧琼!你這毒婦竟也來了?” 一聲冷哼從身側響起差牛,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤命锄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后偏化,有當地人在樹林里發(fā)現了一具尸體脐恩,經...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年侦讨,在試婚紗的時候發(fā)現自己被綠了驶冒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡搭伤,死狀恐怖只怎,靈堂內的尸體忽然破棺而出袜瞬,到底是詐尸還是另有隱情怜俐,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布邓尤,位于F島的核電站拍鲤,受9級特大地震影響,放射性物質發(fā)生泄漏汞扎。R本人自食惡果不足惜季稳,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望澈魄。 院中可真熱鬧景鼠,春花似錦、人聲如沸痹扇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲫构。三九已至浓恶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間结笨,已是汗流浹背包晰。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工湿镀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人伐憾。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓勉痴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親树肃。 傳聞我的和親對象是個殘疾皇子蚀腿,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內容