目錄
- 創建資料表
- 列約束
- 查看資料表結構
- 列型別(欄位型別)
- 整型
- 浮點型
- 字串
- 時間日期型別
- Date
- Time
- Datetime
- Timestamp
- Year
- 列舉enum
- 修改表名
- 增加欄位
- 洗掉欄位
- 修改欄位
- 洗掉表
- 復制表結構
創建資料表
語法:
create table 表名(
欄位名 列型別 [可選引數],
欄位名 列型別 [可選引數]
....
) charset=utf8;
如:
create table t4(
id int,
name char(15)
)charset=utf8;
列約束
- auto_increment 自增長1
- primary key 主鍵索引,加快查詢速度,列的值不能重復
- not null 標識該欄位不能為空
- default 該欄位設定默認值
create table t5(
id int primary key auto_increment,
name char(15) not null default '',
)charset=utf8;
查看資料表結構
desc t5;
show create table t5;
列型別(欄位型別)
整型
| 型別 | 大小 | 范圍(無符號) |
|---|---|---|
| Tinyint | 1個位元組 | (0-255) |
| Smallint | 2個位元組 | (0-65535) |
| Mediumint | 3個位元組 | |
| int(一般直接用int) | 4個位元組 | |
| bigint | 8個位元組 |
注:unsigned 加上代表不能取負數,只適用于整型, 基本語法:在型別之后加上一個 unsigned
應用場景:根據公司業務的場景,來選取合適的型別
浮點型
- float
Float又稱之為單精度型別:系統提供4個位元組用來存盤資料,但是能表示的資料范圍比整型大的多,大概是10^38;只能保證大概7個左右的精度(如果資料在7位數以內,那么基本是準確的,但是如果超過7位數,那么就是不準確的)
基本語法
Float:表示不指定小數位的浮點數
Float(M,D):表示一共存盤M個有效數字,其中小數部分占D位
Float(10,2):整數部分為8位,小數部分為2位
- decimal
Decimal定點數:系統自動根據存盤的資料來分配存盤空間,每大概9個數就會分配四個位元組來進行存盤,同時小數和整數部分是分開的,
Decimal(M,D):M表示總長度,最大值不能超過65,D代表小數部分長度,最長不能超過30,
比較
mysql> create table t6(
-> id int unsigned auto_increment primary key,
-> salary decimal(16,10),
-> num float
-> )charset=utf8;
insert into t6 values(0,500023.2312345678, 5000.2374837284783274832);
mysql> select * from t6;
+----+-------------------+---------+
| id | salary | num |
+----+-------------------+---------+
| 1 | 500023.2312345678 | 5000.24 |
+----+-------------------+---------+
decimal比較精確,適合描述錢
字串
- char(長度): 定長字符:指定長度之后,系統一定會分配指定的空間用于存盤資料,char(L),L長度為0到255
- varchar(長度):變長字符,指定長度之后,系統會根據實際存盤的資料來計算長度,分配合適的長度(資料沒有超出長度),長度理論值位0到65535
區別:
Char和varchar資料存盤對比(utf8,一個字符都會占用3個位元組)
| 存盤資料 | Char(2) | Varchar(2) | Char所占位元組 | Varchar所占位元組 |
|---|---|---|---|---|
| A | A | A | 2 * 3 = 6 | 1 * 3 + 1 = 4 |
| AB | AB | AB | 2 * 3 = 6 | 2 * 3 + 1 = 7 |
-
char 無論插入的字符是多少個,永遠固定占規定的長度
-
varchar:根據插入的字符的長度來計算所占的位元組數,但是有一個位元組是用來保存字串大小的
-
char的資料查詢效率比varchar高
時間日期型別
Date
日期型別:系統使用三個位元組來存盤資料,對應的格式為:YYYY-mm-dd,能表示的范圍是從1000-01-01 到9999-12-12,初始值為0000-00-00
Time
時間型別:能夠表示某個指定的時間,但是系統同樣是提供3個位元組來存盤,對應的格式為:HH:ii:ss,但是mysql中的time型別能夠表示時間范圍要大的多,能表示從-838:59:59~838:59:59,在mysql中具體的用處是用來描述時間段,
Datetime
日期時間型別:就是將前面的date和time合并起來,表示的時間,使用8個位元組存盤資料,格式為YYYY-mm-dd HH:ii:ss,能表示的區間1000-01-01 00:00:00 到9999-12-12 23:59:59,其可以為0值:0000-00-00 00:00:00
Timestamp
時間戳型別:mysql中的時間戳只是表示從格林威治時間開始,但是其格式依然是:YYYY-mm-dd HH:ii:ss
Year
年型別:占用一個位元組來保存,能表示1900~2155年,但是year有兩種資料插入方式:0~99和四位數的具體年
mysql> create table t7(
-> d date,
-> t time,
-> dt datetime
-> );
mysql> insert into t7 values(now(),now(),now());
mysql> select * from t7;
+------------+----------+---------------------+
| d | t | dt |
+------------+----------+---------------------+
| 2019-10-29 | 15:37:02 | 2019-10-29 15:37:02 |
+------------+----------+---------------------+
1 row in set (0.00 sec)
列舉enum
就是列舉出所有的選項
mysql> create table t8(
-> id int unsigned auto_increment primary key,
-> name char(15) not null,
-> age int, ,
-> gender enum('男','女')
-> )charset=utf8;
insert into t8 values(0,'老張',36,1);
mysql> select * from t8;
+----+------+------+--------+
| id | name | age | gender |
+----+------+------+--------+
| 1 | 老張 | 36 | 男 |
+----+------+------+--------+
修改表名
alter table t8 rename info;
rename table t7 to t777;
增加欄位
語法: alter table 表名 add 欄位名 列型別 [可選引數]
alter table t6 add name char(25) not null default '';
默認是添加在最后一列的
--添加在第一列
alter table t6 add name char(25) not null default '' first;
--添加在指定列
alter table t6 add name char(25) not null default '' after id;
洗掉欄位
語法:alter table 表名 drop 欄位名
alter table t9 drop name;
修改欄位
修改列型別
語法:alter table 表名 modify 欄位名 列型別 [約束條件]
alter table t9 modify name1 char(20);
修改欄位名:
語法:alter table 表名 change 舊欄位名 新欄位名 新的列型別 [約束條件]
alter table t6 change sex gender enum('male', 'female')
洗掉表
drop table 表名;
復制表結構
create table t99 like t7;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/114644.html
標籤:MySQL
上一篇:day 34 作業
下一篇:select子句
