SQLBolt:https://sqlbolt.com/lesson/introduction
今天是鐵人賽最後一天了,要用修改與刪除資料表做為完結,下面直接開始。
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. 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. 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 也有提醒我們,每個資料庫都有自己修改資料表的語法,我們也來看看吧。
在資料表中新增欄位:
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;
最後,要來介紹如何刪除資料表。當然在一般情況下,我們很少這麼做。和建立資料表一樣,如果要刪的資料表不存在,可能就會出現錯誤,我們同樣可以使用 IF EXISTS
,確定有該資料表再進行刪除。
-- Drop table statement
DROP TABLE IF EXISTS mytable;
此外,如果刪除資料表時,該資料表有被其他資料表設為外鍵引用,該資料表就無法被刪除。
比如有一張 表A
,它的主鍵被 表B
設為外鍵引用。此時如果我們想要刪除表A
,就會產生錯誤訊息。
這時候我們需要把 表A
身上相關的約束都移除。
我們可以使用CASCADE
這個語法來實現:
DROP TABLE mytable CASCADE;
使用 CASCADE
移除掉 表A
被設定的關聯性 這樣就可以順利刪掉表A
囉。
接著來做題目吧!
-- 1. We've sadly reached the end of our lessons, lets clean up by removing the Movies table
DROP TABLE Movies;
-- 2. And drop the BoxOffice table as well
DROP TABLE BoxOffice;
這樣就把我們之前練習用的資料表都刪乾淨啦。
終於來到最後一篇了,SQLBolt 跟我們說結業啦!
欸但是等一下,右上角還有一個 More Topics
呢,點開來一看:
果然案情沒有這麼單純,還有東西沒學完啦,但鐵人賽已經結束了。那麼接下來的篇章,就拿來當作番外篇吧。
而且,其實還有欠著一篇沒寫呢,在 Day 4本來有要安排一個篇幅紀錄裝機遇到的困難,之後有機會也當做番外片上架吧。
其實,小白我在重新安裝 PostgreSQL 的時候遇到了一些狀況,之後應該也會寫一篇文章來紀錄,敬請期待~
鐵人賽 30 天終於完賽了,回顧當初的目標:
check
maybe?
check
應該都算有達成啦,感謝團隊還有我們團長大大之間的互相支持,才能順利完賽!
參考資料:
恭喜完賽!有回去確認當初的目標和進度,以及盤點哪些可以作為番外篇的內容~真的很棒!
尤其最後兩週還身兼值日大大,辛苦了!
週末要好好休息唷~