# Create Databases and Tables

# Create and Drop Databases

我們在伺服器上所啟動的資料庫服務中,通常會同時包含許多不同的資料庫,因為一個較為複雜的應用程式資料可能來自不同的資料庫:

Database Server

# Create Databases

使用 CREATE DATABASE <database_name>; 命令創建資料庫,命名時建議使用底線 _ 取代減號 -,儘量避免空白並統一命名規則:

-- Create databases:
-- CREATE DATABASE <database_name>;
CREATE DATABASE soap_store;

# Dropping Databases

使用 DROP DATABASE <database_name>; 命令刪除既有的資料庫:

-- Drop databases:
-- DROP DATABASE <database_name>;
DROP DATABASE hello_world_db;

# Use Databases

創建好資料庫之後,我們使用 USE <database name>; 命令在選擇要使用的資料庫,而 SELECT database(); 命令可以告知我們當前選擇的是哪一個資料庫:

-- Choose what database to be used:
-- USE <database name>;
USE dog_walking_app;
SELECT database();

# [Lecture] Introduction to Tables

非關聯性資料庫由一張張的資料 表(table) 所構成,舉例來說一張存放貓咪資料的資料表可能如下所示:

Name Breed Age
Blue Scottish Fold 1
Rocket Persian 3
Monty Tabby 10
Sam Munchkin 5

其中 NameBreddAge 稱為 表頭(headers)欄(columns),而實際存放的資料稱為 列(rows)

# [Lecture] The Basic Datatypes

在進行資料庫建置時,表中通常會限制資料型態來使得處理上具有一致性,在 MySQL 提供了以下的資料型態:

  • 數字型態(Numeric Types)INTSMALLINTTINYINTMEDIUMINTBIGINTDECIMALNUMERICFLOATDOUBLEBIT…等。
  • 字串型態(String Types)CHARVARCHARBINARYVARBINARYBLOBTINYBLOBMEDIUMBLOBLONGBLOBTEXTTINYTEXTMEDIUMTEXTLONGTEXTENUM…等。
  • 日期型態(Data Types)DATEDATETIMETIMESTAMPTIMEYEAR…等。

其中比較常用的是用以表示數字(最大可以表示到 4294967295)的 INT 整數型態以及表示字串長度在 255 內的 VARCHAR 短字串型態。

# [Lecture] Note about INT max size

在前一小節中,對於整數型態 INT 的大小限制會涉及到有無符號而有所區別,建議可以參考 stackoverflow | What does “unsigned” in MySQL mean and when to use it? 中的說明。

# [Lecture] Basic Datatypes Challenge

如果我們要建置一個存放 Tweets 資料的資料庫,嘗試規劃一下以下資料採用 MySQL 的資料型態:

  • A username (max 15 chars)
  • The tweet content (max 140 chars)
  • Number of favorites

# [Lecture] Basic Datatypes Challenge - Solution

Username Content Favorites
VARCHAR(15) VARCHAR(140) INT
coolguy my first tweet 1
guitar_queen I love music:) 1
lonely_heart still looking 4 love 0

# [Lecture] Creating Your Own Tables

在 MySQL 中,我們使用 CREATE TABLE <tablename> (column_name data_type); 命令來建置資料表並指定標頭以及所使用的資料型態。

# [Lecture] CODE: Creating Your Own Tables

-- To Create a Table
-- CREATE TABLE tablename
--  (
--     column_name data_type,
--     column_name data_type
--  );
-- Create a cats Table
CREATE TABLE cats
  (
    name VARCHAR(100),
    age INT
  );

# [Lecture] How Do We Know It Worked?

當我們創建好資料表後,可以使用 SHOW <tablename>; 來顯示既有的資料表,而 SHOW COLUMNS FROM <tablename>; 則可以列出表中的欄位,除此之外也可以使用 DESC <tablename>;,但值得注意的是雖然目前 DESCSHOW COLUMNS FROM 所得到的結果看起來是相同的,但這兩個命令之間並不完全相等。

# [Lecture] CODE: How Do We Know It Worked?

SHOW TABLES;

SHOW COLUMNS FROM tablename;

DESC tablename;

# [Lecture] Dropping Tables

如果要刪除既有的資料表,使用 DROP TABLE <tablename>; 命令。

# [Lecture] CODE: Dropping Tables

-- Dropping Tables
-- DROP TABLE <tablename>;
DROP TABLE cats;

# [Lecture] Creating Your Own Tables Challenge

使用這一章節學到的命令,完成以下目標:

  • Create a pastries table
  • It should include 2 columns:
    • name (50 characters max)
    • quantity
  • Inspect your table/columns in the CLI
  • Delete your table!

# [Lecture] CODE: Creating Your Own Tables Challenge

CREATE TABLE pastries
  (
    name VARCHAR(100),
    quantity INT
  );
 
SHOW TABLES;
 
DESC pastries;
 
DROP TABLE pastries;
Last Updated: 12/15/2020, 10:27:30 PM