mysql 数据表创建字段类型_MySQL 数据类型简介 创建数据表及其字段约束
數據類型介紹
MySQL 數據類型分類
整型
浮點型
字符類型(char與varchar)
日期類型
枚舉與集合
具體數據類型見這篇博客
MySQL表操作中的約束
primary key 主鍵約束 非空+唯一
unique key 唯一約束
not null 非空約束
foreign key 外鍵約束
創建表的的語法
CREATE TABLE[IF NOT EXISTS] tbl_name(字段名稱字段類型[完整性約束條件])ENGINE=引擎名稱 CHARSET='編碼方式”
??注意:
在同一張表中,字段名不能相同
寬度和約束條件可選,字段名和類型是必須的
最后一個字段后不能加逗號!
整型
分類:TINYINT SMALLINT MEDIUMINT INT BIGINT
作用:存儲年齡,等級,id,各種號碼等
create table t1(id tinyint); # 創建 tinyint類型 tinyint 范圍-128-128
create table t2(x tinyint unsigned); # 創建無符號整數
強調
對于整型來說,數據類型后的寬度并不是存儲限制,而是顯示限制,所以在創建表時,如果字段采用的是整型類型,完全無需指定顯示寬度, 默認的顯示寬度,足夠顯示完整當初存放的數據
浮點型
分類:FLOAT DOUBLE decimal
應用場景:身高,體重,薪資
字段限制特點(5,3)前一位表示所有的位數,后一位表示小數個數
字符類型
分類 char(定長) varchar(變長)
作用:姓名,地址,描述類信息
create table t10(name char(4)) # 超出四個字符報錯,不夠四個字符空格補全
create table t11(name varchar(4)) # 超出四個字符報錯,不夠四個有幾個就存幾個
時間類型
分類
date:2019-05-01
time:11:11:11
Datetime: 2019-01-02 11:11:11
Year:2019
create table student(
id int,
name char(16),
born_year year,
birth date,
study_time time,
reg_time datetime
);
?
枚舉與集合類型
分類
枚舉enum 多選一
集合set 多選多
枚舉
create table user(
id int,
name char(16),
gender enum('male','female','others')
);
插入下面數據時第一句就會報錯因為XXX不在創建的枚舉類型中
insert into user values(1,'小明','xxx') # 報錯
insert into user values(2,'二明','female') # 正確!
集合
create table teacher(
id int,
name char(16),
gender enum('male','female','others'),
hobby set('read','sleep','run','singing')
);
插入的時候只要是插入的數據在集合中就可以,值可以沒有(MySQL80),可以是一個,也可以全都是。
insert into teacher values(1,'小明','male','read,sleep')
約束條件
PRIMARY KEY (PK) 標識該字段為該表的主鍵,可以唯一的標識記錄
FOREIGN KEY (FK) 標識該字段為該表的外鍵
NOT NULL 標識該字段不能為空
UNIQUE KEY (UK) 標識該字段的值是唯一的
AUTO_INCREMENT 標識該字段的值自動增長(整數類型,而且為主鍵)
DEFAULT 為該字段設置默認值
UNSIGNED 無符號
ZEROFILL 使用0填充
not null+default
有時候插入數據的時候,要限制不為空,但是這個時候沒有插入值,我們可以設置默認值,讓默認值去填充沒有插入的數據
create table student2(
id int,
name char(16) not null,
gender enum('male','female','others') default 'male'
);
當設置字段的默認值的時候,不寫數據也不會出錯
insert into student2(id,name) values(1,'小明')
mysql> select * from student2;
+------+--------+--------+
| id | name | gender |
+------+--------+--------+
| 1 | 小明 | male |
+------+--------+--------+
unique
單列唯一
create table user1(
id int unique,
name char(16)
);
insert into user1 values(1,'小明'),(1,'小藍') # 報錯
insert into user1 values(1,'小明'),(2,'小藍') # 成功
聯合唯一
將多個字段設置為唯一,只有當多個字段的值出現重復時才會出現錯誤。
create table server(
id int,
ip char(16),
port int,
unique(ip,port)
)
insert into server values(1,'127.0.0.1',8080); # 成功
insert into server values(2,'127.0.0.1',8080); # 報錯
insert into server values(1,'127.0.0.1',8081); # 報錯
primary key+auto_increment
單從約束角度來說primary key就等價于not null unique,指定not null 和unique兩個字段的時候也會將字段設置為主鍵。
除了約束之外,它還是innodb引擎組織數據的依據,提升查詢效率。
一張表中必須有且只有一個主鍵,如果你沒有設置主鍵,那么會從上到下搜索直到遇到一個非空且唯一的字段自動將其設置為主鍵。
如果表里面沒有指定任何的可以設置為主鍵的字段,那么innodb會采用自己默認的一個隱藏字段作為主鍵,隱藏意味著你在查詢的時候無法根據這個主鍵字段加速查詢了
索引:類似于書的目錄,沒有主鍵就相當于一頁一頁翻著查
一張表中通常都應該有一個id字段,并且通常將改id字段作成主鍵
主鍵
create table t12(
id int primary key,
name char(16),
age int not null unique,
addr char(16) not null unique
)engine=innodb;
desc t12;
-- 將ID字段設置為主鍵
mysql> desc t12;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | char(16) | YES | | NULL | |
| age | int(11) | NO | UNI | NULL | |
| addr | char(16) | NO | UNI | NULL | |
+-------+----------+------+-----+---------+-------+
聯合主鍵
多個字段聯合起來作為表的一個主鍵,本質還是一個主鍵
create table t18(
ip char(16),
port int,
primary key(ip,port)
);
mysql> desc t18;
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| ip | char(16) | NO | PRI | NULL | |
| port | int(11) | NO | PRI | NULL | |
+-------+----------+------+-----+---------+-------+
總結
以上是生活随笔為你收集整理的mysql 数据表创建字段类型_MySQL 数据类型简介 创建数据表及其字段约束的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: struts 修改拦截器修改返回值_关于
- 下一篇: linux cmake编译源码,linu