mysql引擎模式_mysql引擎,完整的见表语句,数据库模式, 常用数据类型,约束条件...
引擎
show engines : 查看引擎
innodb(默認引擎):支持事務,行級鎖,外鍵myisam:查詢效率由于innodb,不需要支持事務,行級鎖,外鍵,可以選用myisam來優化數據庫
mysql> create table t1(id int)engine=innodb;
mysql> create table t2(id int)engine=myisam;
mysql> create table t3(id int)engine=blackhole;
mysql> create table t4(id int)engine=memory;
eg:
create table t1(name char,id int) engine=innodb
insert into t1 values(1)
一個完整的建表語句
create table 表名 (
字段名1 類型[(寬度)約束條件],
字段名2 類型[(寬度)約束條件],
字段名3 類型[(寬度)約束條件],
)engine=innodb charset="utf8";
#engine 指引擎,charset指字符編碼集
數據庫模式:
嚴格模式:超出范圍報錯 ? ?? 非嚴格模式:超出范圍不報錯
show variables like "%sql_mode%" 查看當前數據庫模式,%代表模糊查找
setglobal sql_mode="strict_trans_tables"; 設置數據庫模式
no_engine_substitution:非安全性,默認
strict_trans_tables:安全模式(嚴格模式)
mysql數據類型
規定數據存放的哪些數據
整形 浮點型 字符型 時間類型 枚舉類型 集合類型
整形:(長度默認是11)
整形: 不同類型所占字節數不一樣,決定所占空間及存放數據大小限制
tinyint:1字節-128 到 127smallint:2字節
mediumint:3字節
int:4字節
bigint:8字節
形式? tinyint??? smallint?? mediumint?? int??? bigint
字節? 1(255) ? ? ?? 2 ? ? ? ?? 3 ? ? ? ? 4 ? ? ? 8
寬度:
1.不能決定整形存放數據的寬度,超過寬度可以存放,最終由數據類型所占字節決定
2.如果沒有超過寬度,且有zerofill限制,會用0填充前置位的不足為
3.沒有必要規定整形的寬度,默認設置的寬度就為最大寬度
整形的限制:不是容量限制,而是顯示寬度
create table t1(id int(5) zerofill)? 當查看的數是小于長度5,用0補上
浮點型
float ??double ?? ?decimal
字節? 4???? ??8?? ? (自定義)
float:4字節 精度最低,最常用
double:8字節 精度高,占位多
decimal:自定義字節字符串存,全精度
float(M,D) M為總位數,D為小數位
根據總位數可以算出整數位的位數
float(6,3)
字符集
char:定長 一定按規定存放數據,以規定寬度讀取數據
varchar:不定長 首先根據數據長度計算寬度,并在數據開始以數據頭方式將寬度信息保存起來,計算耗時
寬度:
char(4):以四個字符長度存儲,超出報錯浪費空間,以空間換取時間效率,減少IO
varchar(4):數據長度決定字符長度,但也不能超出長度,節省空間
總結:數據長度相近的數據提倡用char來存取數據,數據需要高速存取,異空間換時間char(3)? 在硬盤保存為3 字符長度
yxx exx lxx zxx char(3)
如果是char類型 ,數據不足,空格補全
smysql自動去除空格 select *from t1 where name='yh'
char 存取效率高/ 浪費存儲空間
varchar 存取效率低于char/節省存儲空間
字符串現出原形:
char_length(x) 字符的個數
我們可以設置sql模式 來讓它現出原形
setglobal sql_mode = "PAD_CHAR_TO_FULL_LENGTH,STRICT_TRANS_TABLES"設置完成后重啟msyql 再次查詢長度
時間類型
year:年 yyyy(1901/2155)
date:年-月-日 yyyy-MM-dd
time:時分秒 HH:mm:ss
datetime:年月日時分秒 yyyy-MM-dd HH-mm-ss 可以為空,不依賴時區
timestamp:年月日時分秒 yyyy-MM-dd HH-mm-ss 不能為空,默認位當前時間,依賴時區
共同點: 時間存取通過字符串類型 都可以使用now()函數來插入當前時間
create table student(
id int primary key auto_increment,
name char(16),
born_year year,
birth date,
class_time time,
reg_time datetime
);
insert into student value(2,'zxx',2000,2018-11-11,now(),now());
枚舉與集合
枚舉 enum:單選
集合 set:多選
性別:單選
愛好:多選
create table t1 (
sex enum('male',"female","wasai") not null default "wasai"", #枚舉
hobbies set("play","read","music") #集合
);
insert into t1(sex,hobbit) values("male","play,read");
約束條件
foreign ket:外鍵(聯合索引)
主鍵: 表默認都有主鍵
primary key:主鍵(不為空,唯一性)
單例主鍵:
create table t1(id int primary key)
聯合主鍵:
create table t1(ip char(16),port int,primary key(ip,port))
唯一性:
unique key: 唯一性約束,聯合唯一
單列唯一(單個字段不能重復)
create table t1(id int unique)
聯合唯一(指聯合的字段不能同時重復)
create table t1(
ip char(16),
port int,
unique(ip,port)
)
自增:
auto_increment:自增,只能跟key字段連用
create table t1(id int primary key auto_increment )notnull:不能為空
default:默認值
unsigned : 無符號
zerofill : 0填充
總結
以上是生活随笔為你收集整理的mysql引擎模式_mysql引擎,完整的见表语句,数据库模式, 常用数据类型,约束条件...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 清除浮动php,CSS清除浮动
- 下一篇: mysql fio测试_Linux下 f