此文章以MySQL 8.0版本為例
自測:
設計一張員工信息表,要求如下:
- 編號(純數字)
- 員工工號 (字符串類型,長度不超過10位)
- 員工姓名(字符串類型,長度不超過10位)
- 性別(男/女,存儲一個漢字)
- 年齡(正常人年齡,不可能存儲負數)
- 身份證號(二代身份證號均為18位,身份證中有X這樣的字符)
- 入職時間(取值年月日即可)
如果能直接寫出來,或者均已知曉該使用何種數據格式,則可以跳過本文了(你有更重要的內容要看,不要在這消費太多時間)。
零、本文綱要
- 一、SQL
- 二、DDL
- 數據庫操作
- 表操作
② 數據類型
- 三、自測
一、SQL
1. 通用語法
1). SQL語句可以單行或多行書寫,以分號";"結尾。
2). SQL語句可以使用"空格/"縮進來增強語句的可讀性。
3). MySQL數據庫的SQL語句不區分大小寫,關鍵字建議使用大寫。
4). 注釋:
單行注釋:-- 注釋內容 或 # 注釋內容
多行注釋:/* 注釋內容 */
2. SQL分類
SQL語句根據其功能,主要分為四類:DDL、DML、DQL、DCL。
二、DDL
1. 數據庫操作
Data Definition Language 數據定義語言,用來定義數據庫對象(數據庫,表,字段)
Ⅰ 查詢所有數據庫 show databases ;
Ⅱ 查詢當前數據庫 select database() ;
Ⅲ 創建數據庫 create database [ if not exists ] 數據庫名 [ default charset 字符集 ] [ collate 排序規則 ] ;
Ⅳ 刪除數據庫 drop database [ if exists ] 數據庫名 ;
Ⅴ 切換數據庫 use 數據庫名 ;
2. 表操作
- ① 查詢創建
Ⅰ 查詢當前數據庫所有表 show tables;
Ⅱ 查看指定表結構 desc 表名 ;
Ⅲ 查詢指定表的建表語句 show create table 表名 ;
Ⅳ 創建表結構
CREATE TABLE 表名( 字段1 字段1類型 [ COMMENT 字段1注釋 ], 字段2 字段2類型 [COMMENT 字段2注釋 ], ... ... 字段n 字段n類型 [COMMENT 字段n注釋 ] ) [ COMMENT 表注釋 ] ;
- ② 數據類型
Ⅰ 數值類型
分類 | 類型 | 大小 | 有符號(SIGNED)范圍 | 無符號(UNSIGNED)范圍 | 描述 |
---|---|---|---|---|---|
數值類型 | TINYINT | 1 byte | (-128,127) | (0,255) | 小整數值 |
SMALLINT | 2 bytes | (-32768,32767) | (0,65535) | 大整數值 | |
MEDIUMINT | 3 bytes | (-8388608,8388607) | (0,16777215) | 大整數值 | |
INT或INTEGER | 4 bytes | (-2147483648,2147483647) | (0,4294967295) | 大整數值 | |
BIGINT | 8 bytes | (-263,263-1) | (0,2^64-1) | 極大整數值 | |
FLOAT | 4 bytes | (-3.402823466 E+38,3.402823466351 E+38) | 0 和 (1.175494351 E-38,3.402823466 E+38) | 單精度浮點數值 | |
DOUBLE | 8 bytes | (-1.7976931348623157 E+308,1.7976931348623157 E+308) | 0 和 (2.2250738585072014 E-308,1.7976931348623157 E+308) | 雙精度浮點數值 | |
DECIMAL | 依賴于M(精度)和D(標度)的值 | 依賴于M(精度)和D(標度)的值 | 小數值(精確定點數) |
Ⅱ 字符串類型
分類 | 類型 | 大小 | 描述 |
---|---|---|---|
字符串類型 | CHAR | 0-255 bytes | 定長字符串 |
VARCHAR | 0-65535 bytes | 變長字符串 | |
TINYBLOB | 0-255 bytes | 不超過255個字符的二進制數據 | |
TINYTEXT | 0-255 bytes | 短文本字符串 | |
BLOB | 0-65 535 bytes | 二進制形式的長文本數據 | |
TEXT | 0-65 535 bytes | 長文本數據 | |
MEDIUMBLOB | 0-16 777 215 bytes | 二進制形式的中等長度文本數據 | |
MEDIUMTEXT | 0-16 777 215 bytes | 中等長度文本數據 | |
LONGBLOB | 0-4 294 967 295 bytes | 二進制形式的極大文本數據 | |
LONGTEXT | 0-4 294 967 295 bytes | 極大文本數據 |
CHAR、VARCHAR是常用的類型,其中VARCHAR(20)指的是20個字符(數字、字母、標點符號與漢字等的數量)
關于char和varchar的官方文檔介紹
注意:
a、其中CHAR比較特殊,長度范圍(0-255)。即如果指定CHAR(255),則可以存放255個漢字但字節數超過255bytes的限制,并不會報錯。
b、另外,VARCHAR存儲的內容小于等于255bytes需要1byte存儲長度,超過則需要2bytes存儲長度。
輸入值 | CHAR(4)存儲內容 | 所需存儲空間 | VARCHAR(4)存儲內容 | 所需存儲空間 |
---|---|---|---|---|
'' | ' ' | 4 bytes | '' | 1 byte |
'a' | 'a ' | 4 bytes | 'a' | 2 bytes |
'ab' | 'ab ' | 4 bytes | 'ab' | 3 bytes |
'abc' | 'abc ' | 4 bytes | 'abc' | 4 bytes |
'abcd' | 'abcd' | 4 bytes | 'abcd' | 5 bytes |
注意:
表格第一行存儲的是null值,不是一個空格。
char(4)在內容長度不足4時,右邊會以空格補齊缺失數量。內容長度n,則右邊補4-n個空格。
Ⅲ 日期類型
分類 | 類型 | 大小 | 范圍 | 格式 | 描述 |
---|---|---|---|---|---|
日期類型 | DATE | 3 bytes | 1000-01-01 至 9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 bytes | -838:59:59 至 838:59:59 | HH:MM:SS | 時間值或持續時間 | |
YEAR | 1 bytes | 1901 至 2155 | YYYY | 年份值 | |
DATETIME | 8 bytes | 1000-01-01 00:00:00 至 9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和時間值 | |
TIMESTAMP | 4 bytes | 1970-01-01 00:00:01 至 2038-01-19 03:14:07 | YYYY-MM-DD HH:MM:SS | 混合日期和時間值,時間戳 |
- ③ 修改
Ⅰ 添加字段 ALTER TABLE 表名 ADD 字段名 類型 (長度) [ COMMENT 注釋 ] [ 約束 ];
Ⅱ 修改數據類型 ALTER TABLE 表名 MODIFY 字段名 新數據類型 (長度);
Ⅲ 修改字段名和字段類型 ALTER TABLE 表名 CHANGE 舊字段名 新字段名 類型 (長度) [ COMMENT 注釋 ] [ 約束 ];
Ⅳ 刪除字段 ALTER TABLE 表名 DROP 字段名;
Ⅴ 修改表名 ALTER TABLE 表名 RENAME TO 新表名;
- ④ 刪除
Ⅰ 刪除表 DROP TABLE [ IF EXISTS ] 表名;
Ⅱ 刪除指定表, 并重新創建表 TRUNCATE TABLE 表名;
三、自測
設計一張員工信息表,要求如下:
- 編號(純數字)
- 員工工號 (字符串類型,長度不超過10位)
- 員工姓名(字符串類型,長度不超過10位)
- 性別(男/女,存儲一個漢字)
- 年齡(正常人年齡,不可能存儲負數)
- 身份證號(二代身份證號均為18位,身份證中有X這樣的字符)
- 入職時間(取值年月日即可)
參考:
create table tb_emp(
id int comment '編號',
emp_id varchar(10) comment '工號',
name varchar(10) comment '姓名',
gender char(1) comment '性別',
age tinyint unsigned comment '年齡',
id_number char(18) comment '身份證號',
entry_date date comment '入職時間'
) comment '員工表';
注意:此處自測內容省略了編碼、索引、默認值等內容的設置,僅關注數據類型的使用。實際使用還需考慮其他內容設置。
四、結尾
以上即為MySQL基礎-DDL&數據類型的全部內容,感謝閱讀。