06. MySQL的資料型別
1. 整型
- 一個無符號數一定是非負數
create table t3( age tinyint unsigned );
-
顯示寬度 (zerofill) 整型顯示寬度, 位數不足時用 0 填充
create table t4( id int(10) zerofill primary key auto_increment, name char(32) ); insert into t4 values(12345, '5個'); insert into t4 values(1234567890, '10個'); insert into t4 values(123456789012, '12個');‐‐‐》越界 select * from t4;
2. 浮點型
定點數的位數更加長 使用方式:
- float(M,D)
- double(M,D)
- decimal(M,D)
- M 是支援多少個長度, D 是小數點後面的位數
create table t5 (
a float(10, 2),
b double(10, 2),
c decimal(10, 2)
);
3. 字串型別
CHAR 與 VARCHAR 型別的區別
字串、浮點型等都可以隨意指定大小, 那麼是不是平時操作的時候隨意指定一個就可以呢?
答:不是, 資料型別並不是越大越好, 越大的型別會造成資料臃腫, 儲存空間佔用過大, 資料檢索也會變慢
4. 列舉(enum)
多選一的時候使用的一種資料型別
在前端使用單選框的時候, 列舉型別可以發揮作用
列舉型別的優點:
- 限制了可選值
- 節省空間
- 執行效率高
create table t6( name varchar(32), sex enum('男','女','保密') default '保密' ); ‐‐ 列舉型別的計數預設從1開始 insert into t6 set name='南鄉',sex=1; insert into t6 values('南鄉',1);
5. 集合(set)
SET最多可以有64個不同的成員。類似於核取方塊, 有多少可以選多少。
create table t7 (
name varchar(32),
hobby set('吃','睡','玩','喝','抽')
);
insert into t7 values('張三','睡,抽,玩,吃,喝');
insert into t7 values('李四','睡,抽');
- 為什麼不是用 set 型別?
在現代網站開發中, 多選框的值有上千個, 值儲存的空沒有索引用的多- 那核取方塊的問題怎麼解決?
將核取方塊的值單獨設計成一張表
6. 時間型別
6.1 datetime
create table datetime_test (
create_at datetime
);
insert into datetime_test values('2020‐11‐13 16:54:00');
insert into datetime_test values('2020/11/13 16:54:00');
insert into datetime_test values(now());
insert into datetime_test values('2019/4/2'); -- 預設時間是00:00:00
insert into datetime_test values('16:54:00'); -- 錯誤
‐‐ 年份最大支援4個長度
insert into datetime_test values('10000/4/2 16:54:00'); ‐‐ 錯誤
insert into datetime_test values('9999/4/2 16:54:00');
6.2 time
create table time_test (
create_at time
);
insert into time_test values('12:12:12');
insert into time_test values('100:12:12');
insert into time_test values('‐100:12:12');
insert into time_test values('10 10:12:12');
‐‐ 時間的範圍是: [‐838:59:59 ‐ 838:59:59]
insert into time_test values('839:12:12'); ‐‐ 錯誤的
6.3 timestamp 時間戳型別
- 時間戳型別在顯示方面和datetime是一樣的, 在儲存上不一樣
- 範圍從 1970-1-1 0:0:0 到 2038-1-19 11:14:07
- 時間戳使用 4 個位元組表示
- 該值大小與儲存的位長有關: 2 ** (4 * 8 - 1)
create table timestamp_test (
create_time timestamp
);
insert into timestamp_test values(now());
insert into timestamp_test values('2038‐1‐19 11:14:07'); ‐‐ 時間戳最大值
insert into timestamp_test values('2038‐1‐19 11:14:08'); ‐‐ 錯誤
6.4 year
create table `year`(
create_at year
);
‐‐ 從1900年開始 ‐ 1900+255
insert into `year` values(now());
insert into `year` values('2155'); ‐‐ 年份最大值
insert into `year` values('2156'); ‐‐ 錯誤
6.7 布林型
mysql中的bool型別也是1和0
create table `bool`(
cond boolean
);
insert into `bool` set cond=True; ‐‐ 成功
insert into `bool` set cond=False; ‐‐ 成功
insert into `bool` set cond=1; ‐‐ 成功
insert into `bool` set cond=10; ‐‐ 成功
insert into `bool` set cond=‐1; ‐‐ 成功
insert into `bool` set cond=0; ‐‐ 成功
insert into `bool` set cond=0.1; ‐‐ 成功
insert into `bool` set cond='True'; ‐‐ 失敗
6.8 列的屬性
- 插入的值是否可以為空
- null : 是可以為空,預設不寫
- not null : 不可以為空,如果插入的時候,摸個欄位的值為空,則報錯
create table null_test ( id int primary key auto_increment, username varchar(32) not null, pwd varchar(16) null ); insert into null_test values(null,null,null);
- default
預設值一般是和null做搭配的create table default_test ( id int primary key auto_increment, username varchar(32) default 'admin' not null, pwd varchar(16) default 123456 ); insert into default_test (username) values ('admin');
- auto_increment
- 自動增長的列
- 預設從 1 開始
- 常配合主鍵使用的
create table auto_inc ( id int primary key auto_increment, name varchar(32) ); insert into auto_inc (name) values ('aaa'), ('bbb'), ('ccc'); select * from auto_inc; /* 輸出: +‐‐‐‐+‐‐‐‐‐‐+ | id | name | +‐‐‐‐+‐‐‐‐‐‐+ | 1 | aaa | | 2 | bbb | | 3 | ccc | +‐‐‐‐+‐‐‐‐‐‐+ */
- primary key
- 主鍵一般是唯一的標識
- 特性:不能為空,也不能重複,一張表當中只可以擁有一個主鍵
‐‐ 這裡只有一個主鍵,這種主鍵叫做聯合主鍵, 在專案中使用較少 create table double_pri_test ( id int, sid int, primary key(id,sid) ); insert into double_pri_test values (1, 1); insert into double_pri_test values (1, 2); ‐‐ 成功 insert into double_pri_test values (2, 1); ‐‐ 成功 insert into double_pri_test values (1, 1); ‐‐ 失敗
- unique
- 唯一鍵,保證列當中的每一個資料都不重複
- 郵箱不可以重複,手機號不可以重複
create table test_uniq ( id int auto_increment primary key, mobile char(11) unique ); insert into test_uniq set mobile=13999999999;
- comment
- 欄位說明: 給開發者看的, 一般用來對相應欄位進行說明
create table test_cmt ( ctime datetime comment '這個欄位代表建立日期' );
- 欄位說明: 給開發者看的, 一般用來對相應欄位進行說明
6.9 SQL註釋
- 單行註釋: -- 你好
- 多行註釋: /*人類無聲無息地成為娛樂的附庸,
毫無怨言,甚至心甘情願,其結果是,
我們成了一個娛樂至死的物種。 */ - MySQL 獨有的單行註釋: # 謙遜基於力量,高傲基於無能。
相關文章
- MySQL 的資料型別MySql資料型別
- MySQL資料型別MySql資料型別
- [Mysql]資料型別MySql資料型別
- MYSQL 資料型別MySQL 資料型別
- mysql 常用的資料型別MySql資料型別
- MySQL基本資料型別MySql資料型別
- mysql 資料型別TIMESTAMPMySQL 資料型別
- 【MySQL】資料型別的基本用法MySql資料型別
- Mysql 資料型別之整數型別MySQL 資料型別
- Java 支援的資料型別與 MySQL 支援的資料型別對比Java資料型別MySql
- MySQL基礎之----資料型別篇(常用資料型別)MySql資料型別
- MySQL 資料型別詳解MySQL 資料型別
- MySQL資料型別筆記MySql資料型別筆記
- mysql常見資料型別MySql資料型別
- MySQL資料型別DECIMAL用法MySql資料型別Decimal
- MySQL入門--資料型別MySql資料型別
- MySQL JSON資料型別操作MySqlJSON資料型別
- 詳解MySQL資料型別MySql資料型別
- MySQL中資料型別的驗證MySql資料型別
- Mysql支援的資料型別(總結)MySql資料型別
- MySQL入門系列:MySQL資料型別MySql資料型別
- Java 資料型別和 MySql 資料型別對應一覽表JavaMySQL 資料型別
- 1-02:MySQL中的資料型別MySql資料型別
- PHP 操作 mysql blob 資料型別的欄位PHPMySql資料型別
- MYSQL資料庫型別與JAVA型別對應關係MySql資料庫型別Java
- 《MySQL 基礎篇》七:資料型別MySql資料型別
- MySQL資料型別操作(char與varchar)MySql資料型別
- python 與 Mysql 資料型別轉換PythonMySQL 資料型別
- mysql整數資料型別深入解析MySql資料型別
- sql學習(mysql)(1)資料型別MySql資料型別
- MySQL 資料庫的對庫的操作及其資料型別悔鋒MySql資料庫資料型別
- js資料型別之基本資料型別和引用資料型別JS資料型別
- 資料型別: 資料型別有哪些?資料型別
- 建立一個MySQL資料庫中的datetime型別MySql資料庫型別
- 拋磚系列之-MySQL中的資料型別JSONMySql資料型別JSON
- mysql資料庫中decimal資料型別比較大小MySql資料庫Decimal資料型別
- 高效能Mysql(第3版)_資料型別的選擇_整數型別MySql資料型別
- MySQL 資料型別分類和選擇MySQL 資料型別