iT邦幫忙

2022 iThome 鐵人賽

DAY 30
0
Software Development

新手小白的每天一點SQL系列 第 30

Day 30 SQLBolt - 14:Altering & Dropping tables & 完賽感言

  • 分享至 

  • xImage
  •  

SQLBolt:https://sqlbolt.com/lesson/introduction

今天是鐵人賽最後一天了,要用修改與刪除資料表做為完結,下面直接開始。

SQL Lesson 17: Altering tables

Day 29 我們講解了如何建立資料表,今天則是要先介紹如何對資料表進行修改,也就是如何重新調整 schema 的設計。

SQLBolt 將其分為:新增欄位刪除欄位重新命名資料表

  • 新增欄位

    -- Altering table to add new column(s)
    ALTER TABLE mytable
    ADD column DataType OptionalTableConstraint 
        DEFAULT default_value;
    
  • 刪除欄位

    -- Altering table to remove column(s)
    ALTER TABLE mytable
    DROP column_to_be_deleted;
    
  • 重新命名資料表

    -- Altering table name
    ALTER TABLE mytable
    RENAME TO new_table_name;
    

以下開始解題:

題目 1

1. Add a column named Aspect_ratio with a FLOAT data type to store the aspect-ratio each movie was released in.
ALTER TABLE Movies
ADD COLUMN Aspect_ratio FLOAT;

-- 網站解法還有給預設值
ALTER TABLE Movies
  ADD COLUMN Aspect_ratio FLOAT DEFAULT 2.39;

題目 2

2. Add another column named Language with a TEXT data type to store the language that the movie was released in. Ensure that the default for this language is English.
ALTER TABLE Movies
ADD COLUMN Language TEXT DEFAULT "English";


介紹到這裡,SQLBolt 也有提醒我們,每個資料庫都有自己修改資料表的語法,我們也來看看吧。

PostgreSQL:Altering tables

在資料表中新增欄位:

ALTER TABLE table_name 
ADD column_name datatype;

在資料表中刪除欄位:

ALTER TABLE table_name 
DROP COLUMN column_name;

修改資料表中欄位的資料類型:

ALTER TABLE table_name 
ALTER COLUMN column_name 
TYPE datatype;

在資料表中增加 NOT NULL 約束:

ALTER TABLE table_name 
MODIFY column_name datatype 
NOT NULL;

在資料表中增加 UNIQUE 約束:

ALTER TABLE table_name
ADD CONSTRAINT MyUniqueConstraint 
UNIQUE(column1, column2...);

在資料表中增加 CHECK 約束:

ALTER TABLE table_name
ADD CONSTRAINT MyUniqueConstraint
CHECK (CONDITION);

在資料表中增加 PRIMARY KEY

ALTER TABLE table_name
ADD CONSTRAINT MyPrimaryKey 
PRIMARY KEY (column1, column2...);

在資料表中刪除約束 CONSTRAINT

ALTER TABLE table_name
DROP CONSTRAINT MyUniqueConstraint;

在資料表中刪除 PRIMARY KEY

ALTER TABLE table_name
DROP CONSTRAINT MyPrimaryKey;

參考資料:PostgreSQL - ALTER TABLE Command

SQL Lesson 18: Dropping tables

最後,要來介紹如何刪除資料表。當然在一般情況下,我們很少這麼做。和建立資料表一樣,如果要刪的資料表不存在,可能就會出現錯誤,我們同樣可以使用 IF EXISTS ,確定有該資料表再進行刪除。

-- Drop table statement
DROP TABLE IF EXISTS mytable;

此外,如果刪除資料表時,該資料表有被其他資料表設為外鍵引用,該資料表就無法被刪除。

比如有一張 表A,它的主鍵被 表B 設為外鍵引用。此時如果我們想要刪除表A,就會產生錯誤訊息。

這時候我們需要把 表A 身上相關的約束都移除。
我們可以使用CASCADE 這個語法來實現:

DROP TABLE mytable CASCADE;

使用 CASCADE 移除掉 表A 被設定的關聯性  這樣就可以順利刪掉表A囉。

接著來做題目吧!

題目 1

-- 1. We've sadly reached the end of our lessons, lets clean up by removing the Movies table
DROP TABLE Movies;

題目 2

-- 2. And drop the BoxOffice table as well
DROP TABLE BoxOffice;

這樣就把我們之前練習用的資料表都刪乾淨啦。

SQL Lesson X: To infinity and beyond!

終於來到最後一篇了,SQLBolt 跟我們說結業啦!

欸但是等一下,右上角還有一個 More Topics 呢,點開來一看:

果然案情沒有這麼單純,還有東西沒學完啦,但鐵人賽已經結束了。那麼接下來的篇章,就拿來當作番外篇吧。

而且,其實還有欠著一篇沒寫呢,在 Day 4本來有要安排一個篇幅紀錄裝機遇到的困難,之後有機會也當做番外片上架吧。

其實,小白我在重新安裝 PostgreSQL 的時候遇到了一些狀況,之後應該也會寫一篇文章來紀錄,敬請期待~


完賽感言

鐵人賽 30 天終於完賽了,回顧當初的目標:

  • 增進對 SQL 的認識 -> check
  • 培養寫作習慣 -> maybe?
  • 一天一篇不掉隊,成功完賽 -> check

應該都算有達成啦,感謝團隊還有我們團長大大之間的互相支持,才能順利完賽!

參考資料:


上一篇
Day 29 SQLBolt - 13:Creating tables
下一篇
【鐵人賽】Day 31 番外篇 - Excel 是資料庫嗎?
系列文
新手小白的每天一點SQL31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0

恭喜完賽!有回去確認當初的目標和進度,以及盤點哪些可以作為番外篇的內容~真的很棒!
尤其最後兩週還身兼值日大大,辛苦了!
週末要好好休息唷~
/images/emoticon/emoticon82.gif

我要留言

立即登入留言