目錄
1. 第16課 創建表
1.1 知識點
如果要在數據庫中存儲新實體和關係,可以使用CREATE TABLE語句創建新的數據庫表,語句如下:
創建具有可選表約束和默認值的表語句
CREATE TABLE IF NOT EXISTS mytable (
column DataType TableConstraint DEFAULT default_value,
another_column DataType TableConstraint DEFAULT default_value,
…
);
新表的結構由表模式定義,該模式定義一系列列,每個列都有一個名稱,列的屬性,插入值的可選表約束以及可選的默認值。如果已存在具有相同名稱的表,則SQL實現通常會拋出錯誤,因此要禁止錯誤並跳過創建表(如果存在),則可以使用該IF NOT EXISTS子句。
- 表的數據類型(Table data types)
不同的數據庫支持不同的數據類型,但常見的類型支持數字,字符串和其他雜項,如日期、布爾值,甚至二進制數據,一下是表中的數據類型。
數據類型 | 描述 |
INTEGER , BOOLEAN |
整數數據類型可以存儲整數值,例如數字或年齡的計數。在一些實現中,布爾值僅表示爲僅0或1的整數值。 |
FLOAT ,DOUBLE ,REAL |
浮點數據類型可以存儲更精確的數值數據,如測量值或小數值。根據該值所需的浮點精度,可以使用不同的類型。 |
CHARACTER(num_chars) ,VARCHAR(num_chars) ,TEXT |
基於文本的數據類型可以在各種語言環境中存儲字符串和文本。在處理這些列時,各種類型之間的區別通常相當於數據庫的效率。 CHARACTER和VARCHAR(變量字符)類型都指定了它們可以存儲的最大字符數(較長的值可能被截斷),因此使用大表存儲和查詢會更有效。 |
DATE , DATETIME |
SQL還可以存儲日期和時間戳,以跟蹤時間序列和事件數據。特別是在跨時區操縱數據時,它們可能很難處理。 |
BLOB | 最後,SQL可以將二進制數據存儲在數據庫中的blob中。這些值通常對數據庫不透明,因此您通常必須使用正確的元數據存儲它們以重新查詢它們。 |
文檔: MySQL, Postgres, SQLite, Microsoft SQL Server |
- 表的約束(Table constraints)
這裏僅羅列了一些常見的約束,沒有深入研究表約束。
約束 | 描述 |
PRIMARY KEY | 這意味着此列中的值是唯一的,並且每個值都可用於標識此表中的單個行。 |
AUTOINCREMENT | 對於整數值,這意味着該值會自動填充並隨每行插入而遞增。並非所有數據庫都支持。 |
UNIQUE | 這意味着此列中的值必須是唯一的,因此您不能在此列中插入具有相同值的另一行作爲表中的另一行。與“PRIMARY KEY”的不同之處在於它不必是表中行的鍵。 |
NOT NULL | 這意味着插入的值不能爲“NULL”。 |
CHECK (expression) | 這允許您運行更復雜的表達式來測試插入的值是否有效。例如,您可以檢查值是正數,還是大於特定大小,或者以特定前綴等開頭。 |
FOREIGN KEY | 這是一致性檢查,可確保此列中的每個值對應另一個表中列中的另一個值。 例如,如果有兩個表,一個列出所有員工ID,另一個列出他們的工資單信息,`FOREIGN KEY`可以確保工資表中的每一行都對應於主員工列表中的有效員工。 |
1.2 練習題
#1.創建一個Database使用以下列命名的新表:
- Name描述數據庫名稱的字符串(文本)
- Version此數據庫的最新版本的數字(浮點)
- Download_count此數據庫下載次數的整數計數
該表沒有約束。
SELECT TABLE FROM database(
Name TEXT,
Version FLOAT,
Download_count INTEGER
);
2. 第17課 更改表
SQL提供了一種方法,使用ALTER TABLE語句添加,刪除或修改列和表約束來更新相應的表和數據庫模式。
2.1 知識點
- 添加列
添加新列的語法類似於在語句中創建新行時的語法CREATE TABLE,需要指定列的數據類型以及要應用於現有行和新行的任何潛在表約束和默認值。在某些數據庫中,還可以使用FIRST或者AFTER子句指定在何處插入新列。
更改表以添加新列
ALTER TABLE mytable
ADD column DataType OptionalTableConstraint
DEFAULT default_value;
- 刪除列
刪除列就如同指定要刪除的列一樣,但是,一些數據庫不支持此功能,相反,可能必須創建一個新表並遷移數據。
更改表以刪除列
ALTER TABLE mytable
DROP column_to_be_deleted;
- 重命名錶
可以使用RENAME TO語句的子句來完成。
改變表名
ALTER TABLE mytable
RENAME TO new_table_name;
注意:每個數據庫實現都支持不同的更改表的方法,因此在繼續之前最好先查閱數據庫文檔: MySQL,Postgres, SQLite, Microsoft SQL Server。
2.2 練習題
#1.添加名爲Aspect_ratio的列,其中包含FLOAT數據類型,以存儲每個影片發佈的寬高比
ALTER TABLE FROM movies
ADD Aspect_ratio FLOAT OptionalTableConstraint
DEFAULT default_value;
正確的:
ALTER TABLE Movies
ADD COLUMN Aspect_ratio FLOAT DEFAULT 2.39;
#2.添加另一個名爲Language的列,其中包含TEXT數據類型,以存儲發佈影片的語言。確保此語言的默認值爲英語
ALTER TABLE Movies
ADD COLUMN Language TEXT DEFAULT English;
3. 第18課 刪除表
3.1 知識點
極少數情況下,可能需要刪除包含所有數據和與數據的整個表,併爲此,可以適用於該DROP TABLE不同的語句DELETE,將表從數據庫中刪除。
刪除表語句
DROP TABLE IF EXISTS mytable;
與CREATE TABLE語句相同,如果指定的表不存在,數據庫可能存在錯誤,防止錯誤,可以使用IF EXISTS子句。另外,如果有另外一個表依賴於要刪除的表中的列,則必須首先更新多有相關表以刪除相關行或完全刪除這些表。
3.2 練習題
#1. 我們遺憾地走到了課程的最後,讓我們通過刪除Movies表進行清理
DROP TABLE IF EXISTS Movies;
#2. 並刪除BoxOffice表
DROP TABLE Boxoffice;
以上爲基礎課程,以全部過完!