# 概要:引擎是建表規定的,提供給表使用,不是資料庫的
# 展示所有引擎
show engines;
# innodb(預設): 支援事務, 行級鎖, 外來鍵
create table t11(id int)engine=innodb;
# myisam: 查詢效率要優於innodb, 當不需要支援事務, 行級鎖, 外來鍵, 可以通過設定myisam來優化資料庫
create table t12(id int)engine=myisam;
# blackhole:黑洞,存進去的資料都會消失(可以理解不存資料)
create table t13(id int)engine=blackhole;
# memory:表結構是儲存在硬碟上的,但是表資料全部儲存在記憶體中
create table t14(id int)engine=memory;
'''
安全與非安全
'''
首先我們先看下mysql裡主要有哪些資料型別:
在mysql裡整型分為以下幾類,它們的區別只是表示範圍不一樣而已:
整數型別裡主要注意以下幾點:
unsigned: 無符號型別(非負數),用此型別可以增加資料長度,如上圖顯示。
zerofill:該屬性表示數字不足的顯示空間以0填充(僅是顯示),值得注意的是使用zerofill引數時,mysql會自動加上unsigned屬性。
整數型別還有乙個auto_increment屬性,該屬性可使字段成為自增字段。
浮點型也可以使用以上屬性,但是十分不推薦,在以後的更新中會刪除浮點型中的這些屬性。具體可參看
m是總位數(精度),d是小數點後的位數(小數字)。小數點和(對於負數) -符號不計入 m。
雖然也有float(m,d)和double(m,d)的語法,但是仍然是十分不推薦的,因為可能會影響資料遷移,這樣的語法也將會在以後的mysql的版本中被刪除!
浮點型也可以設定unsigned/zerofill/auto_increment屬性,但是十分不推薦!
char :定長。永遠採用設定的長度儲存資料;
varchar :不定長。在設定的長度內,變長儲存資料;
enum:列舉型。語法enum('0','1')
,字段數值必須是其中乙個!enum
內的內容只能是字串,不可以是數字型別或其他!
set :多選。與enum
類似,只是可以多選,每個元素之間用逗號隔開,注意不要加空格。
year:yyyy(1901/2155)
date:yyyy-mm-dd(1000-01-01/9999-12-31)
time:hh:mm:ss
datetime:yyyy-mm-dd hh:mm:ss(1000-01-01 00:00:00/9999-12-31 23:59:59)
timestamp:yyyy-mm-dd hh:mm:ss(1970-01-01 00:00:00/2038-01-19 ??)
備註:datetime佔8位元組,可以為null;timestamp佔4位元組,有預設值current_timestamp。
在ddl(資料定義語言)裡需要了解很多約束條件,不過我們主要講建立表字段的約束。
"""
primary key:主鍵,唯一標識,表都會擁有,不設定為預設找第乙個 不空,唯一 字段,未標識則建立隱藏字段
foreign key:外來鍵
unique:唯一性資料, 該條欄位的值需要保證唯一,不能重複
auto_increment:自增,只能加給key的int型別字段,作為輔助修飾,乙個表中只能設定乙個自增字段
not null:不為空 - 針對一些字段,如註冊時的使用者名稱,出生人的性別等,這些需求下的字段,只不能設定為null,必須要對其賦值
default:預設值 - 對有預設值意外的字段進行賦值時,有預設值的字段會被賦預設值
unsigned:無符號 - 儲存的數字從0開始
zerofill:0填充 - 存整數時資料長度小於取值範圍長度,會在數字左方用0填充
"""# not null 與 default 限制
# 不能為空,沒有預設值的x,必須賦值
# y、z在沒有賦值情況下,才有預設值,設定值後,採用預設值
mysql>: create table td1 (x int not null, y int default 0, z int default 100);
# 報錯,auto_increment必須設定給 鍵欄位
mysql>: create table td2 (x int auto_increment);
# 報錯,auto_increment必須設定給 int欄位
mysql>: create table td2 (x char(4) auto_increment);
# 報錯,auto_increment欄位最多出現 1次
mysql>: create table td2 (x int unique auto_increment, y int unique auto_increment);
# 正確,主鍵和唯一鍵分析
# x為主鍵:沒有設定primary key時,第乙個 唯一自增鍵,會自動提公升為主鍵
mysql>: create table td21 (x int unique auto_increment, y int unique);
# y為主鍵:沒有設定primary key時,第乙個 唯一自增鍵,會自動提公升為主鍵
mysql>: create table td22 (x int unique, y int unique auto_increment);
# x為主鍵:設定了主鍵就是設定的,主鍵沒設定自增,那自增是可以設定在唯一鍵上的
mysql>: create table td23 (x int primary key, y int unique auto_increment);
# x為主鍵:設定了主鍵就是設定的,主鍵設定了自增,自增字段只能有乙個,所以唯一鍵不能再設定自增了
mysql>: create table td24 (x int primary key auto_increment, y int unique);
# 預設主鍵:沒有設定主鍵,也沒有 唯一自增鍵,那系統會預設新增乙個 隱式主鍵(不可見)
mysql>: create table td25 (x int unique, y int unique);
# 唯一鍵:確保乙個字段,資料不能重複
# 主鍵:是一條記錄的唯一標識(可以理解為資料的編號)
# 聯合唯一
# ip在port不同時,可以相同,ip不同時port也可以相同,均合法
# ip和port都相同時,就是重複資料,不合法
mysql>: create table tu1 (ip char(16), port int, unique(ip, port));
# 也可以設定成 聯合主鍵,道理同 聯合唯一
mysql>: create table tu2 (ip char(16), port int, primary key(ip, port));
# sql可以多行書寫
mysql>:
create table t22(
ip char(16),
port int,
primary key(ip,port)
);# 通常自增字段的 自增索引 會被永久記錄,想清空表並清空自增索引:
mysql>: truncate 資料庫名.表名
MySQL資料型別和約束
常用資料型別如下 資料型別說明 資料型別附錄表 整數型別 型別位元組大小 有符號範圍 signed 無符號範圍 unsigned tinyint 128 127 0 255 smallint 32768 32767 0 65535 mediumint 8388608 8388607 0 167772...
MySQL 資料型別和約束
資料庫中的資料儲存在資料表中,在表中為了更加準確的儲存資料,保證資料的正確有效,可以在建立表的時候,為表新增一些強制性的驗證,比如 資料型別和約束。資料型別是指在建立表的時候為表中字段指定資料型別,只有資料符合型別要求才能儲存起來,使用資料型別的原則是 夠用就行,盡量使用取值範圍小的,而不用大的,這...
MySQL入門 資料型別
mysql支援多種型別,大致可以分為三類 數值 日期 時間和字串 字元 型別。型別大小 範圍 有符號 範圍 無符號 用途tinyint 1 位元組 128,127 0,255 小整數值 smallint 2 位元組 32 768,32 767 0,65 535 大整數值 mediumint 3 位元...