mysql(發音為"my
ess
cue
el",不是"my
sequel")是一種開放源代碼的關系型資料庫管理系統(rdbms),mysql資料庫系統使用最常用的資料庫管理語言--結構化查詢語言(sql)進行資料庫管理。
由於mysql是開放源代碼的,因此任何人都可以在general
public
license的許可下下載並根據個性化的需要對其進行修改。mysql因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,mysql是管理內容最好的選擇。
mysql關系型資料庫於1998年1月發行第一個版本。它使用系統核心提供的多線程機制提供完全的多線程運行模式,提供了面向c、c++、eiffel、java、perl、php、python以及tcl等編程語言的編程介面(apis),支持多種欄位類型並且提供了完整的操作符支持查詢中的select和where操作。
mysql開發組計劃於2001年中期公布mysql4.0版本。在這個版本中將有以下新的特性被提供:新的表定義文件格式、高性能的數據復制功能、更加強大的全文搜索功能。在此之後,mysql開發著希望提供安全的數據復制機制、在beos操作系統上的mysql實現以及對延時關鍵字的定期刷新選項。隨著時間的推進,mysql將對ansi
92/ansi
99標准完全兼容。
時至今日
mysql
和
php
的結合絕對是完美.很多大型的網站也用到mysql資料庫.mysql的發展前景是非常光明的!
Ⅱ mysql是什麼資料庫
1、MySQL是一個關系型資料庫管理系統,系資料庫將數據保存在不同的表中,
而不是將所有數據放在一個大倉庫內,這樣就增加了速度並提高了靈活性
2、MySQL使用 C和 C++編寫,並使用了多種編譯器進行測試,保證了源代碼的可移植性
3、支持 AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統
4、為多種編程語言提供了 API。這些編程語言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和 Tcl 等
5、支持多線程,充分利用 CPU 資源
6、優化的 SQL查詢演算法,有效地提高查詢速度
7、提供多語言支持,常見的編碼如中文的 GB 2312、BIG5,日文的 Shift_JIS等都可以用作數據表名和數據列名
8、提供 TCP/IP、ODBC 和 JDBC等多種資料庫連接途徑
9、提供用於管理、檢查、優化資料庫操作的管理工具
10、支持多種存儲引擎
11、MySQL 是開源的
12、MySQL 使用標準的 SQL數據語言形式
13、復制全局事務標識,可支持自我修復式集群
14、復制無崩潰從機,可提高可用性
15、復制多線程從機,可提高性能
16、原生JSON支持
Ⅲ mysql屬於什麼資料庫系統
MySQL是一種開源關系資料庫管理系統(RDBMS),它使用最常用的資料庫管理語言-結構化查詢語言(SQL)進行資料庫管理。MySQL是開源的,因此任何人都可以根據通用公共許可證下載並根據個人需要對其進行修改。它的速度,可靠性和適應性引起了人們的廣泛關注。大多數人認為,當不需要事務處理時,MySQL是管理內容的最佳選擇。MySQL是一個關系資料庫管理系統。關系資料庫將數據存儲在不同的表中,而不是將所有數據都放在一個大型倉庫中,這提高了速度和靈活性。
MySQL使用的SQL語言是用於訪問資料庫的最常用的標准化語言。MySQL軟體採用雙重授權策略,分為社區版本和商業版本。由於其體積小,速度快,總擁有成本低,尤其是開放源代碼的特性,通常中小型網站開發都選擇MySQL作為網站資料庫。
Ⅳ 資料庫Mysql和Oracle是關系型資料庫嗎還有哪些非關系型資料庫
資料庫可分為關系型的和非關系型,MySQL和Oracle就是常見的關系型資料庫。那麼什麼是關系型資料庫,什麼是的非關系型資料庫呢?
關系型和非關系型資料庫的定義和區別
關系型和非關系型的區別就是數據的存儲方式,簡單的理解就是關系型資料庫所呈現數據結構是表,由睜穗二維表及其之間的聯系所組成的一個數據組織,可以將關系理解為表,關系型就是表格型式的,數據存儲在數據表的行和列中。非關系型資料庫應該理解為一種數據結構化存儲方法的集合,大塊數據組合在一起,可以是文檔或者鍵值對圖結構等,屬於分布式存儲。
關系型資料庫和非關系型悉好卜數據的優缺點
關系型資料庫容易理解,二維表結構是非常貼近邏輯世界一個概念,關系模型相對網狀、層次等其他模型來說更容易理解,可以使用SQL語言進行資料庫的操作,便於維護,但同時也有一些缺點就是其讀寫性能比較差,數據結構固定,對海量數據的處理不盡人意。
非關系型資料庫由於無需sql層的解析所以讀寫性能很高再加上它是基於鍵值對的,數據沒有耦合性,容易擴展。數據的存儲格式是key,value形式、文檔形式、圖片形式等等,文檔形式、圖片形式等等。但是它不提供sql支持,學習和使用成本較高,無事務處理。
目前常見的關系型和非關系型資料庫
關系型資料庫:
Oracle、DB2、MicrosoftSQLServer、MicrosoftAccess、MySQL
非關系型數襪唯據庫:
NoSql、Cloudant、MongoDb、redis、HBase
Ⅳ MySQL屬於什麼資料庫
屬於亞馬遜的雲資料庫服務。
雲資料庫 MySQL(TencentDB for MySQL)是騰訊雲基於開源資料庫 MySQL 專業打造的高性能分布式數據存儲服務,讓用戶能夠在雲中更輕松地設置、操作和培稿擴襪肆展關系資料庫。
雲資料庫 MySQL 主要特點如下:
雲存儲服務配好孝,是騰訊雲平台提供的面向互聯網應用的數據存儲服務。
完全兼容 MySQL 協議,適用於面向表結構的場景;適用 MySQL 的地方都可以使用雲資料庫。
提供高性能、高可靠、易用、便捷的 MySQL 集群服務。
整合了備份、擴容、遷移等功能,同時提供新一代資料庫工具DMC,用戶可以方便的進行資料庫的管理。
Ⅵ 什麼是MySql資料庫
MySQL資料庫:
MySQL是一種開放源代碼的關系型資料庫管理系統(RDBMS),使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。
MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。
MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
資料庫簡介:
MySQL是一種開放源代碼的關系型資料庫管理系統(RDBMS),MySQL資料庫系統使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。
由於MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
MySQL這個名字,起源不是很明確。一個比較有影響的說法是,基本指南和大量的庫和工具帶有前綴「my」已經有10年以上,而且不管怎樣,MySQL AB創始人之一的Monty Widenius的女兒也叫My。這兩個到底是哪一個給出了MySQL這個名字至今依然是個迷,包括開發者在內也不知道。
MySQL的海豚標志的名字叫「sakila」,它是由MySQL AB的創始人從用戶在「海豚命名」的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲史瓦濟蘭的開源軟體開發者Ambrose Twebaze提供。根據Ambrose所說,Sakila來自一種叫SiSwati的史瓦濟蘭方言,也是在Ambrose的家鄉烏干達附近的坦尚尼亞的Arusha的一個小鎮的名字。
MySQL,雖然功能未必很強大,但因為它的開源、廣泛傳播,導致很多人都了解到這個資料庫。它的歷史也富有傳奇性。
MySQL資料庫歷史:
MySQL的歷史最早可以追溯到1979年,那時Oracle也才小打小鬧,微軟的SQL Server影子都沒有。有一個人叫Monty Widenius, 為一個叫TcX的小公司打工,並用BASIC設計了一個報表工具,可以在4M主頻和16KB內存的計算機上運行。過了不久,又將此工具,使用C語言重寫,移植到Unix平台,當時,它只是一個很底層的面向報表的存儲引擎。這個工具叫做Unireg。
可是,這個小公司資源有限,Monty天賦極高,面對資源有限的不利條件,他反而更能發揮潛能,總是力圖寫出最高效的代碼。並因此養成了習慣。與Monty同在一起的還有一些別的同事,很少有人能堅持把那些代碼持續寫到20年後,而Monty卻做到了。
1990年,TcX的customer 中開始有人要求要為它的API提供SQL支持,當時,有人想到了直接使用商用資料庫算了,但是Monty覺得商用資料庫的速度難令人滿意。於是,他直接藉助於mSQL的代碼,將它集成到自己的存儲引擎中。但不巧的是,效果並不太好。於是, Monty雄心大起,決心自己重寫一個SQL支持。
1996年,MySQL 1.0發布,只面向一小撥人,相當於內部發布。到了96年10月,MySQL 3.11.1發布了,呵呵,沒有2.x版本。最開始,只提供了Solaris下的二進製版本。一個月後,Linux版本出現了。
緊接下來的兩年裡,MySQL依次移植到各個平台下。它發布時,採用的許可策略,有些與眾不同:允許免費商用,但是不能將MySQL與自己的產品綁定在一起發布。如果想一起發布,就必須使用特殊許可,意味著要花銀子。當然,商業支持也是需要花銀子的。其它的,隨用戶怎麼用都可以。這種特殊許可為MySQL帶來了一些收入,從而為它的持續發展打下了良好的基礎。(細想想,PostgreSQL曾經有幾年限入低谷,可能與它的完全免費,不受任何限制有關系)。
MySQL3.22應該是一個標志性的版本,提供了基本的SQL支持。
MySQL關系型資料庫於1998年1月發行第一個版本。它使用系統核心提供的多線程機制提供完全的多線程運行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等編程語言的編程介面(APIs),支持多種欄位類型並且提供了完整的操作符支持查詢中的SELECT和WHERE操作。
MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。
1999-2000年,有一家公司在瑞典成立了,叫MySQL AB (AB是瑞典語「股份公司」的意思)。 雇了幾個人,與Sleepycat合作,開發出了 Berkeley DB引擎, 因為BDB支持事務處理,所以,MySQL從此開始支持事務處理了。
2000年4月,MySQL對舊的存儲引擎進行了整理,命名為MyISAM。同時,2001年,Heikiki Tuuri向MySQL提出建議,希望能集成他們的存儲引擎InnoDB,這個引擎同樣支持事務處理,還支持行級鎖。
如今,遺憾的是,BDB和InnoDB好像都被Oracle收購了,為了消滅競爭對手,哪怕是開源的,都是不擇手段。
MySQL與InnoDB的正式結合版本是4.0。
到了MySQL5.0,2003年12月,開始有View,存儲過程之類的東東,當然,其間, bug也挺多。
在2008年1月16號 MySQL被Sun公司收購。
最近,MySQL的創始人Monty Widenius已經向Sun提交了辭呈。head都要走了。
據說,被Sun收購的公司多薄命,不知道MySQL今後前途如何,希望一路走好。相信MySQL的生命力還是很長久的。
時至今日 mysql 和 php 的結合絕對是完美.很多大型的網站也用到mysql資料庫.mysql的發展前景是非常光明的!
MySQL常用命令:
1:使用SHOW語句找出在伺服器上當前存在什麼資料庫:
mysql> SHOW DATABASES;
2:2、創建一個資料庫MYSQLDATA
mysql> CREATE DATABASE MYSQLDATA;
3:選擇你所創建的資料庫
mysql> USE MYSQLDATA; (按回車鍵出現Database changed 時說明操作成功!)
4:查看現在的資料庫中存在什麼表
mysql> SHOW TABLES;
5:創建一個資料庫表
mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:顯示表的結構:
mysql> DESCRIBE MYTABLE;
7:往表中加入記錄
mysql> insert into MYTABLE values (」hyq」,」M」);
8:用文本方式將數據裝入資料庫表中(例如D:/mysql.txt)
mysql> LOAD DATA LOCAL INFILE 「D:/mysql.txt」 INTO TABLE MYTABLE;
9:導入.sql文件命令(例如D:/mysql.sql)
mysql>use database;
mysql>source d:/mysql.sql;
10:刪除表
mysql>drop TABLE MYTABLE;
11:清空表
mysql>delete from MYTABLE;
12:更新表中數據
mysql>update MYTABLE set sex=」f」 where name=』hyq』;
全局管理許可權對應解釋:
FILE: 在MySQL伺服器上讀寫文件。
PROCESS: 顯示或殺死屬於其它用戶的服務線程。
RELOAD: 重載訪問控製表,刷新日誌等。
SHUTDOWN: 關閉MySQL服務。
資料庫/數據表/數據列許可權:
ALTER: 修改已存在的數據表(例如增加/刪除列)和索引。
CREATE: 建立新的資料庫或數據表。
DELETE: 刪除表的記錄。
DROP: 刪除數據表或資料庫。
INDEX: 建立或刪除索引。
INSERT: 增加表的記錄。
SELECT: 顯示/搜索表的記錄。
UPDATE: 修改表中已存在的記錄。
特別的許可權:
ALL: 允許做任何事(和root一樣)。
USAGE: 只允許登錄–其它什麼也不允許做。
MySQL資料庫導入方法:
MySQL資料庫的導入,有兩種方法:
1) 先導出資料庫SQL腳本,再導入;
2) 直接拷貝資料庫目錄和文件。
在不同操作系統或MySQL版本情況下,直接拷貝文件的方法可能會有不兼容的情況發生。
所以一般推薦用SQL腳本形式導入。下面分別介紹兩種方法。
2. 方法一 SQL腳本形式
操作步驟如下:
2.1. 導出SQL腳本
在原資料庫伺服器上,可以用phpMyAdmin工具,或者mysqlmp命令行,導出SQL腳本。
2.1.1 用phpMyAdmin工具
導出選項中,選擇導出「結構」和「數據」,不要添加「DROP DATABASE」和「DROP TABLE」選項。
選中「另存為文件」選項,如果數據比較多,可以選中「gzipped」選項。
將導出的SQL文件保存下來。
2.1.2 用mysqlmp命令行
命令格式
mysqlmp -u 用戶名 -p 資料庫名 > 資料庫名.sql
範例:
mysqlmp -u root -p abc > abc.sql
(導出資料庫abc到abc.sql文件)
提示輸入密碼時,輸入該資料庫用戶名的密碼。
2.2. 創建空的資料庫
通過主控界面/控制面板,創建一個資料庫。假設資料庫名為abc,資料庫全權用戶為abc_f。
2.3. 將SQL腳本導入執行
同樣是兩種方法,一種用phpMyAdmin(mysql資料庫管理)工具,或者mysql命令行。
2.3.1 用phpMyAdmin工具
從控制面板,選擇創建的空資料庫,點「管理」,進入管理工具頁面。
在"SQL"菜單中,瀏覽選擇剛才導出的SQL文件,點擊「執行」以上載並執行。
注意:phpMyAdmin對上載的文件大小有限制,php本身對上載文件大小也有限制,如果原始sql文件
比較大,可以先用gzip對它進行壓縮,對於sql文件這樣的文本文件,可獲得1:5或更高的壓縮率。
gzip使用方法:
# gzip xxxxx.sql
得到
xxxxx.sql.gz文件。
提示輸入密碼時,輸入該資料庫用戶名的密碼。
3 直接拷貝
如果資料庫比較大,可以考慮用直接拷貝的方法,但不同版本和操作系統之間可能不兼容,要慎用。
3.1 准備原始文件
用tar打包為一個文件
3.2 創建空資料庫
3.3 解壓
在臨時目錄中解壓,如:
cd /tmp
tar zxf mydb.tar.gz
3.4 拷貝
將解壓後的資料庫文件拷貝到相關目錄
cd mydb/
cp * /var/lib/mysql/mydb/
對於FreeBSD:
cp * /var/db/mysql/mydb/
3.5 許可權設置
將拷貝過去的文件的屬主改為mysql:mysql,許可權改為660
chown mysql:mysql /var/lib/mysql/mydb/*
chmod 660 /var/lib/mysql/mydb/*
Mssql轉換mysql的方法:
1.導表結構
使用MySQL生成create腳本的方法。找到生成要導出的腳本,按MySQL的語法修改一下到MySQL資料庫中創建該表的列結構什麼的。
2.導表數據
在MSSQL端使用bcp導出文本文件:
bcp 「Select * FROM dbname.dbo.tablename;」 queryout tablename.txt -c -Slocalhostdb2005 -Usa
其中」"中是要導出的sql語句,-c指定使用 進行欄位分隔,使用 進行記錄分隔,-S指定資料庫伺服器及實例,-U指定用戶名,-P指定密碼.
在MySQL端使用mysqlimport 導入文本文件到相應表中
mysqlimport -uroot -p databasename /home/test/tablename.txt
其中-u指定用戶名,-p指定密碼,databasename指定資料庫名稱,表名與文件名相同
MySQL備份與恢復:
MySQL備份恢復數據的一般步驟
備份一個資料庫的例子:
1、備份前讀鎖定涉及的表
mysql>LOCK TABLES tbl1 READ,tbl1 READ,…
如果,你在mysqlmp實用程序中使用--lock-tables選項則不必使用如上SQL語句。
2、導出資料庫中表的結構和數據
shell>mysqlmp --opt db_name>db_name.sql
3、啟用新的更新日誌
shell>mysqladmin flush-logs
這樣可以記錄你備份後的數據改變為恢復數據准備。
4、解除表的讀鎖
mysql>UNLOCK TABLES;
為了加速上述過程,你可以這樣做:
shell> mysqlmp --lock-tables --opt db_name>db_name.sql; mysqladmin flush-logs
但是這樣可能會有點小問題。上命令在啟用新的更新日誌前就恢復表的讀鎖,
在更新繁忙的站點,可能有備份後的更新數據沒有記錄在新的日誌中。
現在恢復上面備份的資料庫
1、對涉及的表使用寫鎖
mysql>LOCK TABLES tbl1 WRITE,tbl1 WRITE,…
2、恢復備份的數據
shell>mysql db_name < db_name.sql
3、恢復更新日誌的內容
shell>mysql --one-database db_name < hostname.nnn
假設需要使用的日誌名字為hostname.nnn
4、啟用新的更新日誌
shell>mysqladmin flush-logs
5、解除表的寫鎖
mysql>UNLOCK TABLES;
希望上面的例子能給你啟發,因為備份數據的手法多種多樣,你所使用的和上面所述可能大不一樣,但是對於備份和恢復中,表的鎖定、啟用新的更新日誌的時機應該是類似的,仔細考慮這個問題。
MySQL資料庫優化:
選擇InnoDB作為存儲引擎
大型產品的資料庫對於可靠性和並發性的要求較高,InnoDB作為默認的MySQL存儲引擎,相對於MyISAM來說是個更佳的選擇。
優化資料庫結構
組織資料庫的schema、表和欄位以降低I/O的開銷,將相關項保存在一起,並提前規劃,以便隨著數據量的增長,性能可以保持較高的水平。
設計數據表應盡量使其佔用的空間最小化,表的主鍵應盡可能短。·對於InnoDB表,主鍵所在的列在每個輔助索引條目中都是可復制的,因此如果有很多輔助索引,那麼一個短的主鍵可以節省大量空間。
僅創建你需要改進查詢性能的索引。索引有助於檢索,但是會增加插入和更新操作的執行時間。
InnoDB的ChangeBuffering特性
InnoDB提供了changebuffering的配置,可減少維護輔助索引所需的磁碟I/O。大規模的資料庫可能會遇到大量的表操作和大量的I/O,以保證輔助索引保持最新。當相關頁面不在緩沖池裡面時,InnoDB的changebuffer將會更改緩存到輔助索引條目,從而避免因不能立即從磁碟讀取頁面而導致耗時的I/O操作。當頁面被載入到緩沖池時,緩沖的更改將被合並,更新的頁面之後會刷新到磁碟。這樣做可提高性能,適用於MySQL5.5及更高版本。
InnoDB頁面壓縮
InnoDB支持對表進行頁面級的壓縮。當寫入數據頁的時候,會有特定的壓縮演算法對其進行壓縮。壓縮後的數據會寫入磁碟,其打孔機制會釋放頁面末尾的空塊。如果壓縮失敗,數據會按原樣寫入。表和索引都會被壓縮,因為索引通常是資料庫總大小中佔比很大的一部分,壓縮可以顯著節約內存,I/O或處理時間,這樣就達到了提高性能和伸縮性的目的。它還可以減少內存和磁碟之間傳輸的數據量。MySQL5.1及更高版本支持該功能。
注意,頁面壓縮並不能支持共享表空間中的表。共享表空間包括系統表空間、臨時表空間和常規表空間。
使用批量數據導入
在主鍵上使用已排序的數據源進行批量數據的導入可加快數據插入的過程。否則,可能需要在其他行之間插入行以維護排序,這會導致磁碟I/O變高,進而影響性能,增加頁的拆分。關閉自動提交的模式也是有好處的,因為它會為每個插入執行日誌刷新到磁碟。在批量插入期間臨時轉移唯一鍵和外鍵檢查也可顯著降低磁碟I/O。對於新建的表,最好的做法是在批量導入後創建外鍵/唯一鍵約束。
一旦你的數據達到穩定的大小,或者增長的表增加了幾十或幾百兆位元組,就應該考慮使用OPTIMIZETABLE語句重新組織表並壓縮浪費的空間。對重新組織後的表進行全表掃描所需要的I/O會更少。
優化InnoDB磁碟I/O
增加InnoDB緩沖池大小可以讓查詢從緩沖池訪問而不是通過磁碟I/O訪問。通過調整系統變數innodb_flush_method來調整清除緩沖的指標使其達到最佳水平。
MySQL的內存分配
在為MySQL分配足夠的內存之前,請考慮不同領域對MySQL的內存需求。要考慮的關鍵領域是:並發連接——對於大量並發連接,排序和臨時表將需要大量內存。在撰寫本文時,對於處理3000+並發連接的資料庫,16GB到32GB的RAM是足夠的。
內存碎片可以消耗大約10%或更多的內存。像innodb_buffer_pool_size、key_buffer_size、query_cache_size等緩存和緩沖區要消耗大約80%的已分配內存。
日常維護
定期檢查慢的查詢日誌並優化查詢機制以有效使用緩存來減少磁碟I/O。優化它們,以掃描最少的行數,而不是進行全表掃描。
其他可以幫助DBA檢查和分析性能的日誌包括:錯誤日誌、常規查詢日誌、二進制日誌、DDL日誌(元數據日誌)。
定期刷新緩存和緩沖區以降低碎片化。使用OPTIMIZETABLE語句重新組織表並壓縮任何可能被浪費的空間。
Ⅶ 什麼是MySQL資料庫
MySQL是一種開放源代碼的關系型資料庫管理系統(RDBMS),MySQL資料庫系統使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。
由於MySQL是開放源代碼的,因此任何人都可以在GeneralPublicLicense的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性余晌和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。
MySQL這個名字豎櫻鋒,起源不是很明確。一個比較有影響的說法是,基本指南頌尺和大量的庫和工具帶有前綴「my」已經有10年以上,而且不管怎樣,MySQLAB創始人之一的MontyWidenius的女兒也叫My。這兩個到底是哪一個給出了MySQL這個名字至今依然是個迷,包括開發者在內也不知道。
MySQL的海豚標志的名字叫「sakila」,它是由MySQLAB的創始人從用戶在「海豚命名」的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲史瓦濟蘭的開源軟體開發者AmbroseTwebaze提供。根據Ambrose所說,Sakila來自一種叫SiSwati的史瓦濟蘭方言,也是在Ambrose的家鄉烏干達附近的坦尚尼亞的Arusha的一個小鎮的名字。
MySQL,雖然功能未必很強大,但因為它的開源、廣泛傳播,導致很多人都了解到這個資料庫。它的歷史也富有傳奇性。
Ⅷ 什麼是資料庫資料庫的分類MySQL屬於哪種
資料庫就是指資料庫管理系統:主要指信息時代專門存儲管理信息數據的軟體系統。分類可分關系型資料庫、網狀資料庫和層次型資料庫什麼的。但是大家廣泛接觸的還是關系型資料庫(信息數據主要可以二維表格模式展示的資料庫)如:oracle、sqlserver、db2、access、foxpro等吧。mysql是個小型關系型資料庫。
Ⅸ mysql數據類型
資料庫類型可分為層次型、網狀型和關系型。
層次型資料庫是把數據根據層次構造(樹結構)的方法呈現;網狀型資料庫是採用網狀原理和方法,以網狀數據模型為基礎建立的資料庫;關系型資料庫是指採用了關系模型來組織數據的資料庫。
資料庫的作用
1、實現數據共享:數據共享包含所有用戶可同時存取資料庫中的數據,也包括用戶可以用各種方式通過介面使用資料庫,並提供數據共享。
2、減少數據的冗餘度:同文件系統相比,由於資料庫實現了數據共享,從而避免了用戶各自建立應用文件。減少了大量重復數據,減少了數據冗餘,維護了數據的皮枯一致性。
3、保持數據的獨立性:數據的獨立性包括邏輯獨立性(資料庫中資料庫的邏輯結構和應用程序相互獨立)和物理獨立性(數據物理結構的變化不影響數據的邏輯結構)。
4、數據實現集中控制:文件管理方式中,數據處於一種分散的狀態,不同的用戶或同一用戶在不同處理中其文件之間毫無關系。利用資料庫可對數據進行集中控制和管理,並通過燃滲洞數據模型表示各種數據的組織以及數據間的聯系喊談。
Ⅹ MySQL的數據類型和建庫策略
無論是在小得可憐的免費資料庫空間或是大型電子商務網站,合理的設計表結構、充分利用空間是十分必要的。這就要求我們對資料庫系統的常用數據類型有充分的認識。下面我就將我的一點心得寫出來跟大家分享。
一、數字類型
數字類型按照我的分類方法分為三類:整數類、小數類和數字類。
我所謂的「數字類」,就是指 DECIMAL 和 NUMERIC,它們是同一種類型。它嚴格的說不是一種數字類型,因為他們實際上是將數字以字元串形式保存的;他的值的每一位 (包括小數點) 佔一個位元組的存儲空間,因此這種類型耗費空間比較大。但是它的一個突出的優點是小數的位數固定,在運算中不會「失真」,所以比較適合用於「價格」、「金額」這樣對精度要求不高但准確度肢喚要求非常高的欄位。
小數類,即浮點數類型,根據精度的不同,有 FLOAT 和 DOUBLE 兩種。它們的優勢是精確度,FLOAT 可以表示絕對值非常小、小到約 1.17E-38 (0.000...0117,小數點後面有 37 個零) 的小數,而 DOUBLE 更是可以表示絕對值小到約 2.22E-308 (0.000...0222,小數點後面有 307 個零) 的小數。FLOAT 類型和 DOUBLE 類型佔用存儲空間分別是 4 位元組和 8 位元組。如果需要用到小數的欄位,精度要求不高的,當然用 FLOAT 了。可是說句實在話,我們「民用」的數據,哪有要求精度那麼高的呢?這兩種類型至今我沒有用過——我還沒有遇到適合於使用它們的事例。
用的最多的,最值得精打細算的,是整數類型。從只佔一個字困罩節存儲空間的 TINYINT 到占 8 個位元組的 BIGINT,挑選一個「夠用」並且佔用存儲空間最小的類型是設計資料庫時應該考慮的。TINYINT、SMALLINT、MEDIUMINT、INT 和 BIGINT 佔用存儲空間分別為 1 位元組、2 位元組、3 位元組、4 字歷尺凱節和 8 位元組,就無符號的整數而言,這些類型能表示的最大整數分別為 255、65535、16777215、4294967295 和 18446744073709551615。如果用來保存用戶的年齡 (舉例來說,資料庫中保存年齡是不可取的),用 TINYINT 就夠了;九城的《縱橫》里,各項技能值,用 SMALLINT 也夠了;如果要用作一個肯定不會超過 16000000 行的表的 AUTO_INCREMENT 的 IDENTIFY 欄位,當然用 MEDIUMINT 不用 INT,試想,每行節約一個位元組,16000000 行可以節約 10 兆多呢。
二、日期時間類型
日期和時間類型比較簡單,無非是 DATE、TIME、DATETIME、TIMESTAMP 和 YEAR 等幾個類型。只對日期敏感,而對時間沒有要求的欄位,就用 DATE 而不用 DATETIME 是不用說的了;單獨使用時間的情況也時有發生——使用 TIME;但最多用到的還是用 DATETIME。在日期時間類型上沒有什麼文章可做,這里就不再詳述。
三、字元 (串) 類型
不要以為字元類型就是 CHAR,CHAR 和 VARCHAR 的區別在於 CHAR 是固定長度,只要你定義一個欄位是 CHAR(10),那麼不論你存儲的數據是否達到了 10 個位元組,它都要佔去 10 個位元組的空間;而 VARCHAR 則是可變長度的,如果一個欄位可能的值是不固定長度的,我們只知道它不可能超過 10 個字元,把它定義為 VARCHAR(10) 是最合算的,VARCHAR 類型的佔用空間是它的值的實際長度 +1。為什麼要 +1 呢?這一個位元組用於保存實際使用了多大的長度。從這個 +1 中也應該看到,如果一個欄位,它的可能值最長是 10 個字元,而多數情況下也就是用到了 10 個字元時,用 VARCHAR 就不合算了:因為在多數情況下,實際佔用空間是 11 個位元組,比用 CHAR(10) 還多佔用一個位元組。
舉個例子,就是一個存儲股票名稱和代碼的表,股票名稱絕大部分是四個字的,即 8 個位元組;股票代碼,上海的是六位數字,深圳的是四位數字。這些都是固定長度的,股票名稱當然要用 CHAR(8);股票代碼雖然是不固定長度,但如果使用 VARCHAR(6),一個深圳的股票代碼實際佔用空間是 5 個位元組,而一個上海的股票代碼要佔用 7 個位元組!考慮到上海的股票數目比深圳的多,那麼用 VARCHAR(6) 就不如 CHAR(6) 合算了。
雖然一個 CHAR 或 VARCHAR 的最大長度可以到 255,我認為大於 20 的 CHAR 是幾乎用不到的——很少有大於 20 個位元組長度的固定長度的東東吧?不是固定長度的就用 VARCHAR。大於 100 的 VARCHAR 也是幾乎用不到的——比這更大的用 TEXT 就好了。TINYTEXT,最大長度為 255,佔用空間也是實際長度 +1;TEXT,最大長度 65535,佔用空間是實際長度 +2;MEDIUMTEXT,最大長度 16777215,佔用空間是實際長度 +3;LONGTEXT,最大長度 4294967295,佔用空間是實際長度 +4。為什麼 +1、+2、+3、+4?你要是還不知道就該打 PP 了。這些可以用在論壇啊、新聞啊,什麼的,用來保存文章的正文。根據實際情況的不同,選擇從小到大的不同類型。
四、枚舉和集合類型
枚舉 (ENUM) 類型,最多可以定義 65535 種不同的字元串從中做出選擇,只能並且必須選擇其中一種,佔用存儲空間是一個或兩個位元組,由枚舉值的數目決定;集合 (SET) 類型,最多可以有 64 個成員,可以選擇其中的零個到不限定的多個,佔用存儲空間是一個到八個位元組,由集合可能的成員數目決定。
舉個例子來說,在 SQLServer 中,你可以節約到用一個 BIT 類型來表示性別 (男/女),但 MySQL 沒有 BIT,用 TINTINT 嗎?不,可以用 ENUM('帥哥','美眉'),只有兩種選擇,所以只需一個位元組——跟 TINYINT 一樣大,但卻可以直接用字元串 '帥哥' 和 '美眉' 來存取。真是太方便啦!
好了,MySQL 的數據類型介紹得差不多,我的建庫策略也隨著介紹數據類型介紹給大家一些。但這只是其中一部分,篇幅有限,不能再細說;其他的,就靠各人在對數據類型理解的基礎上,多多實踐、多多討論。