好比c++中,定義int型別需要多少位元組,定義double型別需要多少位元組一樣,mysql對錶每個列中的資料也會實行嚴格控制,這是資料驅動應用程式成功的關鍵。m前言
好比c++中,定義int型別需要多少位元組,定義double型別需要多少位元組一樣,mysql對錶每個列中的資料也會實行嚴格控制,這是資料驅動應用程式成功的關鍵。mysql提供了一組可以賦給表中各個列的資料型別,每個型別都強制資料滿足為該資料型別預先確定的一組規則,例如大小、型別及格式。
這裡先總結資料型別。mysql中的資料型別大的方面來分,可以分為:日期和時間、數值,以及字串。下面就分開來進行總結。
日期和時間資料型別
mysql資料型別
含義date
3位元組,日期,格式:2014-09-18
time
3位元組,時間,格式:08:42:30
datetime
8位元組,日期時間,格式:2014-09-18 08:42:30
timestamp
4位元組,自動儲存記錄修改的時間
year
1位元組,年份
數值資料型別
整型mysql資料型別
含義(有符號)
tinyint
1位元組,範圍(-128~127)
smallint
2位元組,範圍(-32768~32767)
mediumint
3位元組,範圍(-8388608~8388607)
int4位元組,範圍(-2147483648~2147483647)
bigint
8位元組,範圍(+-9.22*10的18次方)
上面定義的都是有符號的,當然了,也可以加上unsigned關鍵字,定義成無符號的型別,那麼對應的取值範圍就要翻翻了,比如:
tinyint unsigned的取值範圍為0~255。
浮點型mysql資料型別
含義float(m, d)
4位元組,單精度浮點型,m總個數,d小數字
double(m, d)
8位元組,雙精度浮點型,m總個數,d小數字
decimal(m, d)
decimal是儲存為字串的浮點數
我在mysql中建立了乙個表,有一列為float(5, 3);做了以下試驗:
1.插入123.45678,最後查詢得到的結果為99.999;
2.插入123.456,最後查詢結果為99.999;
3.插入12.34567,最後查詢結果為12.346;
所以,在使用浮點型的時候,還是要注意陷阱的,要以插入資料庫中的實際結果為準。
字串資料型別
mysql資料型別
含義char(n)
固定長度,最多255個字元
varchar(n)
可變長度,最多65535個字元
tinytext
可變長度,最多255個字元
text
可變長度,最多65535個字元
mediumtext
可變長度,最多2的24次方-1個字元
longtext
可變長度,最多2的32次方-1個字元
1.char(n)和varchar(n)中括號中n代表字元的個數,並不代表位元組個數,所以當使用了中文的時候(utf8)意味著可以插入m個中文,但是實際會占用m*3個位元組。
2.同時char和varchar最大的區別就在於char不管實際value都會占用n個字元的空間,而varchar只會占用實際字元應該占用的空間+1,並且實際空間+1<=n。
3.超過char和varchar的n設定後,字串會被截斷。
4.char的上限為255位元組,varchar的上限65535位元組,text的上限為65535。
5.char在儲存的時候會截斷尾部的空格,varchar和text不會。
6.varchar會使用1-3個位元組來儲存長度,text不會。
其它型別
1.enum(「member1″, 「member2″, … 「member65535″)
enum資料型別就是定義了一種列舉,最多包含65535個不同的成員。當定義了乙個enum的列時,該列的值限制為列定義中宣告的值。如果列宣告包含null屬性,則null將被認為是乙個有效值,並且是預設值。如果宣告了not null,則列表的第乙個成員是預設值。
2.set(「member」, 「member2″, … 「member64″)
set資料型別為指定一組預定義值中的零個或多個值提供了一種方法,這組值最多包括64個成員。值的選擇限制為列定義中宣告的值。
資料型別屬性
上面大概總結了mysql中的資料型別,當然了,上面的總結肯定是不全面的,如果要非常全面的總結這些內容,好幾篇文章都不夠的。下面就再來總結一些常用的屬性。
1.auto_increment
auto_increment能為新插入的行賦乙個唯一的整數識別符號。為列賦此屬性將為每個新插入的行賦值為上一次插入的id+1。
mysql要求將auto_increment屬性用於作為主鍵的列。此外,每個表只允許有乙個auto_increment列。例如:
**如下:
id smallint not null auto_increment primary key
2.binary
binary屬性只用於char和varchar值。當為列指定了該屬性時,將以區分大小寫的方式排序。與之相反,忽略binary屬性時,將使用不區分大小寫的方式排序。例如:
**如下:
hostname char(25) binary not null
3.default
default屬性確保在沒有任何值可用的情況下,賦予某個常量值,這個值必須是常量,因為mysql不允許插入函式或表示式值。此外,此屬性無法用於blob或text列。如果已經為此列指定了null屬性,沒有指定預設值時預設值將為null,否則預設值將依賴於欄位的資料型別。例如:
**如下:
subscribed enum('0', '1') not null default '0'
4.index
如果所有其他因素都相同,要加速資料庫查詢,使用索引通常是最重要的乙個步驟。索引乙個列會為該列建立乙個有序的鍵陣列,每個鍵指向其相應的錶行。以後針對輸入條件可以搜尋這個有序的鍵陣列,與搜尋整個未索引的表相比,這將在效能方面得到極大的提公升。
**如下:
create table employees
id varchar(9) not null,
firstname varchar(15) not null,
lastname varchar(25) not null,
email varchar(45) not null,
phone varchar(10) not null,
index lastname(lastname),
primary key(id)
我們也可以利用mysql的create index命令在建立表之後增加索引:
**如下:
create index lastname on employees (lastname(7));
這一次只索引了名字的前7個字元,因為可能不需要其它字母來區分不同的名字。因為使用較小的索引時效能更好,所以應當在實踐中盡量使用小的索引。
5.not null
如果將乙個列定義為not null,將不允許向該列插入null值。建議在重要情況下始終使用not null屬性,因為它提供了乙個基本驗證,確保已經向查詢傳遞了所有必要的值。
6.null
為列指定null屬性時,該列可以保持為空,而不論行中其它列是否已經被填充。記住,null精確的說法是「無」,而不是空字串或0。
7.primary key
primary key屬性用於確保指定行的唯一性。指定為主鍵的列中,值不能重複,也不能為空。為指定為主鍵的列賦予auto_increment屬性是很常見的,因為此列不必與行資料有任何關係,而只是作為乙個唯一識別符號。主鍵又分為以下兩種:
(1)單字段主鍵
如果輸入到資料庫中的每行都已經有不可修改的唯一識別符號,一般會使用單字段主鍵。注意,此主鍵一旦設定就不能再修改。
(2)多欄位主鍵
如果記錄中任何乙個欄位都不可能保證唯一性,就可以使用多欄位主鍵。這時,多個字段聯合起來確保唯一性。如果出現這種情況,指定乙個auto_increment整數作為主鍵是更好的辦法。
8.unique
被賦予unique屬性的列將確保所有值都有不同的值,只是null值可以重複。一般會指定乙個列為unique,以確保該列的所有值都不同。例如:
**如下:
email varchar(45) unique
9.zerofill
zerofill屬性可用於任何數值型別,用0填充所有剩餘字段空間。例如,無符號int的預設寬度是10;因此,當「零填充」的int值為4時,將表示它為0000000004。例如:
**如下:
orderid int unsigned zerofill not null
設定Mysql連線數
mysql資料庫連線數過多導致系統出錯,系統不能連線資料庫,關鍵要看兩個資料 1 資料庫系統允許的最大可連線數max connections。這個引數是可以設定的。如果不設定,預設是100。最大是16384。2 資料庫當前的連線線程數threads connected。這是動態變化的。檢視max c...
mysql最大併發數設定
mysql 預設的最大併發連線為100,預設的連線數無法滿足大量client 連線的請求.但是可以通過以下方式改變,使用root使用者登入mysql 系統引用 mysql show variables like max connections variable name value max conn...
Mysql連線數設定
在使用mysql資料庫的時候,經常會遇到這麼乙個問題,就是 can not connect to mysql server.too many connections mysql 1040錯誤,這是因為訪問mysql且還未釋放的連線數目已經達到mysql的上限。通常,mysql的最大連線數預設是100...