本資料為產(chǎn)品崗位作為日常工作參考西篓,語言口語化
At 2019/4/15 By David.Yang
修改一張數(shù)據(jù)表
隨著業(yè)務發(fā)展议谷,會出現(xiàn)數(shù)據(jù)表無法支撐當前業(yè)務數(shù)據(jù)的情況炉爆,
這時候我們需要對數(shù)據(jù)表進行變動,
數(shù)據(jù)表發(fā)生變動都通過SQL ALTER TABLE 語句來實現(xiàn)卧晓。
新增字段
-- 新增字段
-- ALTER TABLE `表名` ADD `列名稱` 字段類型(長度) [完整性約束條件] COMMENT '注釋說明' AFTER `位置字段`;
-- [完整性約束條件]指前文講的限定字段的條件芬首,比如:
-- 為空設(shè)定:NOT NULL DEFAULT '0'
示例:
先看看test表現(xiàn)在有哪些字段
SQL
mysql> desc test;
補充兩個字段
SQL
mysql>ALTER TABLE `test` ADD `name` varchar(20) COMMENT '名稱';
Query OK, 0 rows affected (0.17 sec)
Records: 0?Duplicates: 0? Warnings: 0
SQL
mysql>desc test;
看到name字段已經(jīng)成功添加到test表當中了
我們在添加一個字段,并且指定字段在name字段后面逼裆,
而且指定不能為空郁稍,默認值為0
SQL
mysql>ALTER TABLE `test` ADD `gender` int(2) NOT NULL DEFAULT 0 COMMENT '性別 0未知 1女 2男' AFTER `name`;
Query OK, 0 rows affected (0.11 sec)
Records: 0?Duplicates: 0? Warnings: 0
看看現(xiàn)在有哪些字段了
SQL
mysql>desc test;
修改字段屬性
-- 修改字段屬性
-- ALTER TABLE `表名` CHANGE `列名稱``新列名稱`(不需要重命名就用和原來列名) 字段類型(長度) [完整性約束條件]
-- 注意,修改時如果不帶完整性約束條件胜宇,原有的約束條件將丟失耀怜,如果想保留修改時就得帶上完整性約束條件
示例:
我們先添加一個字段,在修改他的屬性
SQL
mysql> ALTER TABLE `test` ADD `brith` int(10) COMMENT '生日';
Query OK, 0 rows affected (0.12 sec)
Records: 0? Duplicates: 0? Warnings: 0
mysql> desc test;
看到brith字段已經(jīng)加進去了
修改字段名稱
示例:
-- 修改字段名稱
-- ALTER TABLE `表名` CHANGE `列名稱` `新列名稱`(不需要重命名就用和原來列名) 字段類型(長度) [完整性約束條件]
-- 注意桐愉,修改時如果不帶完整性約束條件财破,原有的約束條件將丟失,如果想保留修改時就得帶上完整性約束條件
SQL
mysql> ALTER TABLE `test` CHANGE `brith` `brithday` int(10) COMMENT '生日';
Query OK, 0 rows affected (0.02 sec)
Records: 0? Duplicates: 0? Warnings: 0
mysql> desc test;
可以看到brith已經(jīng)改名為brithday
修改字段屬性
-- 修改字段屬性
-- ALTER TABLE `表名` MODIFY `列名稱` 字段類型(長度) [完整性約束條件]
-- 注意从诲,修改時如果不帶完整性約束條件左痢,原有的約束條件將丟失,如果想保留修改時就得帶上完整性約束條件
示例:
-- 修改brithday類型由數(shù)值改成字符串
SQL
mysql> ALTER TABLE `test` MODIFY `brithday` VARCHAR(20) COMMENT '生日';
Query OK, 1 row affected (0.08 sec)
Records: 1? Duplicates: 0? Warnings: 0
mysql> desc test;
可以看到brithday已經(jīng)由數(shù)值變成了一種文本格式
示例:
-- 將brithday移到name后面
SQL
mysql>ALTER TABLE `test` MODIFY `brithday` VARCHAR(20) COMMENT '生日' AFTER `name`;
Query OK, 0 rows affected (0.09 sec)
Records: 0?Duplicates: 0? Warnings: 0
mysql>DESC test;
可以看到成功講brithday移動到了name后面
刪除一個字段列
刪除一個不再需要的字段使用DROP 語句,
在刪除數(shù)據(jù)列之前應該確定業(yè)務當中已經(jīng)不再使用這個字段抖锥,
當前使用到的地方都已經(jīng)做了遷移,
否則…
-- 刪除列
-- ALTER TABLE `表名字` DROP `字段名稱`
示例:
此處先創(chuàng)建一個字段碎罚,
后然再將其刪除
SQL
mysql> ALTER TABLE `test` ADD `deleted` varchar(20) COMMENT '刪除演示字段';
Query OK, 0 rows affected (0.10 sec)
Records: 0? Duplicates: 0? Warnings: 0
mysql> desc test;
將其刪除
SQL
mysql>ALTER TABLE `test` DROP `deleted`;
Query OK, 0 rows affected (0.10 sec)
Records: 0?Duplicates: 0? Warnings: 0
mysql>desc test;
對字段值管理默認值
添加默認值
? 新建字段時指定默認值
我們可以在一個字段創(chuàng)建時就可以進行默認值賦值
-- 新增字段
-- 前面講 ALTER TABLE `表名` ADD `字段名` 這個語法時講到約束條件里面是可以將默認值之類進行規(guī)定
演示:
SQL
mysql> ALTER TABLE `test` ADD `age` int(4) DEFAULT 18;
Query OK, 0 rows affected (0.14 sec)
Records: 0? Duplicates: 0? Warnings: 0
mysql> desc test;
設(shè)定age默認值為18磅废,之后所有數(shù)據(jù)在不賦予age時數(shù)據(jù)庫默認會填入18
注:
新字段創(chuàng)建后,存量數(shù)據(jù)也會被賦予默認值
? 修改已存在字段的默認值
-- 已存在字段設(shè)置默認值
-- ALTER TABLE `表名` ALTER `字段名` SET DEFAULT '默認值';
演示:
SQL
mysql> ALTER TABLE `test` ALTER `name` SET DEFAULT '匿名用戶';
Query OK, 0 rows affected (0.01 sec)
Records: 0? Duplicates: 0? Warnings: 0
mysql> desc test;
注:
針對已存在的字段進行默認值賦予荆烈,
存量數(shù)據(jù)不受影響拯勉,不會被賦值,
新數(shù)據(jù)將會賦予默認值憔购。
刪除默認值
使一個字段的默認值失效宫峦,直接刪除即可。
-- 刪除默認值
-- ALTER TABLE `表明` ALTER `字段名` DROP DEFAULT;
演示:
SQL
mysql> ALTER TABLE `test` ALTER `name` DROP DEFAULT;
Query OK, 0 rows affected (0.02 sec)
Records: 0? Duplicates: 0? Warnings: 0
mysql> desc test;
我們可以發(fā)現(xiàn)name的默認值已經(jīng)不存在
數(shù)據(jù)表重命名
我先復制一張表出來玫鸟,然后再演示刪除一張表导绷。
演示:
SQL
mysql> CREATE TABLE `test1` SELECT * FROM `test`;
Query OK, 1 row affected (0.05 sec)
Records: 1? Duplicates: 0? Warnings: 0
mysql> show tables;
再對表進行重命名
-- ALTER TABLE `表名字` RENAME `表新名字`
演示:
SQL
mysql>ALTER TABLE `test1` RENAME `test2`;
Query OK, 0 rows affected (0.02 sec)
mysql>show tables;
可以發(fā)現(xiàn)表已經(jīng)由test1改名為test2