mysql指令筆記

MySQL 技術 學習編程 2017-05-15


可複製保存到本地,供日後查詢

數據庫操作

-- 增

-- 創建數據庫

create database mydatabase charset utf8;

-- 創建關鍵字數據庫需用反引號

create database `database` charset utf8;

-- 創建中文數據庫(先告訴服務器當前中文的字符集)

set names gbk;

create database 中國 charset utf8;

-- 刪

-- 刪除數據庫

drop database 數據庫名字;

-- 改

-- 修改數據庫mydatabase的字符集

alter database mydatabase charset gbk;

-- 查

-- 查看所有數據庫

show databases;

-- 查看指定部分的數據庫:模糊查詢

show databases like 'pattern';

-- pattern是匹配模式

-- %:匹配多個字符

-- _: 匹配單個字符

-- 查看以abc_開始的數據庫:_需要被轉義

show databases like 'abc\_%';

-- 查看數據庫創建語句

show create database 數據庫名稱;

-- 進入數據庫環境

use 數據庫名字;

表操作

-- 增

-- 增加表(若當前為某一數據庫環境下,不用制定數據庫名)

create table [if not exists] 數據庫名.表名(

字段名字 數據類型 [not null] [unique] [default 默認值],

字段名字 數據類型 [primary key] [comment '註釋']

)[表選項]; -- if not exists: 如果表名不存在,就創建,否則不執行創建代碼(檢查功能)

-- unique: 不能重複

-- 表選項:控制表的表現

-- 字符集:charset/character set 具體字符集; 保證表中數據存儲的字符集

-- 校對集:collate 具體校對集;

-- 存儲引擎:engine 具體存儲引擎;(innodb 和 myisam)

-- primary key: 將該列設為主鍵, 主鍵不能為空

-- 複合主鍵: 在最後加 primary key(字段名, 字段名)

-- not null: 表示該字段不能為空

-- default 默認值:為該字段指定默認值

-- 外鍵:foreign key(本表字段名) references 外部表名(主鍵字段名) [on delete 模式 on update 模式]; 只有InnoDB存儲引擎支持

-- 指定模式:外鍵約束有三種約束模式:都是針對父表的約束

-- district: 嚴格模式(默認),父表不能刪除或者更新一個已經被字表引用的記錄

-- cascade:級聯模式,父表的操作,對應字表關聯的數據跟著被操作

-- set null:置空模式,父表的操作之後,子表對應的數據(外鍵字段)被置空

-- 自增長:id int auto_increment,

create table 表名 like 數據庫名:表名; -- 從已有表創建新表(複製表結構)

-- 刪

-- 刪除數據表

drop table 表名1, 表名2...;

-- 清空表,重置自增長

truncate 表名;

-- 改

-- 修改表名

rename table 舊錶名 to 新表名;

-- 修改表選項:字符集,校對集和存儲引擎

alter table 表名 表選項 [=] 值; --表選項同上;

-- 查

-- 查看所有表

show tables;

-- 查看部分表

show tables like 'pattern'; -- pattern同上

-- 查看錶創建語句

show create table 表名;

show create table 表名\g -- \g == ;

show create table 表名\G -- \G將查到的結構旋轉90度變成縱向

-- 查看錶結構:產看錶中的字段信息

desc 表名;

describe 表名;

show columns from 表名;

字段操作

-- 增

-- 新增字段

alter table 表名 add[column] 字段名 數據類型[列屬性][位置];

-- 位置:字段名可以存放表中的任意位置。

-- 第一個:first;

-- 在哪個字段之後:after 字段名;

-- 新增外鍵

alter table 表名 add [constraint 外鍵名] foreign key (外鍵字段) references 父表(主鍵字段);

-- 刪

-- 刪除字段

alter table 表名 drop 字段名;

-- 刪除外鍵

alter table 表名 drop foreign key 外鍵名;

-- 改

-- 修改字段

alter table 表名 modify 字段名 數據類型[屬性][位置];

-- 重命名字段

alter table 表名 change 舊字段名 新字段名 數據類型[屬性][位置];

-- 查

數據操作

-- 增

-- 插入數據

insert into 表名 values (值列表) [,(值列表)]; -- 給全表字段插入數據,不需要指定字段列表;

-- 要求數據的值出現的順序必須與表中設計的字段出現的順序一致

-- 凡是非數值數據,都需要使用引號包裹;

-- 可以一次性插入多條記錄

insert into 表名 (字段列表) values (值列表)[,(值列表)]; -- 給部分字段插入數據,需要選定字段列表:

-- 字段列表出現的順序與字段的順序無關;

-- 但是值列表的順序必須與選定的字段的順序一致

-- 主鍵衝突時更新數據

insert into 表名 [(字段列表:包含主鍵)] values (值列表) on duplicate key update 數據名 = 數據值;

-- 主鍵衝突時替換數據

replace into 表名 [(字段列表:包含主鍵)] values(值列表); -- 不衝突直接插入

-- 複製表數據

insert into 表名 [(字段列表)] select */字段列表 from 數據庫名:數據表名; -- 可以迅速讓表中的數據膨脹到一定數量級:測試表的壓力以及效率

-- 刪

-- 刪除數據

delete from 表名 [where 條件] [limit 數量];

-- 改

-- 修改數據

update 表名 set 字段 = 值 [where 條件] [limit 數量];

-- 查

-- 查看 指定字段/所有字段 [指定條件]的數據

select 字段列表/* from 表名 [where 條件];

-- 查詢數據完整語句

select [select選項] 字段列表[字段別名]/* from 數據源 [where子句] [group by子句] [having子句] [order by子句] [limit子句];

-- select選項: select對查出來的結果的處理方式

-- all: 默認的,保留所有的結果

-- distinct:查出來的結果將重複(所有字段都相同)的去除

-- 字段別名:當數據進行查詢的時候,有時候名字並不一定滿足需求

-- (多表查詢的時候,會有同名字段),需要對字段名進行重命名:即別名

-- 語法: 字段名 [as] 別名;

-- 數據源:數據的來源,關係型數據庫的來源都是數據表:本質上只要保證數據類似二維表,最終都可以作為數據源

-- 數據源分為多種:單表數據源,多表數據源,查詢語句

-- 單表數據源:select * from 表名;

-- 多表數據源:select * from 表名1,表名2...;

-- 從一張表中取出一條記錄,去另外一張表中匹配所有記錄,而且全部保留(記錄數和字段數),沒什麼用

-- 查詢語句:select * from (select語句) as 別名;

-- 子查詢,數據的來源是一條查詢語句(查詢語句的結果是二維表)

-- 連接查詢

-- 交叉連接:左表 cross join 右表; -- 等同於 from 左表,右表;

-- 內連接:左表 [inner] join 右表 on 左表.字段 = 右表.字段;

-- 從左表中取出每一條記錄,去右表中與所有記錄進行匹配,當左表.字段與右表.字段相等時保留結果

-- 外連接:左表 left/right join 右表 on 左表.字段 = 右表.字段;

-- 以其中一張表為主,取出裡面所有記錄,每條與另一張表進行連接。能匹配,正確保留,不能匹配,另一張表的字段都置空NULL。

-- 自然連接:左表 natural join 右表; -- 內連接

-- 左表 natural left/right join 右表; -- 外連接

-- 系統以字段名作為匹配模式,同名字段作為條件,連接之後合併同名字段,多個同名字段都作為條件

-- where字句: 用來判斷數據,篩選數據,返回0或1(對磁盤數據進行判斷,是否加載到內存)(條件可以使用子查詢)

-- 比較運算符:>, <, >=, <=, !=, <>, =, like, between A and B(A到B 閉區間), in, not in, =any, !=any, =some, !=some, =all, !=all

-- 邏輯運算符:&&(and), ||(or), !(not)

-- group by字句: 根據某個字段進行分組(相同的放一組,不同的分到不同的組)

-- 基本語句:group by 字段名1,字段名2... [asc/desc] [with rollup];

-- 分組是為了統計數據,mysql提供的一些統計函數(在查詢時放在字段列表中)

-- count(字段名):統計分組後的記錄數,每一組有多少記錄(*代表統計記錄,字段名代表統計對應的字段 NULL不統計)

-- max(字段名):統計每組中最大值

-- min(字段名):統計每組中最小值

-- avg(字段名):統計平均值

-- sum(字段名):統計和

-- group_concat(字段):對分組的結果中的某個字段進行字符串連接(保留改組所有的某個字段)

-- asc/desc: 對分組的結果進行排序 asc:升序(默認) desc:降序

-- with rollup: 回溯統計

-- having子句:與where字句一樣:進行條件判斷的(進入內存後的判斷)

-- 分組統計的結果或者說統計函數只有having能夠使用

-- having能夠使用字段別名

-- order by字句:排序,根據某個字段進行升降序排序,依賴校對集

-- 基本語法:order by 字段名1[asc/desc],字段名2[asc/desc]...;

-- limit子句: 一種限制結果的語句

-- 只用來限制長度(數量):limit 數量;

-- 限制起始位置和長度(可以實現數據的分頁):limit 起始位置,長度;

-- 聯合查詢:將多次查詢,在記錄上進行拼接(字段不會增加)

select語句1 union [union選項] select語句2...; -- 字段數必須嚴格一致

-- union選項:與select選項一樣有兩個,all和distinct(默認)

-- order by: 在聯合查詢中order by不能直接使用,需要對查詢語句使用括號才行。若要order by生效,必須搭配limit。

視圖操作

-- 增

-- 創建視圖

create [algorithm = 指定算法] view 視圖名 as select語句;

-- with check option: 在where語句後添加,表示不允許修改where語句中的字段

-- 視圖算法:分為三種(如果視圖的select語句中包含五子句,而且很有可能順序比外部的查詢語句靠後,就要使用臨時表算法了)

-- undefined:未定義(默認的),不是實際使用算法,讓系統自主選擇算法

-- temptable:臨時表算法,先執行視圖的select語句,後執行外部查詢語句

-- merge:合併算法,系統將視圖對應的select語句與外部查詢視圖的select語句進行合併,然後執行(效率高,系統經常選擇)

-- 刪

-- 刪除視圖

drop view 視圖名;

-- 改

-- 修改視圖本身的來源語句

alter view 視圖名 as 新select語句;

-- 查

-- 表的所有查看方式都使用於視圖

-- 將視圖當作表查詢即可

數據備份與還原

-- 單表數據備份(前提是外部文件不存在)

select */字段列表 into outfile 文件所在路徑 [fields 字段處理 lines 行處理] from 數據源;

-- fields 字段處理

-- enclosed by:字段使用什麼包裹,默認是''空字符串

-- teminated by: 字段以什麼結束,默認是'\t'tab鍵

-- escaped by:特殊符號用什麼方式處理,默認是'\\'使用反斜槓轉義

-- lines 行處理

-- starting by:每行以什麼開始,默認是''空字符串

-- teminated by:每行以什麼結束,默認是'\t\n'換行符

-- 單表數據還原(前提是表結構存在)

load data infile 文件所在路徑 into table 表名 [(字段列表)] fields 字段處理 lines 行處理; -- 處理方式與備份相同

-- SQL備份(備份的是sql語句,系統對錶結構以及數據進行處理,變成對應的sql語句,然後進行備份)(使用mysql提供的軟件:mysqldump.exe)

mysqldump.exe -hPup 數據庫名字 [數據表名字1,數據表名字2...] > 外部文件路徑

-- SQL還原

mysql.exe -hPup 數據庫名字 < 備份文件目錄 -- (使用mysq.exe客戶端還原)

source 文件所在路徑; -- sql指令還原,數據庫默認當前數據庫

-- 增量備份

事務安全操作(免費的引擎只有InnoDB存儲引擎支持)

-- 開啟事務

start transaction;

-- 關閉事務

commit; -- 提交事務:同步數據表(操作成功)

rollback; -- 回滾事務:清空日誌表(操作失敗)

-- 設置回滾點

savepoint 回滾點名字;

-- 回到回滾點

rollback to 回滾點名字;

存儲過程操作

-- 創建過程

create procedure 過程名字([參數列表])

begin

過程體

end

-- 刪除過程

drop procedure 過程名;

-- 查看所有過程

show procedure status [like 'pattern'];

-- 查看過程創建語句

show create procedure 過程名;

-- 調用過程

call 過程名();

觸發器

-- 創建觸發器

delimiter 自定義結束符;

create trigger 觸發器名 觸發時間 事件類型 on 表名 for each row

begin

指令

end

自定義結束符

delimiter ;

-- 查看所有觸發器

show triggers [like 'pattern'];

-- 查看觸發器創建語句

show create trigger 觸發器名字;

-- 刪除觸發器

drop trigger 觸發器名;

相關推薦

推薦中...