@[MySql資料庫整理
資料庫
概念:存儲資料的倉庫,其本質就是一個檔案系統,用來存儲檔案用的。使用者可以進行增,删,改,查;
資料庫管理系統:用于資料管理的大型軟體,它可以對資料庫進行建立、使用、維護等功能。使用者可通路資料庫表中資料。
1資料庫表:
1.1資料庫的基本組成機關;其中包括:表名,字段,記錄資料;
常見資料庫:MySql、Oracle、DB2等;常用資料庫:MySql和Oracle
1.2MySql資料庫常用語句分類:
DDL(資料定義語言):定義資料庫表、字段、列;關鍵字:create、alter、drop
DML(資料操作語言):對資料庫表進行增删改:insert delete update
DCL(資料控制語言):定義權限通路和通路級别,建立使用者
DQL(資料查詢):對數進行條件查詢:from、where、select
1.3DDL資料庫操作:database
建立一個資料庫:
create database 資料庫名;
create database 資料庫名 character set 字元集;
檢視資料庫:
檢視所有資料庫:show databases;
檢視某一個資料庫:show create database 資料庫名;
删除資料庫:
drop database 資料庫名稱;
使用資料庫
檢視正在使用的資料庫: select database();
切換資料庫: use 資料庫名;
建立表操作
建立一個表:create table 表名(
字段名 類型(長度),
字段名 類型(長度)
(其中可以指定主鍵,自增,不為空以及comment字段說明,參數類型,類型長度)
)
檢視表: show tables;
檢視表結構:desc 表名;
删除表: drop table 表名;
修改表結構:
alter table 表名 add 列名 類型(長度)[限制];
作用:修改表添加列
alter table 表名 modify 列名 類型(長度)限制;
作用:修改表修改列的類型長度及限制;
alter table 表名 change 舊清單 新清單 類型(長度)限制
作用:修改舊清單為新清單以及類型和限制
alter table 表名 drop 列名 ;
作用:修改表删除列
rename table 表名 to 新表名;
作用:修改表名
(了解)alter table 表名 character set 字元集;
作用:修改表的字元集
2、DML資料操作語言
2.1插入表記錄: insert
insert into 表 (字段1,字段2…)values(值1,值2…);
2.2更新表記錄:update
更新所有的指定字段:update 表名 set 字段名=值,字段名=值,…;
更行符合條件字段:update 表名 set 字段名=值,字段名=值,。。。where 條件;
2.3 删除記錄: detele
文法:delete from 表名 [where 條件];
3、DOS操作拘束亂碼解決
解決方式: 在cmd指令視窗輸入指令:set names gdk;(零時解決方案)
4、SQL限制
4.1主鍵限制
主鍵要求:不為null,必須唯一,每個表隻能由一個主鍵
添加主鍵限制:
方法一: 建立表示時在字段上聲明 primary key
方法二:在constraint限制區域,聲明主鍵:[constraint(可省略) 名稱] primary key (字段清單)
方法三:創表之後,通過修改表結構,聲明指定字段為主鍵:
格式:alter table persons ADD [constraint 名稱] primary key (字段清單)
删除主鍵限制 : alter table 表名 drop primary key ;
4.2自動增長列
自增長條件:必須為整型且自動增長列必須為主鍵
格式:字段名 資料類型 primary key Auto_increment;(預設自增長1)
delete from 表名 和 truncate table 表名;二者差別是: 前者逐條删除,不清空Auto_increment記錄數不删除; 後者直接将表删除,Auto_increment 将置為0,從新開始
4.3非空限制:not null 限制強制不接受NULL值強制字段包含值。
4.4唯一限制
添加主鍵的三種方式:
方式一:建立表時,在字段中直接聲明
方式二:建立表時,在限制區域聲明
方式三:建立表後,修改表結構,聲明字段唯一(alter table 表名 ADD [constraint 名稱] unique (字段名))
删除唯一限制:alter table 表名 drop index 名稱
資料庫密碼重置:使用cmd指令:use mysql; update user set password=password(‘新密碼’) where user=‘使用者名’
5、DQL(資料查詢)
5.1簡單條件查詢:
select * from 表名;(全表查詢所有字段)查詢慢
select 字段1,字段2… from 表名;(全表查詢對應字段資料)查詢快
select * from 表名 as 别名;給表起别名
select 字段名 as from 表名;表字段起别名
select distinct 字段名 from 表名;去掉重複值
select 字段名,字段名+int(整型值) from 表名;
5.2使用where條件語句查詢:
<<== != <> between … and …(含頭含尾) IS NULL 判斷是否為空
in在清單中的值 like 模糊查詢"%字段部分名%" “_a%”(%任意字元) _表示一個字元 or多條件同時成立 not 不成立
5.3排序查詢 select * from 表名 order by 排序字段 ASC(升序)|DESC(降序);
5.4聚合查詢
count(統計某一行的個數) sum(計算指定列的值總和) max(指定列最大值)
min(指定列的最小值) avg(指定列平均值)
5.5分組查詢
select 字段1,字段2,字段3…form 表名 group by 分組字段 having 分組條件;
having與where差別:
having在分組後進行過濾,where 在分組之前進行過濾
having後面可以使用聚合函數,where後面不可以使用聚合函數;
6、多表查詢
6.1表與表之間關系:一對多關系 多對多關系 一對一關系
6.2外鍵限制:
外鍵特點: 從表外鍵的值是對主表主鍵的引用; 從表外鍵類型,必須與主鍵類型一緻
目的:保證資料完整性
聲明外鍵限制:
alter table 從表 add [constraint 外鍵名稱] foreign key 從表名(從表字段名)reference 主表名(主表的主鍵);
[外鍵名稱] 用于删除外鍵限制的,一般建議"_fk"結尾
alter table 從表 drop foreign key 外鍵名稱;
7、多表查詢
- 1交叉連接配接查詢: select * from A,B;
-
2内連結查詢:
隐式内連接配接:select * from A,B where 條件;
顯示内連接配接查詢: select * from A inner join B on 條件;
7.3外連接配接查詢:
左外連接配接:left outer join
select * from A left outer join B on 條件;
右外連接配接:right outer join
select * from A right join B on 條件;
7.4子查詢:一條select語句結果作為另一個select語句的一部分(查詢條件,查詢結果等);
文法:select …查詢字段 …from … 表… where…查詢條件
8、MySql優化:
sql語句優化重點應該放在“防止全表掃描”上面,在確定“不會全表掃描”的前提下提高sql執行效率
建表的時候:
1,盡量不要給資料庫留null(varchar除外),盡可能使用not null填充資料庫,如果是數值類型設定預設值為0
2,備注,描述,評論可以設為null(varchar類型可以為null),因為varchar類型,值為null是不占用空間的
3,盡可能的使用 varchar/nvarchar 代替 char/nchar ,因為首先變長字段存儲空間小,可以節省存儲空間,其次對于查詢來說,在一個相對較小的字段内搜尋效率顯然要高些。
4,盡量使用數字型字段,若隻含數值資訊的字段盡量不要設計為字元型,這會降低查詢和連接配接的性能,并會增加存儲開銷。這是因為引擎在處理查詢和連接配接時會逐個比較字元串中每一個字元,而對于數字型而言隻需要比較一次就夠了。
5,在建立臨時表時,如果一次性插入資料量很大,那麼可以使用 select into 代替 createtable,避免造成大量 log ,以提高速度;如果資料量不大,為了緩和系統表的資源,應先create table,然後insert。
查詢語句:
6,盡量避免向用戶端傳回大資料量,若資料量過大,應該考慮相應需求是否合理。
7,任何地方都不要使用 select * from t ,用具體的字段清單代替“*”,不要傳回用不到的,任何字段。
8,不要在 where 子句中的“=”左邊進行函數、算術運算或其他表達式運算,否則系統将可能無法正确使用索引。
9,應盡量避免在 where 子句中使用 != 或 <> 操作符,否則将引擎放棄使用索引而進行全表掃描。就是說!=或者<>不再使用,由not代替:
where price != 800或者where price <> 800是錯誤的寫法,應該寫為 where not (price = 800)
10,應盡量避免在 where 子句中使用 or 來連接配接條件,如果一個字段有索引,一個字段沒有索引,将導緻引擎放棄使用索引而進行全表掃描
SELECT * FROM product WHERE pid=1 OR pname=‘海爾’
應該改為:
SELECT * FROM product WHERE pid=1
union all
SELECT * FROM product WHERE pname=‘海爾’
11,應盡量避免在 where 子句中對字段進行表達式操作,這将導緻引擎放棄使用索引而進行全表掃描。如:select id from t where num/2 = 100應改為:select id from t where num = 100*2
12,應盡量避免在where子句中對字段進行函數操作,這将導緻引擎放棄使用索引而進行全表掃描
13,in 要慎用,否則會導緻全表掃描
select id from t where num in(1,2,3)對于連續的數值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
14,很多時候用 exists 代替 in 是一個好的選擇:
select num from a where num in(select num from b)
用下面的語句替換:
select num from a where exists(select 1 from b where num=a.num)
15,模糊查詢%abc%會導緻全表掃描:select id from t where name like ‘%abc%’,若要提高效率,可以考慮全文檢索。
16,Update 語句,如果隻更改1、2個字段,不要Update全部字段,否則頻繁調用會引起明顯的性能消耗,同時帶來大量日志。
17,對于多張大資料量(這裡幾百條就算大了)的表JOIN,要先分頁再JOIN,否則邏輯讀會很高,性能很差。
18,select count(*) from table;這樣不帶任何條件的count會引起全表掃描,并且沒有任何,業務意義,是一定要杜絕的。
TOC](這裡寫自定義目錄标題)
歡迎使用Markdown編輯器
你好! 這是你第一次使用 Markdown編輯器 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,了解一下Markdown的基本文法知識。
新的改變
我們對Markdown編輯器進行了一些功能拓展與文法支援,除了标準的Markdown編輯器功能,我們增加了如下幾點新功能,幫助你用它寫部落格:
- 全新的界面設計 ,将會帶來全新的寫作體驗;
- 在創作中心設定你喜愛的代碼高亮樣式,Markdown 将代碼片顯示選擇的高亮樣式 進行展示;
- 增加了 圖檔拖拽 功能,你可以将本地的圖檔直接拖拽到編輯區域直接展示;
- 全新的 KaTeX數學公式 文法;
- 增加了支援甘特圖的mermaid文法1 功能;
- 增加了 多螢幕編輯 Markdown文章功能;
- 增加了 焦點寫作模式、預覽模式、簡潔寫作模式、左右區域同步滾輪設定 等功能,功能按鈕位于編輯區域與預覽區域中間;
- 增加了 檢查清單 功能。
功能快捷鍵
撤銷:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜體:Ctrl/Command + I
标題:Ctrl/Command + Shift + H
無序清單:Ctrl/Command + Shift + U
有序清單:Ctrl/Command + Shift + O
檢查清單:Ctrl/Command + Shift + C
插入代碼:Ctrl/Command + Shift + K
插傳入連結接:Ctrl/Command + Shift + L
插入圖檔:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替換:Ctrl/Command + G
合理的建立标題,有助于目錄的生成
直接輸入1次#,并按下space後,将生成1級标題。
輸入2次#,并按下space後,将生成2級标題。
以此類推,我們支援6級标題。有助于使用
TOC
文法後生成一個完美的目錄。
如何改變文本的樣式
強調文本 強調文本
加粗文本 加粗文本
标記文本
删除文本
引用文本
H2O is是液體。
210 運算結果是 1024.
插傳入連結接與圖檔
連結: link.
圖檔:

帶尺寸的圖檔:

居中的圖檔:
居中并且帶尺寸的圖檔:
當然,我們為了讓使用者更加便捷,我們增加了圖檔拖拽功能。
如何插入一段漂亮的代碼片
去部落格設定頁面,選擇一款你喜歡的代碼片高亮樣式,下面展示同樣高亮的
代碼片
.
// An highlighted block
var foo = 'bar';
生成一個适合你的清單
- 項目
- 項目
- 項目
- 項目
- 項目1
- 項目2
- 項目3
- 計劃任務
- 完成任務
建立一個表格
一個簡單的表格是這麼建立的:
項目 | Value |
---|---|
電腦 | $1600 |
手機 | $12 |
導管 | $1 |
設定内容居中、居左、居右
使用
:---------:
居中
使用
:----------
居左
使用
----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标點字元轉換為“智能”印刷标點HTML實體。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | | ‘Isn’t this fun?’ |
Quotes | | “Isn’t this fun?” |
Dashes | | – is en-dash, — is em-dash |
建立一個自定義清單
- Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何建立一個注腳
一個具有注腳的文本。2
注釋也是必不可少的
Markdown将文本轉換為 HTML。
KaTeX數學公式
您可以使用渲染LaTeX數學表達式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通過歐拉積分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多關于的資訊 LaTeX 數學表達式here.
新的甘特圖功能,豐富你的文章
- 關于 甘特圖 文法,參考 這兒,
UML 圖表
可以使用UML圖表進行渲染。 Mermaid. 例如下面産生的一個序列圖::
這将産生一個流程圖。:
- 關于 Mermaid 文法,參考 這兒,
FLowchart流程圖
我們依舊會支援flowchart的流程圖:
- 關于 Flowchart流程圖 文法,參考 這兒.
導出與導入
導出
如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當你完成了一篇文章的寫作, 在上方工具欄找到 文章導出 ,生成一個.md檔案或者.html檔案進行本地儲存。
導入
如果你想加載一篇你寫過的.md檔案,在上方工具欄可以選擇導入功能進行對應擴充名的檔案導入,
繼續你的創作。
- mermaid文法說明 ↩︎
- 注腳的解釋 ↩︎