產(chǎn)品操作MySQL第3篇 – 修改一張表

MYSQL

本資料為產(chǎn)品崗位作為日常工作參考,語言口語化

At 2019/4/15 By David.Yang


修改一張數(shù)據(jù)表

隨著業(yè)務(wù)發(fā)展,會出現(xiàn)數(shù)據(jù)表無法支撐當(dāng)前業(yè)務(wù)數(shù)據(jù)的情況,

這時(shí)候我們需要對數(shù)據(jù)表進(jìn)行變動(dòng),

數(shù)據(jù)表發(fā)生變動(dòng)都通過SQL ALTER TABLE 語句來實(shí)現(xiàn)。


新增字段

-- 新增字段

-- ALTER TABLE `表名` ADD `列名稱` 字段類型(長度) [完整性約束條件] COMMENT '注釋說明' AFTER `位置字段`;

-- [完整性約束條件]指前文講的限定字段的條件,比如:

-- 為空設(shè)定:NOT NULL DEFAULT '0'


示例:

先看看test表現(xiàn)在有哪些字段

SQL

mysql> desc test;



補(bǔ)充兩個(gè)字段

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表當(dāng)中了

我們在添加一個(gè)字段,并且指定字段在name字段后面,

而且指定不能為空,默認(rèn)值為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 `列名稱``新列名稱`(不需要重命名就用和原來列名) 字段類型(長度) [完整性約束條件]

-- 注意,修改時(shí)如果不帶完整性約束條件,原有的約束條件將丟失,如果想保留修改時(shí)就得帶上完整性約束條件

示例:

我們先添加一個(gè)字段,在修改他的屬性

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)加進(jìn)去了


修改字段名稱

示例:

-- 修改字段名稱

-- ALTER TABLE `表名` CHANGE `列名稱` `新列名稱`(不需要重命名就用和原來列名) 字段類型(長度) [完整性約束條件]

-- 注意,修改時(shí)如果不帶完整性約束條件,原有的約束條件將丟失,如果想保留修改時(shí)就得帶上完整性約束條件

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 `列名稱` 字段類型(長度) [完整性約束條件]

-- 注意,修改時(shí)如果不帶完整性約束條件,原有的約束條件將丟失,如果想保留修改時(shí)就得帶上完整性約束條件

示例:

-- 修改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移動(dòng)到了name后面


刪除一個(gè)字段列

刪除一個(gè)不再需要的字段使用DROP 語句,

在刪除數(shù)據(jù)列之前應(yīng)該確定業(yè)務(wù)當(dāng)中已經(jīng)不再使用這個(gè)字段,

當(dāng)前使用到的地方都已經(jīng)做了遷移,

否則…

-- 刪除列

-- ALTER TABLE `表名字` DROP `字段名稱`

示例:

此處先創(chuàng)建一個(gè)字段,

后然再將其刪除

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;


對字段值管理默認(rèn)值

添加默認(rèn)值

? 新建字段時(shí)指定默認(rèn)值

我們可以在一個(gè)字段創(chuàng)建時(shí)就可以進(jìn)行默認(rèn)值賦值

-- 新增字段

-- 前面講 ALTER TABLE `表名` ADD `字段名` 這個(gè)語法時(shí)講到約束條件里面是可以將默認(rèn)值之類進(jìn)行規(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默認(rèn)值為18,之后所有數(shù)據(jù)在不賦予age時(shí)數(shù)據(jù)庫默認(rèn)會填入18


注:

新字段創(chuàng)建后,存量數(shù)據(jù)也會被賦予默認(rèn)值


? 修改已存在字段的默認(rèn)值

-- 已存在字段設(shè)置默認(rèn)值

-- ALTER TABLE `表名` ALTER `字段名` SET DEFAULT '默認(rèn)值';


演示:

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;


注:

針對已存在的字段進(jìn)行默認(rèn)值賦予,

存量數(shù)據(jù)不受影響,不會被賦值,

新數(shù)據(jù)將會賦予默認(rèn)值。


刪除默認(rèn)值

使一個(gè)字段的默認(rèn)值失效,直接刪除即可。

-- 刪除默認(rèn)值

-- 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的默認(rèn)值已經(jīng)不存在


數(shù)據(jù)表重命名

我先復(fù)制一張表出來,然后再演示刪除一張表。


演示:

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;


再對表進(jìn)行重命名


-- 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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • MYSQL 基礎(chǔ)知識 1 MySQL數(shù)據(jù)庫概要 2 簡單MySQL環(huán)境 3 數(shù)據(jù)的存儲和獲取 4 MySQL基本操...
    Kingtester閱讀 8,050評論 5 115
  • 一、數(shù)據(jù)庫簡介 1.數(shù)據(jù)庫系統(tǒng) 1.1數(shù)據(jù)庫 DataBase【DB】,指的是長期保存到計(jì)算機(jī)上的數(shù)據(jù),按照一定順...
    鄭元吉閱讀 679評論 0 6
  • 什么是數(shù)據(jù)庫? 數(shù)據(jù)庫是存儲數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序。每個(gè)數(shù)據(jù)庫具有一個(gè)或多個(gè)不同的API,用于創(chuàng)建,訪問,管理...
    chen_000閱讀 4,131評論 0 19
  • 1、數(shù)據(jù)庫(database)管理 1.1 create 創(chuàng)建數(shù)據(jù)庫 1.2 show 查看所有數(shù)據(jù)庫 1.3 a...
    七秒浮屠閱讀 832評論 0 3
  • 馬克思老婆子布置作業(yè), 現(xiàn)寫現(xiàn)交那種, 我不在班。
    達(dá)浪打啦閱讀 106評論 0 0

友情鏈接更多精彩內(nèi)容