数据表类型
數(shù)據(jù)表類型
一、 創(chuàng)建數(shù)據(jù)表
?CREATE TABLE IF NOT EXISTS user(
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE,
Sex TINYINT ?NOT NULL DEFUALT 1,
age TINYINT ?NOT NULL DEFAULT 0
)ENGINE = MyISAM DEFAULT CHARSET=utf8;
CREATE ?TABLE ?IF NOT EXISTS 表名稱(
??字段名1 ?類型(長度) 屬性 ?索引,
字段名2 ?類型(長度) 屬性 ?索引,
字段名3 ?類型(長度) 屬性 ?索引,
字段名4 ?類型(長度) 屬性 ?索引,
字段名5 ?類型(長度) 屬性 ?索引,
...
字段名N ?類型(長度) 屬性 ?索引,
) ENGINE =MyISAM ?DEFAULT ?CHARSET =utf8;
html ?設(shè)置字符集 ?utf-8
mysql 設(shè)置字符集 ?utf8
?
?二、 mysql 數(shù)據(jù)類型
???1. 整數(shù)類型(重點重點重點)
整數(shù)類型 | 字節(jié)數(shù) | 無符號范圍 | 有符號范圍 |
TINYINT(微整型) | 1 | +0 - +255 | -128- +127 |
SMALLINT(小整型) | 2 | ??0-65535 | -32768-32767 |
MEDIUMINT(中整型) | 3 | 0-16777215 | ?-8388608-8388607 |
INT(整型) | 4 | ?0-4294967295 | -2147483648-2147483647 |
BIGINT(大整型) | 8 | 0-188446744073709551615 |
mysql 支持的數(shù)據(jù)類型后面指定該類型的寬度, 基本形式如下:
數(shù)據(jù)類型(顯示寬度)
默認(rèn)顯示寬度: 可以理解為 一個整數(shù)類型的默認(rèn)寬度正好能顯示該數(shù)據(jù)類型的所有值的寬度 ?默認(rèn)長度其實是當(dāng)前位數(shù)減一 為什么要減一 是因為第一位是我們的符號位
?n1 ???| tinyint(4)
?n2 ???| smallint(6)
?n3 ???| mediumint(9)
?n4 ???| int(11)
?n5 ???| bigint(20)
?在整數(shù)類型使用是 可以配置zerofill 參數(shù) zerofill 表示數(shù)字不足的顯示空間由0來填充補全
出現(xiàn)下面報錯的原因是
Out of range value for column 'n1' at row 1
你的長度超出了范圍
注意:
使用zerofill是 mysql會自動加上unsigned(無符號)屬性 那么該整數(shù)類型只能表示無符號數(shù) ?器顯示長度比默認(rèn)顯示寬度小一
在設(shè)置了顯示寬度時 如果插入的數(shù)據(jù)寬度大于設(shè)置的顯示寬度 數(shù)據(jù)依然可以插入 ?且能夠顯示 ?但是該設(shè)置的寬度失效
數(shù)據(jù)的寬度不能大于默認(rèn)寬度 如果大于默認(rèn)寬度 那么該數(shù)據(jù)已經(jīng)超出該類型的最大值 因為最大值的寬度必須小于等于默認(rèn)寬度 ?如果一個值大于最大值 將不能插入
?
-- 整數(shù)類型還有一個屬性 AUTO_INCREMENT 屬性 ???自增
-- 自增屬性需要配合索引使用
?
-- 如果出現(xiàn)下面報錯 請在你自增屬性后面加上你的索引內(nèi)容
-- ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
-- key(index) 索引
-- 普通索引(index)
-- 唯一索引(unique) ?唯一索引所有值不能有重復(fù)
-- 主鍵索引primary key ?一個數(shù)據(jù)表中只能有一個 ?唯一作用 一般設(shè)置都是自增字段
?
zerofill 零填充
unsigned ??無符號
auto_increment ?自增
只能修飾整數(shù)類型
?2. 浮點數(shù)和定點數(shù)
?mysql 中使用浮點數(shù)和定點數(shù)來表示小數(shù)
浮點數(shù): 單精度浮點數(shù)(float) 和雙精度浮點數(shù)(double)
定點數(shù): DECIMAL
定點數(shù)在存儲空間 是根據(jù)精度來決定的
mysql中可以指定浮點數(shù)的精度: 數(shù)據(jù)類型(M,D)
M 精度 ??是數(shù)據(jù)的總長度 ?小數(shù)點不占位
D ?標(biāo)度 ??小數(shù)點后的長度
在存儲小數(shù)的時候 建議使用decimal類型 定點數(shù)以字符串形式存儲 因此精度要比浮點數(shù)更高 ?而且浮點數(shù)容易出現(xiàn)誤差 這是浮點數(shù)一直存在的問題 如果對數(shù)據(jù)的精度要求很高 還是選擇定點數(shù)比較安全
如果標(biāo)度超出位數(shù)那么他會進(jìn)行四舍五入如果你的精度和標(biāo)度一樣那么我們的整數(shù)位只能是零
?3. 時間
-- 時間戳
-- 2147483647
INT 2147483647
因為php可以有date函數(shù) ?你想處理什么樣子都可以 ?所以我們使用時間戳來存儲我們php的時間
4.?字符串類型
?字符串類型是mysql中用來存儲字符串的數(shù)據(jù)類型 字符串類型包含: VARCHAR ?CHAR ?TEXT ?ENUM ??SET
CHAR 和VARCHAR
字符串類型(M) M-- 該字符串的最大長度 M
?CHAR 定長的字符類型 ?0-255
VARCHAR ?變長的字符類型 5.0以前 0-255 5.0版本以后 0-65535
char(5) 和 varchar(5)區(qū)別
?插入值 ?????char 占用字?jǐn)?shù) ?????varchar占用字?jǐn)?shù)
??1 ??5 ?2
??123??5?4
1234 ?????????5?5
??12345??5?6
CHAR 定長字符類型 ??分配多少空間就占用多少空間 不計算需要的長度 ?處理數(shù)據(jù)速度快
VARCHAR 變長字符類型 ??根據(jù)字符串的長度來分配空間 ?需要計算長度 ??處理數(shù)據(jù)速度稍慢
什么時候用char ?什么時候用varchar
當(dāng)你插入的數(shù)據(jù)長度一直不變的情況下 請使用char ?密碼需要使用char
當(dāng)你插入的數(shù)據(jù)長度是隨時改變的情況下 ?使用varchar ?用戶名需要使用varchar
??ENUM 類型 ?枚舉類型
ENUM(‘值1,值2,值3,,,,,值n’)
n--代表參數(shù)列表中的第n個值 n 65535
ENUM 的值只能去列表中的一個元素
1/65535
SET 類型
在創(chuàng)建表是 set類型的取值范圍是以列表的形式指定的
set(‘值1,值2,值3,。。。值n’);
set 類型的值最多只是64個元素 取值可以是一個或者多個 其他特性和enum類似
1-64/64
三 查看表結(jié)構(gòu)
?DESC 表名 : 縮寫版
?DESCRIBE 表名
?
查看建表語句
SHOW CREATE TABLE 表名
?
四 創(chuàng)建表
1.?建表語法
CREATE ?TABLE ?IF NOT EXISTS 表名稱(
??字段名1 ?類型(長度) 屬性 ?索引,
字段名2 ?類型(長度) 屬性 ?索引,
字段名3 ?類型(長度) 屬性 ?索引,
字段名4 ?類型(長度) 屬性 ?索引,
字段名5 ?類型(長度) 屬性 ?索引,
...
字段名N ?類型(長度) 屬性 ?索引,
) ENGINE =MyISAM ?DEFAULT ?CHARSET =utf8;
a.?設(shè)置主鍵
PRIMARY KEY
字段名 ?數(shù)據(jù)類型 ?PRIMARY KEY
b.?設(shè)置表的非空約束
?字段名 ?數(shù)據(jù)類型 NOT NULL
不為空 只是不為null
c.?設(shè)置表的唯一性
?字段名 數(shù)據(jù)類型 UNIQUE
d.?設(shè)置表字段值的自增
???字段名 數(shù)據(jù)類型 AUTO_INCREMENT
如果你設(shè)置自增就必須加上 索引 PRIMARY KEY
e.?設(shè)置表的字段默認(rèn)值
字段名 數(shù)據(jù)類型 DEFAULT 默認(rèn)值
f.?設(shè)置字段的數(shù)字類型 不能為負(fù)數(shù)
字段名 數(shù)據(jù)類型 UNSIGNED
g.?建表引擎
?MyISAM
?InnoDB
MyISAM 與 InnoDB 的區(qū)別
myisam ?讀取速度快 ?不支持事務(wù)
InnoDB ?讀取速度稍慢 ?支持事務(wù) ??事務(wù)回滾
?
轉(zhuǎn)載于:https://blog.51cto.com/13347002/1980298
總結(jié)
- 上一篇: MVP感言
- 下一篇: Linux是最安全的操作系统么