【資料庫】MySQL/MariaDB 建立、修改、刪除資料表語法教學與範例

本文會列出MySQL/MariaDB在建立、修改及刪除資料表時,會用到的一些語法及範例,包含建立資料表語法、建立資料表欄位語法、設定鍵值(Key)、修改資料表語法、刪除資料表時語法、刪除之前檢查資料表是否存在。

1 建立資料表

        
            -- 建立資料表語法格式
            CREATE TABLE `表格名` (
                `欄位名稱` `欄位設定`, 
                `欄位名稱` `欄位設定`, 
                `欄位名稱` `欄位設定`,
                ......
            ) `資料表選項設定`;
        
    

2 資料表欄位

        
            -- 建立一個名為 test 資料表
            CREATE TABLE `test` (
              `A` tinyint(3) unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT '流水號',
              `B` tinyint(3) NOT NULL COMMENT 'TINYINT 型別',
              `C` smallint(5) NOT NULL COMMENT 'SMALLINT 型別',
              `D` mediumint(8) NOT NULL COMMENT 'MEDIUMINT 型別',
              `E` int(10) NOT NULL COMMENT 'INTEGER 型別',
              `F` bigint(20) NOT NULL COMMENT 'BIGINT 型別',
              `G` double(5,2) NOT NULL COMMENT 'DOUBLE 型別',
              `H` decimal(5,2) NOT NULL COMMENT 'DECIMAL 型別',
              `I` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'VARCHAR 型別',
              `J` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'TEXT 型別',
              `K` longtext COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'LONGTEXT 型別',
              `L` enum('y','n') COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'y' COMMENT 'ENUM 型別',
              `M` date NOT NULL COMMENT 'DATE',
              `N` time NOT NULL COMMENT 'TIME',
              `O` datetime NOT NULL COMMENT 'DATETIME',
              PRIMARY KEY (`A`) USING BTREE
            ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品';
        
    

行2: 指定資料表名稱為test。
行3~8: 整數型別欄位,整數型別可以額外設定unsigned、zerofill及AUTO_INCREMENT等參數。
unsigned: 表示欄位只能填入0及正整數。
zerofill: 如果欄位值尚未達到最大支援長度,則前面補0至最大支援長度。
AUTO_INCREMENT: 表示欄位會自動遞增,新增資料時,無需指定此欄位的值。
行9~10: 浮點數型別欄位,浮點數型別也可以額外設定unsigned及zerofill參數。
行11~13: 字串型別欄位,字串型別可指定欄位定序。
行14: ENUM型別欄位,需要設定一組欄位值的清單,可指定欄位定序。
行15~17: 日期型別欄位。

詳細資料型別說明,可以參考以下連結。

3 設定鍵值(Key)

        
            -- 建立一個名為 type 資料表
            CREATE TABLE `type` (
                `sn` smallint(3) unsigned NOT NULL AUTO_INCREMENT COMMENT '流水號',
                `number` varchar(5) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '編號',
                `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名稱',
                PRIMARY KEY (`sn`) USING BTREE,
                UNIQUE KEY `unique_key` (`number`) USING BTREE
            ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='分類';

            -- 建立一個名為 product 資料表
            CREATE TABLE `product` (
                `sn` mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '流水號',
                `guid` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'GUID',
                `type_number` varchar(5) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '分類編號',
                `name` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '品名',
                `price` int(10) unsigned NOT NULL COMMENT '單價(元)',
                `description` text COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '說明',
                PRIMARY KEY (`sn`) USING BTREE,
                UNIQUE KEY `unique_key` (`guid`) USING BTREE,
                CONSTRAINT `product_ibfk_1` FOREIGN KEY (`type_number`) REFERENCES `type` (`number`)
            ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品';
        
    

行6、行18: 設定Primary Key (PK),一個資料表只能有一個PK,但PK可以由多個欄位組成。
行7、行19: 設定Unuque Key,一個資料表可以有多個UNIQUE KEY。
行20: 設定Foreign Key (FK),一個資料表可以有多個FK,FK必須關聯到另外一張表的某個欄位。

設計Primary key的各種考量,可以參考以下連結。

4 修改資料表

        
            -- 在 test 資料表內新增欄位
            ALTER TABLE `test` ADD COLUMN `欄位名稱` `欄位設定`;

            -- 在 test 資料表的A欄位後,插入新欄位
            ALTER TABLE `test` ADD COLUMN `欄位名稱` `欄位設定` AFTER `A`;
            
            -- 在 test 資料表內修改欄位名稱及資料形態
            ALTER TABLE `test` CHANGE COLUMN `舊欄位名稱` `新欄位名稱` `欄位設定`;
            
            -- 移除 test 資料表中的 Primary Key
            ALTER TABLE  DROP PRIMARY KEY;

            -- 移除 test 資料表中的 Index
            ALTER TABLE  DROP INDEX `欄位名稱`;

            -- 移除 test 資料表中的欄位
            ALTER TABLE `test` DROP COLUMN `欄位名稱`;
        
    

5 刪除資料表

        
            -- 刪除名為 test 資料表
            DROP TABLE `test`;

            -- 刪除資料表之前,先檢查資料表是否存在,如果存在才刪除
            DROP TABLE IF NOT EXISTS `test`;
        
    

Facebook 留言