MySQL 數據定義語言(DDL)

来源:https://www.cnblogs.com/pawn-i/archive/2020/03/23/12553687.html
-Advertisement-
Play Games

SQL 包含以下 4 部分: 1 數據定義語言(DDL):DROP、CREATE、ALTER 等語句。 2 數據操作語言(DML):INSERT(插入)、UPDATE(修改)、DELETE(刪除)語句。 3 數據查詢語言(DQL):SELECT 語句。 4 數據控制語言(DCL): GRANT、RE ...


參考資料:C語言中文網

SQL 包含以下 4 部分:
    1    數據定義語言(DDL):DROP、CREATE、ALTER 等語句。
    2    數據操作語言(DML):INSERT(插入)、UPDATE(修改)、DELETE(刪除)語句。
    3    數據查詢語言(DQL):SELECT 語句。
    4    數據控制語言(DCL): GRANT、REVOKE、COMMIT、ROLLBACK 等語句。

MySQL之DDL(Data Definition Language): 數據定義語言:CREATE,ALERT,DROP等

DDL:操作資料庫,表(CRUD)

1、操作資料庫(CRUD)

(1)C(Create):創建資料庫

CREATE DATABASE [IF NOT EXISTS] 資料庫名
[[DEFAULT] CHARACTER SET 字元集名]
[[DEFAULT] COLLATE 校對規則名];

[ ]中的內容是可選的。
語法說明如下:
資料庫名:創建資料庫的名稱。MySQL 的數據存儲區將以目錄方式表示 MySQL 資料庫,因此資料庫名稱必須符合操作系統的文件夾命名規則,不能以數字開頭,儘量要有實際意義。註意在 MySQL 中不區分大小寫。
IF NOT EXISTS:在創建資料庫之前進行判斷,只有該資料庫目前尚不存在時才能執行操作。此選項可以用來避免資料庫已經存在而重覆創建的錯誤。
[DEFAULT] CHARACTER SET:指定資料庫的字元集。指定字元集的目的是為了避免在資料庫中存儲的數據出現亂碼的情況。如果在創建資料庫時不指定字元集,那麼就使用系統的預設字元集。
[DEFAULT] COLLATE:指定字元集的預設校對規則。

 

eg.

mysql> CREATE DATABASE IF NOT EXISTS test
    -> DEFAULT CHARACTER SET utf8
    -> DEFAULT COLLATE utf8_general_ci;
Query OK, 1 row affected, 1 warning (0.01 sec)

 

(2)R(Retrieve):查詢

SHOW DATABASES [LIKE '資料庫名'];

語法說明如下:
LIKE 從句是可選項,用於匹配指定的資料庫名稱。LIKE 從句可以部分匹配,也可以完全匹配。
資料庫名由單引號' '包圍。

 

eg.查詢全部

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |         |
| mqcms              |
| mysql              |
| performance_schema |
| phpmyadmin         |
| sys                |
| test               |
| test_aa            |
| ultrax             |
+--------------------+
9 rows in set (0.00 sec)

eg.查詢某一個(我有test和test_aa兩個庫)

mysql> show databases like 'test';
+-----------------+
| Database (test) |
+-----------------+
| test            |
+-----------------+
1 row in set (0.00 sec)
mysql> show databases like '%test%';
+-------------------+
| Database (%test%) |
+-------------------+
| dedetest          |
| test              |
| test_aa           |
+-------------------+
3 rows in set (0.00 sec)

這裡的like跟模糊查詢一樣%aa%;%aa;aa%;

eg.查詢某個資料庫的創建語言

mysql> show create database test;
+----------+---------------------------------------------------------------+
| Database | Create Database                                               |
+----------+---------------------------------------------------------------+
| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+---------------------------------------------------------------+
1 row in set (0.00 sec)

 

(3)U(Update):修改

ALTER DATABASE [資料庫名] { 
[ DEFAULT ] CHARACTER SET <字元集名> |
[ DEFAULT ] COLLATE <校對規則名>}

語法說明如下:
ALTER DATABASE 用於更改資料庫的全局特性。
使用 ALTER DATABASE 需要獲得資料庫 ALTER 許可權。
資料庫名稱可以忽略,此時語句對應於預設資料庫。
CHARACTER SET 子句用於更改預設的資料庫字元集。

 

eg.修改資料庫test的字元集

mysql> ALTER DATABASE test
    -> DEFAULT CHARACTER SET gb2312
    -> DEFAULT COLLATE gb2312_chinese_ci;
Query OK, 1 row affected (0.02 sec)


mysql> show create database test;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET gb2312 */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

(4)D(Delete):刪除

DROP DATABASE [ IF EXISTS ] <資料庫名>

語法說明如下:
<資料庫名>:指定要刪除的資料庫名。
IF EXISTS:用於防止當資料庫不存在時發生錯誤。
DROP DATABASE:刪除資料庫中的所有表格並同時刪除資料庫。使用此語句時要非常小心,以免錯誤刪除。如果要使用 DROP DATABASE,需要獲得資料庫 DROP 許可權。

 

註意:MySQL 安裝後,系統會自動創建名為 information_schema 和 mysql 的兩個系統資料庫,系統資料庫存放一些和資料庫相關的信息,如果刪除了這兩個資料庫,MySQL 將不能正常工作。

使用 DROP DATABASE 命令時要非常謹慎,在執行該命令後,MySQL 不會給出任何提示確認信息。DROP DATABASE 刪除資料庫後,資料庫中存儲的所有數據表和數據也將一同被刪除,而且不能恢復。因此最好在刪除資料庫之前先將資料庫進行備份。

eg.刪除資料庫test_aa;

mysql> DROP DATABASE IF EXISTS test_aa;
Query OK, 0 rows affected (0.02 sec)

mysql> show databases like 'test%';
+------------------+
| Database (test%) |
+------------------+
| test             |
+------------------+
1 row in set (0.00 sec)

   

2、操作數據表(CRUD)

(1)C(Create)創建表

CREATE TABLE <表名> ([表定義選項])[表選項][分區選項];

其中,[表定義選項]的格式為:
<列名1> <類型1> [,…] <列名n> <類型n>


CREATE TABLE 語句的主要語法及使用說明如下:
CREATE TABLE:用於創建給定名稱的表,必須擁有表CREATE的許可權。
<表名>:指定要創建表的名稱,在 CREATE TABLE 之後給出,必須符合標識符命名規則。表名稱被指定為 db_name.tbl_name,以便在特定的資料庫中創建表。無論是否有當前資料庫,都可以通過這種方式創建。在當前資料庫中創建表時,可以省略 db-name。如果使用加引號的識別名,則應對資料庫和表名稱分別加引號。例如,'mydb'.'mytbl' 是合法的,但 'mydb.mytbl' 不合法。
<表定義選項>:表創建定義,由列名(col_name)、列的定義(column_definition)以及可能的空值說明、完整性約束或表索引組成。
預設的情況是,表被創建到當前的資料庫中。若表已存在、沒有當前資料庫或者資料庫不存在,則會出現錯誤。

eg.創建一張測試表test_tbl;

欄位名稱 欄位類型 欄位備註
id int(11) ID
name varchar(20) 名稱
age int(11) 年齡
sex tinyint(4) 性別0 男 1女 2 未知

 

 

 

 

 

 

 

 

 

mysql> use test;
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| board          |
| data           |
+----------------+
2 rows in set (0.01 sec)


mysql> CREATE TABLE test_tbl
    -> (
    -> id INT(11),
    -> name VARCHAR(20),
    -> age INT(11),
    -> sex TINYINT(4)
    -> );
Query OK, 0 rows affected (0.03 sec)

 

複製表結構:

 CREATE TABLE <數據表名> like <被覆制的表名>;

 

eg.

mysql> CREATE TABLE test_tbl_cp like test_tbl;
Query OK, 0 rows affected (0.01 sec)

 

 

(2)R(Retrieve)查看表

查看所有表:

SHOW TABLES;

eg.

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| board          |
| data           |
| test_tbl       |
| test_tbl_cp    |
+----------------+
4 rows in set (0.00 sec)

查看表結構:

DESCRIBE <表名>;

或簡寫成:
DESC <表名>;

DESCRIBE/DESC 語句可以查看表的欄位信息,包括欄位名、欄位數據類型、是否為主鍵、是否有預設值等

 

eg.

mysql> DESC test_tbl;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int(11)     | YES  |     | NULL    |       |
| name  | varchar(20) | YES  |     | NULL    |       |
| age   | int(11)     | YES  |     | NULL    |       |
| sex   | tinyint(4)  | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

其中,各個欄位的含義如下:
Null:表示該列是否可以存儲 NULL 值。
Key:表示該列是否已編製索引。PRI 表示該列是表主鍵的一部分,UNI 表示該列是 UNIQUE 索引的一部分,MUL 表示在列中某個給定值允許出現多次。
Default:表示該列是否有預設值,如果有,值是多少。
Extra:表示可以獲取的與給定列有關的附加信息,如 AUTO_INCREMENT 等。

SHOW CREATE TABLE語句可以用來顯示創建表時的CREATE TABLE語句:

SHOW CREATE TABLE <表名>\G;

提示:使用 SHOW CREATE TABLE 語句不僅可以查看創建表時的詳細語句,而且可以查看存儲引擎和字元編碼。如果不加“\G”參數,顯示的結果可能非常混亂,加上“\G”參數之後,可使顯示的結果更加直觀,易於查看。

eg.

mysql> show create table test_tbl\G;
*************************** 1. row ***************************
       Table: test_tbl
Create Table: CREATE TABLE `test_tbl` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `sex` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gb2312
1 row in set (0.00 sec)

 

(3)U(Update)修改

ALTER TABLE <表名> [修改選項]

修改選項的語法格式如下: {
ADD COLUMN <列名> <類型> | CHANGE COLUMN <舊列名> <新列名> <新列類型> | ALTER COLUMN <列名> { SET DEFAULT <預設值> | DROP DEFAULT } | MODIFY COLUMN <列名> <類型> | DROP COLUMN <列名> | RENAME TO <新表名>
}

 

 添加欄位:

ALTER TABLE <表名> ADD <新欄位名> <數據類型> [約束條件] [FIRST|AFTER 已存在的欄位名]
新欄位名為需要添加的欄位的名稱;FIRST 為可選參數,其作用是將新添加的欄位設置為表的第一個欄位;AFTER 為可選參數,其作用是將新添加的欄位添加到指定的已存在的欄位名的後面。
 

eg.在表test_tbl的name後面添加新欄位name_cp:

mysql> ALTER TABLE test_tbl ADD name_cp VARCHAR(20) AFTER name;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test_tbl;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(11)     | YES  |     | NULL    |       |
| name    | varchar(20) | YES  |     | NULL    |       |
| name_cp | varchar(20) | YES  |     | NULL    |       |
| age     | int(11)     | YES  |     | NULL    |       |
| sex     | tinyint(4)  | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

 

修改欄位名稱:

ALTER TABLE <表名> CHANGE <舊欄位名> <新欄位名> <新數據類型>;

其中,舊欄位名指修改前的欄位名;新欄位名指修改後的欄位名;新數據類型指修改後的數據類型,如果不需要修改欄位的數據類型,可以將新數據類型設置成與原來一樣,但數據類型不能為空。

 eg.修改name的名稱改為names

mysql> ALTER TABLE test_tbl
    -> CHANGE name names VARCHAR(20);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test_tbl;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(11)     | YES  |     | NULL    |       |
| names   | varchar(20) | YES  |     | NULL    |       |
| name_cp | varchar(20) | YES  |     | NULL    |       |
| age     | int(11)     | YES  |     | NULL    |       |
| sex     | tinyint(4)  | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec) 

 

修改/刪除欄位預設值:

ALTER TABLE <表名> ALTER COLUMN <列名> { SET DEFAULT <預設值> | DROP DEFAULT }

 

eg.將欄位sex的預設值改為2

mysql> ALTER TABLE test_tbl ALTER sex SET DEFAULT 2;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test_tbl;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(11)     | YES  |     | NULL    |       |
| names   | varchar(20) | YES  |     | NULL    |       |
| name_cp | varchar(50) | YES  |     | NULL    |       |
| age     | int(11)     | YES  |     | NULL    |       |
| sex     | tinyint(4)  | YES  |     | 2       |       |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

 

 

修改欄位類型:

ALTER TABLE <表名> MODIFY <欄位名> <數據類型>

其中,表名指要修改數據類型的欄位所在表的名稱,欄位名指需要修改的欄位,數據類型指修改後欄位的新數據類型。

 eg.修改name_cp的數據類型varchar(50)

mysql> ALTER TABLE test_tbl 
    -> MODIFY name_cp varchar(50);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test_tbl;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(11)     | YES  |     | NULL    |       |
| name    | varchar(20) | YES  |     | NULL    |       |
| name_cp | varchar(50) | YES  |     | NULL    |       |
| age     | int(11)     | YES  |     | NULL    |       |
| sex     | tinyint(4)  | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

 

刪除欄位:

ALTER TABLE <表名> DROP <欄位名>;

其中,欄位名指需要從表中刪除的欄位的名稱。

 eg.刪除sex欄位

mysql> ALTER TABLE test_tbl
    -> DROP sex;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc test_tbl;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(11)     | YES  |     | NULL    |       |
| names   | varchar(20) | YES  |     | NULL    |       |
| name_cp | varchar(50) | YES  |     | NULL    |       |
| age     | int(11)     | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

 

修改表名:

ALTER TABLE <舊表名> RENAME [TO] <新表名>

其中,TO 為可選參數,使用與否均不影響結果。

 eg.修改表名test_tbl改為test_tb;

mysql> ALTER TABLE test_tbl
    -> RENAME TO test_tb;
Query OK, 0 rows affected (0.02 sec)

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| board          |
| data           |
| test_tb        |
| test_tbl_cp    |
+----------------+
4 rows in set (0.00 sec)

 

 

 (4)D(Delete)刪除表

DROP TABLE [IF EXISTS] 表名1 [ ,表名2, 表名3 ...]	   

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 環境:使用jenkins通過pipeline拉取github代碼 最近在Jenkins上新建Job時,使用Pipeline流水線方式自動化發佈項目報錯具體如下: ERROR: Timeout after 10 minutes” ERROR: Error fetching remote repo 'o ...
  • pyaudio模塊讀取設備名稱來指定相應的設備進行錄音,涉及操作系統編碼、IDE解碼等問題 ...
  • 在linux和windows中都有路由配置的方法,在日常開發中也經常遇到,比如自己公司各個網站內部開了openvpn這種應用以後,路由配置不好有可能導致改走vpn的不走,網路卡頓甚不能正常上網 1.命令格式 看不懂不要緊,看下麵常用命令那的用法 2.常用選項和參數說明 2.1 選項說明 2.2 參數 ...
  • 前面系列文章講解了Linux下通過文件傳輸、文件共用、郵件系統來分享和獲取資源,本文講解網路資源獲取和共用的另外一種形式,通過Apache服務程式來提供Web服務。 ...
  • 為什麼提交到github的commit都是一個作者 "參考鏈接" "重要知識點講解" 問題如下所示 git是分散式去中心化的管理系統 ssh秘鑰對生成。並把id_rsa.pub加入github.com中(這個過程只是建立一個可以互訪的通道而已) 只是建立了github倉庫之間可以互訪 到底是本地哪個 ...
  • https://www.cnblogs.com/tan-chao/p/11023181.html 簡介 MongoDB[1] 是一個基於分散式文件存儲的資料庫。由C 語言編寫。旨在為WEB應用提供可擴展的高性能數據存儲解決方案。 MongoDB[2] 是一個介於關係資料庫和非關係資料庫之間的產品,是 ...
  • 在一張表裡有多個索引 , 我們where欄位里條件有多個索引的值 , 那麼究竟使用的哪個呢? 我們可以使用explain來查看 , 其中的key_len欄位可以看得出來 比如下麵這條sql explain select * from ent_calendar_diary where email='x ...
  • 分享攢了多年的mssql腳本 腳本類別包括:備份還原表分區常用函數錯誤日誌定時自動抓取耗時SQL並歸檔發郵件腳本模塊鏡像批量腳本資料庫收縮資料庫損壞資料庫賬號統計資料庫大小性能作業 腳本數量:54個 github地址:https://github.com/xiaohuazi123/mssql-scr ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...