去中心化mysql資料庫
『壹』 請問mysql怎麼自動備份資料庫
資料庫的自動備份,可以減輕維護者的工作量也便於系統恢復,對於比較重要的資料庫,最好還是設置下自動備份。
工具/原料
navicat for mysql
mysql 5.5
方法/步驟
打開navicat客戶端,連上mysql後,雙擊左邊你想要備份的資料庫。點擊「計劃」,再點擊「新建批處理作業」。
『貳』 大數據正在如何改變資料庫格局
大數據正在如何改變資料庫格局
提及「資料庫」,大多數人會想到擁有30多年風光歷史的RDBMS。然而,這可能很快就會發生改變。
一大批新的競爭者都在爭奪這一塊重要市場,他們的方法是多種多樣的,卻都有一個共同點:極其專注於大數據。推動新的數據迭代衍生品大部分都是基於底層大數據的3V特徵:數量,速度和種類。本質上來講,今天的數據比以往任何時候都要傳輸更快,體積更大, 同時更加多樣化。這是一個新的數據世界,換言之,傳統的關系資料庫管理系統並沒有真正為此而設計。「基本上,他們不能擴展到大量,或快速,或不同種類的數據。」一位數據分析、數據科學咨詢機構的總裁格雷戈里認為。這就是哈特漢克斯最近發現。截至到2013年左右,營銷服務機構使用不同的資料庫,包括Microsoft SQL Server和Oracle真正應用集群(RAC)的組合。「我們注意到,數據隨著時間的增長,我們的系統不能足夠快速的處理信息」一位科技發展公司的負責人肖恩說到。「如果你不斷地購買伺服器,你只能繼續走到這幺遠,我們希望確保自己有向外擴展的平台。」最小化中斷是一個重要的目標,Iannuzzi說到,因此「我們不能只是切換到Hadoop。」相反,卻選擇了拼接機器,基本上把完整的SQL資料庫放到目前流行的Hadoop大數據平台之上,並允許現有的應用程序能夠與它連接,他認為。哈特漢克斯現在是在執行的初期階段,但它已經看到了好處,Iannuzzi說,包括提高容錯性,高可用性,冗餘性,穩定性和「性能全面提升」。一種完美風暴推動了新的資料庫技術的出現,IDC公司研究副總裁Carl Olofson說到。首先,「我們正在使用的設備與過去對比,處理大數據集更加快速,靈活性更強」Olofson說。在過去,這樣的集合「幾乎必須放在旋轉磁碟上」,而且數據必須以特定的方式來結構化,他解釋說。現在有64位定址,使得能夠設置更大的存儲空間以及更快的網路,並能夠串聯多台計算器充當單個大型資料庫。「這些東西在不可用之前開辟了可能性」Olofson說。與此同時,工作負載也發生了變化。10年前的網站主要是靜態的,例如,今天我們享受到的網路服務環境和互動式購物體驗。反過來,需要新的可擴展性,他說。公司正在利用新的方式來使用數據。雖然傳統上我們大部分的精力都放在了對事務處理 – 銷售總額的記錄,比如,數據存儲在可以用來分析的地方 – 現在我們做的更多。應用狀態管理就是一個例子假設你正在玩一個網路游戲。該技術會記錄你與系統的每個會話並連接在一起,以呈現出連續的體驗,即使你切換設備或各種移動,不同的伺服器都會進行處理,Olofson解釋說。數據必須保持連續性,這樣企業才可以分析問題,例如「為什麼從來沒有人穿過水晶廳」。在網路購物方面,為什麼對方點擊選擇顏色後大多數人不會購買某個特殊品牌的鞋子。「以前,我們並沒試圖解決這些問題,或者我們試圖扔進盒子也不太合適」Olofson說。Hadoop是當今新的競爭者中一個重量級的產品。雖然他本身不是一個資料庫,它的成長為企業解決大數據扮演關鍵角色。從本質上講,Hadoop是一個運行高度並行應用程序的數據中心平台,它有很強的可擴展性。通過允許企業擴展「走出去」的分布方式,而不是通過額外昂貴的伺服器「向上」擴展,「它使得我們可以低成本地把一個大的數據集匯總,然後進行分析研究成果」Olofson說。其他新的RDBMS的替代品如NoSQL家族產品,其中包括MongoDB -目前第四大流行資料庫管理系統,比照DB引擎和MarkLogic非結構化數據存儲服務。「關系型資料庫一直是一項偉大的技術持續了30年,但它是建立在不同的時代有不同的技術限制和不同的市場需求,」MarkLogic的執行副總裁喬·產品帕卡說。大數據是不均勻的,他說。許多傳統的技術,這仍然是一個基本要求。「想像一下,你的筆記本電腦上唯一的程序是Excel」帕卡說。「設想一下,你要和你的朋友利用網路保持聯系 – 或者你正在寫一個合約卻不適合放進行和列中。」拼接數據集是特別棘手的「關系型,你把所有這些數據集中在一起前,必須先決定如何去組織所有的列,」他補充說。「我們可以採取任何形式或結構,並立即開始使用它。」NoSQL資料庫沒有使用關系數據模型,並且它們通常不具有SQL介面。盡管許多的NoSQL存儲折中支持速度等其他因素,MarkLogic為企業定身量做,提供更為周全的選擇。NoSQL儲存市場有相當大的增長,據市場研究媒體,不是每個人都認為這是正確的做法-至少,不是在所有情況下。NoSQL系統「解決了許多問題,他們橫向擴展架構,但他們卻拋出了SQL,」一位CEO-Monte Zweben說。這反過來,又為現有的代碼構成問題。Splice Machine是一家基於Hadoop的實時大數據技術公司,支持SQL事務處理,並針對OLAP 和OLAP應用進行實時優化處理。它被稱為替代NewSQL的一個例子,另一類預期會在未來幾年強勁增長。「我們的理念是保持SQL,但橫向擴展架構」Zweben說。「這是新事物,但我們正在努力試圖使它讓人們不必重寫自己的東西。」深度信息科學選擇並堅持使用SQL,但需要另一種方法。公司的DeepSQL資料庫使用相同的應用程序編程介面(API)和關系模型如MySQL,意味著沒有應用變化的需求而使用它。但它以不同的方式處理數據,使用機器學習。DeepSQL可以自動適應使用任何工作負載組合的物理,虛擬或雲主機,該公司表示,從而省去了手動優化資料庫的需要。該公司的首席戰略官Chad Jones表示,在業績大幅增加的同時,也有能力將「規模化」為上千億的行。一種來自Algebraix數據完全不同的方式,表示已經開發了數據的第一個真正的數學化基礎。而計算器硬體需在數學建模前建成,這不是在軟體的情況下,Algebraix首席執行官查爾斯銀說。「軟體,尤其是數據,從未建立在數學的基礎上」他說,「軟體在很大程度上是語言學的問題。」經過五年的研發,Algebraix創造了所謂的「數據的代數」集合論,「數據的通用語言」Silver說。「大數據骯臟的小秘密是數據仍然放在不與其他數據小倉融合的地方」Silver解釋說。「我們已經證明,它都可以用數學方法來表示所有的集成。」配備一個基礎的平台,Algebraix現在為企業提供業務分析作為一種服務。改進的性能,容量和速度都符合預期的承諾。時間會告訴我們哪些新的競爭者取得成功,哪些沒有,但在此期間,長期的領導者如Oracle不會完全停滯不前。「軟體是一個非常時尚行業」安德魯·門德爾松,甲骨文執行副總裁資料庫伺服器技術說。「事情經常去從流行到不受歡迎,回再次到流行。」今天的許多創業公司「帶回炒冷飯少許拋光或旋轉就可以了」他說。「這是一個新一代孩子走出學校和重塑的東西。」SQL是「唯一的語言,可以讓業務分析師提出問題並得到答案,他們沒有程序員,」門德爾松說。「大市場將始終是關系型。」至於新的數據類型,關系型資料庫產品早在上世紀90年代發展為支持非結構化數據,他說。在2013年,甲骨文的同名資料庫版本12C增加了支持JSON(JavaScript對象符號)。與其說需要一個不同類型的資料庫,它更是一種商業模式的轉變,門德爾松說。「雲,若是每個人都去,這將破壞這些小傢伙」他說。「大家都在雲上了,所以在這里有沒有地方來放這些小傢伙?「他們會去亞馬遜的雲與亞馬遜競爭?」 他補充說。「這將是困難的。」甲骨文有「最廣泛的雲服務」門德爾松說。「在現在的位置,我們感覺良好。」Gartner公司的研究主任里克·格林沃爾德,傾向於採取了類似的觀點。「對比傳統強大的RDBMS,新的替代品並非功能齊全」格林沃爾德說。「一些使用案例可以與新的競爭者來解決,但不是全部,並非一種技術」。展望未來,格林沃爾德預計,傳統的RDBMS供貨商感到價格壓力越來越大,並為他們的產品增加新的功能。「有些人會自由地帶來新的競爭者進入管理自己的整個數據生態系統」他說。至於新的產品,有幾個會生存下來,他預測「許多人將被收購或資金耗盡」。今天的新技術並不代表傳統的RDBMS的結束,「正在迅速發展自己」IDC的Olofson。贊成這種說法,「RDBMS是需要明確定義的數據 – 總是會有這樣一個角色。」但也會有一些新的競爭者的角色,他說,特別是物聯網技術和新興技術如非易失性內存晶元模塊(NVDIMM)占據上風。以上是小編為大家分享的關於大數據正在如何改變資料庫格局的相關內容,更多信息可以關注環球青藤分享更多干貨
『叄』 MySQL的使用場合
mysql目前使用得比較多,主要用在開源免費的場合,配合apache
tomcat
php
linux這些開源的技術使用。
『肆』 資料庫如何刪除表中的一段區間內的所有數據
1 付鍵 也就是FK formary key
程序交流中心,這是專門為新手學習設立的論壇
二、SQL
Structur query language
結構化查詢語言,是操作關系型資料庫中的對象。
DDL(Data definition language 數據定義語言),用於建表或刪表操作,以及對表約束進行修改
create table , alter table , drop table 對表結構的增刪操作。
DML(Data manipulation language 數據操作語言),向表中插入紀錄,修改紀錄
insert , update , delete , merge
transaction ,事務控制語言,由DML語句組成的,commit; ,rollback;
select 查詢語句
dcl 授權語句 grant
三、Oracle
DBMS 資料庫管理系統
有Oracle提供,還提供AS,應用伺服器
DBA 資料庫管理員
四、相關操作
1、sqlplus 訪問資料庫命令(本地訪問/遠程訪問),和資料庫建立連接的命令,是資料庫操作的環境
sqlplus 用戶名/密碼
2、show user 顯示當前用戶的用戶名
改變身份可以直接connect 用戶名/密碼 --- 這個是sqlplus命令
在sqlplus中可以使用 ! 可以在shell和sqlplus間切換,!shell命令 可以在sqlplus中使用shell命令。
實際上是sqlplus開了子進程來執行shell命令。
3、Oracle資料庫中的表分兩類:用戶表(用戶使用操作的表),系統表(資料庫系統維護的表,也叫數據字典)
對用戶表的DDL操作出發了對系統表的DML操作!
五、基本語法
1、select查詢語句
select table_name from user_tables;(查詢系統表)
以上的查詢語句就是查詢本用戶下所擁有的所有表的表名。
投影操作,只查看選擇的欄位的信息。
選擇操作,查看欄位中的特定某些信息。
聯接操作,多表查詢,通過表間連接,查尋出多表中的信息
(1)select table_name from user_tables;(查詢系統表)
以上的查詢語句就是查詢本用戶下所擁有的所有表的表名。
(2)sqlplus的buffer中會緩存最後一條sql語句,可以使用"/"來執行這最後一條sql語句,也可以使用
edit命令來編輯最後一條sql語句。
l命令(list)(sqlplus命令)可以顯示buffer中最後一條命令。
sqlplus命令可以縮寫
(3)desc [表名]
這是一條sqlplus命令,注意他不是sql語句,這條命令用於查看錶的結構。descript的縮寫
[欄位名] [欄位的類型],這是使用完desc命令後顯示的表結構。
(4)select [表的欄位名1],[表的欄位名2], ... from 表名;
select * from 表名; 查尋表中所有欄位的信息
(5)關鍵字不等拆分,sql語句,以及表名,欄位名是大小寫不敏感的。
sql語句要以";"結尾,來表示sql語句結束,如果不加";"系統不會執行此條sql語句,並提示。
在Oracle中字元顯示是左對齊,數值右對齊。
(6)在select 語句中可以使用數學表達式。
select [表達式(必須包含本表欄位名)],[...],.... from 表名;
運算的優先順序的先乘除後加減,同級自左向右運算,括弧改變優先順序。
(7)別名
select [欄位名或表達式] ["別名"],[...] ["..."],.... from 表名;
可以通過在欄位名或表達式後加空格"別名",可以給列,或者表達式結果其別名。
表達別名必須加雙引號。
(8)字元串拼接使用||符號
select 目標欄位名||" "||目標欄位名 from 表名;
注意:在Oracle中的字元串要用'..'包含
別名中需要使用空格,或是大小寫敏感時需要用".."包含。
練習:
自己寫一條SQL語句,執行的結果是select * from ...;
其中...是每張系統表的表名
即在每張系統表的表名前加「select * from」 ,後加「;」
select 'select * from '||table_name||';' from user_tables;
2、處理錯誤
(1)!oerr ora [錯誤號] ,系統可以顯示錯誤的原因和如何修改。如果命令錯誤輸入可以使用edit或ed來修改輸入錯誤。
實際上是在編輯緩存文件中的最後一條sql語句。
也可以使用 (change) c /錯誤欄位/正確欄位,來進行替換操作進行修改。
只有在Linux平台使用
! 相當於 host ,沒有斷連接,只是切換了一下,執行shell命令
(2)edit命令來編輯最後一條sql語句。
3、sqlplus設置
set pause on 回車響應,分屏顯示,只在本會話中有效
set pause off 關閉分屏顯示。
set pause "..." 設置分屏顯示的提示信息。
set pause on 先輸出提示信息,回車響應,分屏顯示
set head off 提頭輸出關閉
set feed off 結尾輸出關閉
set echo off 回寫關閉
spool 文件名.sql 寫入指定文件
spool off 關閉寫入。
4、sql腳本
也就是在文件中寫有sql語句的文件,可以在sqlplus中運行。
引入sql腳本
sqlplus 用戶名/密碼 @sql腳本 (注意:在用戶名密碼輸入結束後一定要加空格然後再寫@sql腳本)
在腳本中最後一行寫上「exit」,則運行完腳本以後,回到shell上
5、
Oracle中的空值 空值會當無窮大處理,其實空值根本就不會存儲,只是看作是無窮大。
Oracle中控制處理函數 NVL(欄位名,值),這個欄位中的空值替換為指定值,如果不為空,則會返回其原值。
例:select (salary*12)*(NVL(commission_pct,0)/100+1) salary,first_name from s_emp;
distinct關鍵字,去掉重復行(這個關鍵字會觸發排序操作)
例: select distinct dept_id,title from s_emp;
dept_id與title的聯合不唯一
注意:distinct,關鍵字之後會對from之前的欄位進行排重操作。
6、column命令 --- sqlplus命令
column命令 列格式的定義
column 目標列名 查看這個類是否定義了格式
column 目標列名 format a.. 設置列寬。
column last_name heading 'Employee|Name' FORMAT A15
設置題頭
這其中的'|'是換行符
column salary justify left format $99,990.00
定義數字顯示格式
注意:如果不滿足顯示的格式,就會把數據顯示為"#"
column salary justify left format $00,000.00
會出現$00,928.00 ,用0補齊
column 列名 clear (清除列格式定義)
注意:只有sqlplus命令才有簡寫,並且在使用sqlplus命令時結尾也不能加分號。
六、選擇操作
1、order by
排序子句 ASC(默認,升序) DESC(降序)
order by 目標列名(別名) 排序順序(不寫排序順序,會默認為升序排序)
例:select first_name from s_emp order by first_name;
select first_name from s_emp order by first_name desc;
注意:升序空值在結果的末尾,降序空值在結果的最前面。
2、where子句
where子句使用在 select ... from ... 後面,用來選擇所需(符合條件的)的記錄
where後面跟的是表達式 也就是 XXX=XXX, XXX between X and X ,XXX in(X,X,X)
like '...' 通配查詢
between ... and ... ,表示結果在這之間,between and是一個閉區間,
也就相當於... <= ... and ... >= ... 。
!=,<>,^=,這三個都標識不等於,<=,>=,=,這些運算符都可以使用。
... in (va1,val2,...) 判斷結果是否在這個枚舉中存在
like '...' 字元串通配查詢,'%'表示多個字元,'_',表示一個字元。
注意:轉義的用法:like 『S\_%』 escape 『\』
... and ... 表示只有兩個條件同時滿足
... or ... 表示條件只要滿足其中只一就可以
all ... 是要求都滿足條件。
not .....,則是可以與以上的條件產生反效果。
空值會對not in造成影響,也就是不等於任何值,但是空值例外。
... is null 使用來判斷值是否為空。
注意:Oracle中的字元串是嚴格區分大小寫的。
(1)注意數據類型,數字類型直接寫,字元用'......' ,預設格式的Date可以用'......',只有別名
才用" "包含。
(2)選擇合適的運算符
七、單行函數
1.字元函數
字元是大小寫敏感的
轉小寫 lower(欄位名) --- 其中的參數可以是一個字元串常量或是一個欄位名
轉大寫 upper(欄位名)
首字母大寫 initcap(欄位名)
字元串拼接 concat(欄位1, 欄位2)
截取子串 substr(欄位名, 起始位置,取字元個數)
al表,是專門用於函數測試和運算的,他只有一條記錄
字元串拼接 concat(...,....)
求指定子串 substr(...,起始位置,取字元個數)
可以使用"-"表示從右向左取,取的時候可以從左往友取。
例:select substr(first_name,-2,2) sub from s_emp;(取後兩個)
select substr(first_name,2,2) sub from s_emp;(取前兩個)
2,數值函數
四捨五入 round(數據,保留小數點後幾位)
可以用負數表示小數點前,0,表示小數點後第一位,也就是保留個位,-1表示個位(保留到十 位)。
例:select round(15.36,1) from al;
截取數字函數 trunc(數據,保留的位數(小數點後位數)) 截取個位之後補0
例:select trunc(123.456,1) from al;
3,日期函數
日期格式,
全日期格式 世紀信息,年月日,時分秒。
預設日期格式,日-月-年 dd-mon-rr
修改當前會話的日期格式,會按照指定的格式輸出日期
alter session set nls_date_format='yyyy mm dd hh24:mi:ss';
返回當前日期 sysdate
例:select sysdate from al;
select sysdate+1 from al; 獲得明天的日期,加1,單位是天
日期是格式敏感的
求兩個日期間相隔了多少個月 months_between(date1,date2)
加減指定數量的月份 add_months(date,月數),月數可以為負,負值就是減去相應的月數。
從date日期開始的第一個星期五 next_day(date,FriDay)
返回月末的日期 last_day(date)
截取日期 trunc(date,'年或月或日或時分秒')
例:select next_day(sysdate,2) from al;
例:select trunc(add_months(sysdate,1),'month') from al;
ROUND('25-MAY-95','MONTH') 01-JUN-95
ROUND('25-MAY-95 ','YEAR') 01-JAN-95
TRUNC('25-MAY-95 ','MONTH') 01-MAY-95
TRUNC('25-MAY-95 ','YEAR') 01-JAN-95
練習:
返回下個月的第一天的日期
select round(last_day(sysdate),'MONTH') from al;
select add_months(trunc(sysdate,'MONTH'),1);
4,不同數據類型間轉換函數
將日期轉成字元 tochar(date,'日期格式')
日期格式要用有效格式,格式大小寫敏感 'yyyy mm dd hh24:mi:ss',
'year'(全拼的年),'mm'(數字表示的月) 'month'(全拼的月),'day'(星期的全拼),'ddspth' (日期的全拼) 'yy mm dd'
例:select to_char(sysdate,'yyyy mm dd hh24:mi:ss')from al;
將字元轉換成數字 to_number('...')
將數字轉字元to_char(number,'fmt') fmt是數字格式
將字元串轉成日期 to_date('...','日期格式')
例:select to_char(to_date('2006 11 03','yyyy mm dd'),'dd-month-yy') from al;
1、等值連接
select [表別名1.欄位名1],[表別名2.欄位名2],...
from 表1 表別名1 ,表2 表別名2
where 表別名1.欄位名3=表別名2.欄位名4;
表連接時,當表與表之間有同名欄位時,可以加上表名或表的別名,加以區分,使用時要用
表名.欄位名或表別名.欄位名(列名)。當表的欄位名是唯一時,可以不用加上表名或表的別名。
注意:當為表起了別名,就不能再使用表名.欄位名。
例:select a.first_name,a.last_name,b.name
from s_emp a,s_dept b
where a.dept_id=b.id;
2、非等值連接
select [表別名1.欄位名1],[表別名2.欄位名2],...
from 表1 表別名1 ,表2 表別名2
where 表別名1.欄位名3 ..... 表別名2.欄位名4
....可以使比較運算符,也可以使其他的除了'='的運算符
例:select e.ename, d.grade,e.sal
from emp e,salgrade d
where e.sal between d.losal and d.hisal;
3、自連接
用別名把一張表中的數據分成兩部分,然後在使用條件過濾。
select [表別名1.欄位名1],[表別名2.欄位名2],...
from 表1 表別名1 ,表1 表別名2
where 表別名1.欄位名3=表別名2.欄位名4;
例:select a.first_name ename,b.first_name cname
from s_emp a,s_emp b
where a.manager_id=b.id;
以上所提到的表連接,都叫做內連接,嚴格匹配兩表的記錄。
4、外連接
會使用一方表中的所有記錄去和另一格表中的記錄按條件匹配,空值也會匹配,這個表中的所有記錄都會顯示,資料庫會模擬出記錄去和那些不匹配的記錄匹配。
例:select a.first_name enamei,a.id,b.first_name cname,b.id
from s_emp a,s_emp b
where a.manager_id=b.id(+);
即用a表中的數據去匹配b表的,若b表中有null,系統模擬紀錄與其匹配
注意:要把那一方的記錄全部都顯示出來,還有注意條件(+)跟在要全部選出的對端。
外連接的應用:
列出哪個部門沒有員工
select e.deptno,d.deptno
from emp e,dept d
where e.deptno(+)=d.deptno
and e.deptno is null;
三、組函數
group 組
group by 分組子句,按指定的分組規則分組 ,這個group by 子句可以跟在 select 語句後或是 having後面。
group by子句也會出發排序操作,會按分組欄位排序。
select [組函數或分組的欄位名] ,... from 表名 group by [欄位名1],[欄位名2],.....;
例:select avg(salary) from s_emp group by dept_id;
注意:組函數可以處理一組數據,返回一個值。
組函數會忽略空值。
avg(..),求平均值,sum(..),求和 這兩個函數的參數只能是number型的。
以下所提到的函數可以使用任意類型做參數。
count(..),用來統計記錄數,可以使用排重命令。count(...)默認使用的是all。
max(..),min(..)求最大值和最小值,
count(*),統計表中記錄數。
例:select max(b.name),avg(a.salary), max(c.name)
from s_emp a,s_dept b,s_region c
where a.dept_id=b.id and b.region_id=c.id
group by b.dept_id;
注意:只要寫了group by子句,
*** select後就只能用group by後的欄位或者是組函數。 ***
where子句只能夠過濾記錄,放單行函數。
having子句可以過濾組函數結果或是分組的信息,且寫在group by子句後。
例:
select max(b.name),avg(a.salary), max(c.name)
from s_emp a,s_dept b,s_region c
where a.dept_id=b.id and b.region_id=c.id
group by b.id
having sum(a.salary)>4000;
column 也可以定義有別名的列的格式。
column "別名" 格式定義
注意:要先過濾掉不需要的記錄,然後再進行分組操作,提高效率。
四、子查詢
子查詢,就是可以嵌在任何的sql語句中的select語句。
在select語句中嵌套子查詢時,會先執行子查詢。一般的會將子查詢放在運算符的右邊。
注意:在使用子查詢時,要注意這個運算符是單行的(也就是只能是單值),還是多行運算符(范圍,多值,in)。
配合使用子查詢返回的結果必須符合運算符的用法。
例:
select first_name,title
from s_emp
where title=any(select title from s_emp
where last_name='Smith')
and upper(last_name)!='SMITH';
select first_name,title
from s_emp
where title in (select title from s_emp
where last_name='Smith')
and upper(last_name)!='SMITH';
五、將業務需求轉換成可操作的表
一: 需求分析
二: 畫E-R圖
三: 轉換成表關系
四: 割接(新老系統交接)
五:
E-R圖屬性:
* 為強制且非空屬性
o 可選屬性(可以有值也可以沒有)
#* 表示此屬性唯一且非空
實體關系:
mastbean maybean
數量關系: 多對一關系
一對多關系
一對一關系
多對多關系
第一範式,所有的屬性都必須是單值,也就是屬性只表示單一的意義。(記錄可以重復,沒有任何限制)
第二範式,屬性要求唯一且非空,(記錄不可重復,但是數據可能會出現冗餘)。
第三範式,非主屬性只能依賴於主屬性,不能依賴於其他非主屬性。(解決數據冗餘問題)
六、約束
約束是針對表中的欄位進行定義的。
primary key (主鍵約束 PK)保證實體的完整性,保證記錄的唯一
主鍵約束,唯一且非空,並且每一個表中只能有一個主鍵,有兩個欄位聯合作為主鍵,只有兩個欄位放在一起唯一標識記錄,叫做聯合主鍵。
foreign key (外建約束 FK)保證引用的完整性,
外鍵約束,外鍵的取值是受另外一張表中的主鍵或唯一值得約束,不能夠取其他值,只能夠引用主鍵會唯一鍵的值,被引用的表,叫做parent table(父表),引用方的表叫做child table(子表),要想創建子表,就要先創建父表,後創建子表,記錄的插入也是如此,先父表後子表,刪除記錄,要先刪除子表記錄,後刪除父表記錄,要修改記錄,如果要修改父表的記錄要保證沒有被子表引用。要刪表時,要先刪子表,後刪除父表。
unuque key(唯一鍵),值為唯一
index(索引)是資料庫特有的一類對象,view(示圖)
典型的一對多 class 對應多個學生。
student table class table
______________________________ _________________________
| id | name | address| class_id| | id |class_desc|class_num|
|(PK)|______|________|___(FK)__| |(pk)|__________|_________|
| | | | | | | | |
一對一
student tabel shenfenzheng table
____________________ _________________________________
| id | name | address| | s_id |shenfen_desc|shenfen_num|
|(PK)|______|________| |(PK,FK)|____________|___________|
| | | | | | | |
多對多
student tabel zhongjian table kecheng table
____________________ _________________________________ __________________
| id | name | address| | s_id |shenfen_desc|shenfen_num| | kid | kechengname|
|(PK)|______|________| |(FK,FK)|____________|___________| | (PK)|____________|
| | | | |聯合主鍵| | | | | |
引用對方表的主鍵,當作本身的主鍵,所以這個表的主鍵,既是主鍵又是外建
建表和其他相關操作
DDL語句
創建表:
create table 表名 ( 欄位名1 類型(數據長度)(default ...) 約束條件, 欄位名2 類型(數據長度) 約束條件 );
Oracle資料庫中的數據類型
varchar(長度),可變長字元串,char(長度) 定長
number(..,..),number 表示浮點數,或者是整數
long 大對象,clog 字元的大對象,相當於文本文件在表中只存放一個相當於只針對值
blog 二進制的大對象,也是以相當於指針的形式存放的。
primary key約束:
主鍵約束的定義:
第一種定義形式:
create table test(c number primary key ); 列級約束
第二種定義形式:
create table test(c number , primary key(c) ) ; 表級約束
create table test( c1 number constraints pkc1 primary key ); 此約束有名字: pkc1
create table test(c number , c2 number , primary key (c ,c1) ) ; 用表級約束可以實現聯合主鍵
foregin key (fk) 外鍵約束:
(先定義父表,再定義子表)
carete table parent(c1 number primary key );
create table child (c number primary key , c2 number references parent(c1));
或表級約束定義:
create table child( c number primary key , c2 number , foreign key(c2) references parent(c1));
如果兩個欄位都為唯一且非空,這時可以定義成UK+NOT NULL
(PK或UK)一對多(FK)
(PK+UK)一對一(FK) 或 (PK)一對一(PK)
多對對多關系,一般都通過一張中間表來分解成兩個一對多的表
建立表
create table[schema]table
schema: 一個用戶對應一個schema 不同用戶下的表不能互相查看
select count(*) from s_dept; <===> select count(*) from sd0611.s_dept;
一個表中只能存儲一個LONG類型
CLOB 存儲大的文本對象
BLOB 存儲大的二進制對象
create table test(c1 number primary key); 設置主鍵
create table test(c1 number constraints test_c1 primary key); 定義約束名,默認約束名為SYS_ 在列後面定義約束稱為列級約束
create table test(c1 number primary key(c1)); 所有列定義完後再定義約束稱為表級約束(能定義聯合主鍵)
cretae table test(c1 number,c2 number,priary key(c1,c2)); 定義聯合主鍵
create table child(c1 number primary key); 先要定義父表
create table child(c1 number primary key, c2 number references parent(c1)); 然後定義子表 references parent定義外鍵
create table child(c1 number primary key, c2 number references parent(c1) on delete cascate); on delete cascate為級聯刪除
create table child(c1 number primary key, c2 number references parent(c1) on delete set null); on delete set null刪除後將外鍵置空
create table child (c1 number primary key, c2 number,foreignkey(c2) references parent(c1));
二、約束
1、非空約束(not null)
這是一個列級約束
在建表時,在數據類型的後面加上 not null ,也就是在插入時不允許插入空值。
例:create table student(id number primary key,name varchar2(32) not null,address varchar2(32));
2、unique 唯一約束
唯一約束,是會忽略空值的,唯一約束,要求插入的記錄中的值是為一的。
例:create table student(id number,name varchar2(32),address varchar2(32),primary key (id),unique (address));
如果創建一個uk,系統自動建一個唯一索引
3、pk、uk
Oralce支持級聯刪除,不支持級聯更新
4、check約束
檢查約束,可以按照指定條件,檢查記錄的插入。check中不能使用尾列,不能使用函數,不能引用其他欄位。
例:create table sal (a1 number , check(a1>1000));
『伍』 win10下MySQL資料庫目錄在哪
= = 如果不會安裝的話可以使用xampp這類集成包 追問: 這是另一種建資料庫的軟體嘛 回答: 裡面集成了Apache 、MySQL、FileZilla、Tomcat
『陸』 mysql中間件有哪些
mysql-proxy是官方提供的mysql中間件產品可以實現負載平衡,讀寫分離,failover等,但其不支持大數據量的分庫分表且性能較差。下面介紹幾款能代替其的mysql開源中間件產品,Atlas,cobar,tddl,讓我們看看它們各自有些什麼優點和新特性吧。
Atlas
Atlas是由 Qihoo 360, Web平台部基礎架構團隊開發維護的一個基於MySQL協議的數據中間層項目。它是在mysql-proxy 0.8.2版本的基礎上,對其進行了優化,增加了一些新的功能特性。360內部使用Atlas運行的mysql業務,每天承載的讀寫請求數達幾十億條。
Altas架構:
Atlas是一個位於應用程序與MySQL之間,它實現了MySQL的客戶端與服務端協議,作為服務端與應用程序通訊,同時作為客戶端與MySQL通訊。它對應用程序屏蔽了DB的細節,同時為了降低MySQL負擔,它還維護了連接池。
以下是一個可以參考的整體架構,LVS前端做負載均衡,兩個Altas做HA,防止單點故障。
Altas的一些新特性:
1.主庫宕機不影響讀
主庫宕機,Atlas自動將宕機的主庫摘除,寫操作會失敗,讀操作不受影響。從庫宕機,Atlas自動將宕機的從庫摘除,對應用沒有影響。在mysql官方的proxy中主庫宕機,從庫亦不可用。
2.通過管理介面,簡化管理工作,DB的上下線對應用完全透明,同時可以手動上下線。
3.自己實現讀寫分離
(1)為了解決讀寫分離存在寫完馬上就想讀而這時可能存在主從同步延遲的情況,Altas中可以在SQL語句前增加 /*master*/ 就可以將讀請求強制發往主庫。
主庫可設置多項,用逗號分隔,從庫可設置多項和權重,達到負載均衡。
4.自己實現分表
(1)需帶有分表欄位。
(2)支持SELECT、INSERT、UPDATE、DELETE、REPLACE語句。
(3)支持多個子表查詢結果的合並和排序。
這里不得不吐槽Atlas的分表功能,不能實現分布式分表,所有的子表必須在同一台DB的同一個database里且所有的子表必須事先建好,Atlas沒有自動建表的功能。
5.之前官方主要功能邏輯由使用lua腳本編寫,效率低,Atlas用C改寫,QPS提高,latency降低。
6.安全方面的提升
(1)通過配置文件中的pwds參數進行連接Atlas的用戶的許可權控制。
(2)通過client-ips參數對有許可權連接Atlas的ip進行過濾。
(3)日誌中記錄所有通過Altas處理的SQL語句,包括客戶端IP、實際執行該語句的DB、執行成功與否、執行所耗費的時間 ,如下面例子。
圖4
7.平滑重啟
通過配置文件中設置lvs-ips參數實現平滑重啟功能,否則重啟Altas的瞬間那些SQL請求都會失敗。該參數前面掛接的lvs的物理網卡的ip,注意不是虛ip。平滑重啟的條件是至少有兩台配置相同的Atlas且掛在lvs之後。
source:https://github.com/Qihoo360/Atlas
alibaba.cobar
Cobar是阿里巴巴(B2B)部門開發的一種關系型數據的分布式處理系統,它可以在分布式的環境下看上去像傳統資料庫一樣為您提供海量數據服務。那麼具體說說我們為什麼要用它,或說cobar--能幹什麼?以下是我們業務運行中會存在的一些問題:
1.隨著業務的進行資料庫的數據量和訪問量的劇增,需要對數據進行水平拆分來降低單庫的壓力,而且需要高效且相對透明的來屏蔽掉水平拆分的細節。
2.為提高訪問的可用性,數據源需要備份。
3.數據源可用性的檢測和failover。
4.前台的高並發造成後台資料庫連接數過多,降低了性能,怎麼解決。
針對以上問題就有了cobar施展自己的空間了,cobar中間件以proxy的形式位於前台應用和實際資料庫之間,對前台的開放的介面是mysql通信協議。將前台SQL語句變更並按照數據分布規則轉發到合適的後台數據分庫,再合並返回結果,模擬單庫下的資料庫行為。
Cobar應用舉例
應用架構:
應用介紹:
1.通過Cobar提供一個名為test的資料庫,其中包含t1,t2兩張表。後台有3個MySQL實例(ip:port)為其提供服務,分別為:A,B,C。
2.期望t1表的數據放置在實例A中,t2表的數據水平拆成四份並在實例B和C中各自放兩份。t2表的數據要具備HA功能,即B或者C實例其中一個出現故障,不影響使用且可提供完整的數據服務。
cabar優點總結:
1.數據和訪問從集中式改變為分布:
(1)Cobar支持將一張表水平拆分成多份分別放入不同的庫來實現表的水平拆分
(2)Cobar也支持將不同的表放入不同的庫
(3) 多數情況下,用戶會將以上兩種方式混合使用
注意!:Cobar不支持將一張表,例如test表拆分成test_1,test_2, test_3.....放在同一個庫中,必須將拆分後的表分別放入不同的庫來實現分布式。
2.解決連接數過大的問題。
3.對業務代碼侵入性少。
4.提供數據節點的failover,HA:
(1)Cobar的主備切換有兩種觸發方式,一種是用戶手動觸發,一種是Cobar的心跳語句檢測到異常後自動觸發。那麼,當心跳檢測到主機異常,切換到備機,如果主機恢復了,需要用戶手動切回主機工作,Cobar不會在主機恢復時自動切換回主機,除非備機的心跳也返回異常。
(2)Cobar只檢查MySQL主備異常,不關心主備之間的數據同步,因此用戶需要在使用Cobar之前在MySQL主備上配置雙向同步。
cobar缺點:
開源版本中資料庫只支持mysql,並且不支持讀寫分離。
source:http://code.alibabatech.com/wiki/display/cobar/Home
TDDL
淘寶根據自己的業務特點開發了TDDL(Taobao Distributed Data Layer 外號:頭都大了 ©_Ob)框架,主要解決了分庫分表對應用的透明化以及異構資料庫之間的數據復制,它是一個基於集中式配置的 jdbc datasource實現,具有主備,讀寫分離,動態資料庫配置等功能。
TDDL所處的位置(tddl通用數據訪問層,部署在客戶端的jar包,用於將用戶的SQL路由到指定的資料庫中):
淘寶很早就對數據進行過分庫的處理, 上層系統連接多個資料庫,中間有一個叫做DBRoute的路由來對數據進行統一訪問。DBRoute對數據進行多庫的操作、數據的整合,讓上層系統像操作一個資料庫一樣操作多個庫。但是隨著數據量的增長,對於庫表的分法有了更高的要求,例如,你的商品數據到了百億級別的時候,任何一個庫都無法存放了,於是分成2個、4個、8個、16個、32個……直到1024個、2048個。好,分成這么多,數據能夠存放了,那怎麼查詢它?這時候,數據查詢的中間件就要能夠承擔這個重任了,它對上層來說,必須像查詢一個資料庫一樣來查詢數據,還要像查詢一個資料庫一樣快(每條查詢在幾毫秒內完成),TDDL就承擔了這樣一個工作。在外面有些系統也用DAL(數據訪問層) 這個概念來命名這個中間件。
下圖展示了一個簡單的分庫分表數據查詢策略:
主要優點:
1.資料庫主備和動態切換
2.帶權重的讀寫分離
3.單線程讀重試
4.集中式數據源信息管理和動態變更
5.剝離的穩定jboss數據源
6.支持mysql和oracle資料庫
7.基於jdbc規范,很容易擴展支持實現jdbc規范的數據源
8.無server,client-jar形式存在,應用直連資料庫
9.讀寫次數,並發度流程式控制制,動態變更
10.可分析的日誌列印,日誌流控,動態變更
『柒』 如何在不停止Mysql服務的情況下,定時備份mysql資料庫
進入MySQL目錄下的bin文件夾
mysqlmp -u 用戶名 -p 資料庫名 > 導出的文件名
C:\Program Files\MySQL\MySQL Server 5.5\bin>mysqlmp -u root -p Test > test.sql
Enter password: ********
C:\Program Files\MySQL\MySQL Server 5.5\bin>dir *.sql
驅動器 C 中的卷沒有標簽。
卷的序列號是 406A-C32E
C:\Program Files\MySQL\MySQL Server 5.5\bin 的目錄
2013-01-29 16:34 39,574 test.sql
1 個文件 39,574 位元組
0 個目錄 5,498,294,272 可用位元組
用上面的文件, 把數據, 導入到另外一個資料庫上面去.
C:\Program Files\MySQL\MySQL Server 5.5\bin>mysql -u root -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.5.29 MySQL Community Server (GPL)
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database test2;
Query OK, 1 row affected (0.04 sec)
mysql> use test2
Database changed
mysql> source test.sql
......
『捌』 在linux 伺服器下, 怎麼遠程 (putty或winscp)導入mysql 資料庫文件
1.現在本地用工具把數據文件導成.sql文件。
2.將.sql文件上傳到linux服務。
3.登錄伺服器的mysql資料庫,直接用source命令將.sql文件導入。
『玖』 如何備份和還原MYSQL資料庫里的數據
推薦工具Navicat 8 Lite for MySQL
連接到相應的資料庫,導出備份。
恢復時也可以用這個工具恢復