MySQL入門(引擎 資料型別 約束)

2022-04-29 14:42:05 字數 4065 閱讀 5192

# 概要:引擎是建表規定的,提供給表使用,不是資料庫的

# 展示所有引擎

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 位元...