MySQL數(shù)據(jù)庫(kù)管理與表管理

數(shù)據(jù)庫(kù)管理

創(chuàng)建數(shù)據(jù)庫(kù)
  • 語(yǔ)法:
CREATE DATABASE [IF NOT EXISTS] <數(shù)據(jù)庫(kù)名>
[[DEFAULT] CHARACTER SET <字符集名>] 
[[DEFAULT] COLLATE <校對(duì)規(guī)則名>];
  • [ ]中的內(nèi)容是可選的
  • <數(shù)據(jù)庫(kù)名>:創(chuàng)建數(shù)據(jù)庫(kù)的名稱(chēng)。MySQL 的數(shù)據(jù)存儲(chǔ)區(qū)將以目錄方式表示 MySQL 數(shù)據(jù)庫(kù),因此數(shù)據(jù)庫(kù)名稱(chēng)必須符合操作系統(tǒng)的文件夾命名規(guī)則,不能以數(shù)字開(kāi)頭,盡量要有實(shí)際意義。注意在 MySQL 中不區(qū)分大小寫(xiě)。
  • IF NOT EXISTS:在創(chuàng)建數(shù)據(jù)庫(kù)之前進(jìn)行判斷,只有該數(shù)據(jù)庫(kù)目前尚不存在時(shí)才能執(zhí)行操作。此選項(xiàng)可以用來(lái)避免數(shù)據(jù)庫(kù)已經(jīng)存在而重復(fù)創(chuàng)建的錯(cuò)誤。
  • [DEFAULT] CHARACTER SET:指定數(shù)據(jù)庫(kù)的字符集。指定字符集的目的是為了避免在數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù)出現(xiàn)亂碼的情況。如果在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)不指定字符集,那么就使用系統(tǒng)的默認(rèn)字符集。
  • [DEFAULT] COLLATE:指定字符集的默認(rèn)校對(duì)規(guī)則。
  • MySQL 的字符集(CHARACTER)和校對(duì)規(guī)則(COLLATION)是兩個(gè)不同的概念。字符集是用來(lái)定義 MySQL 存儲(chǔ)字符串的方式,校對(duì)規(guī)則定義了比較字符串的方式。
修改數(shù)據(jù)庫(kù)
  • 語(yǔ)法:
ALTER DATABASE [數(shù)據(jù)庫(kù)名] { 
[ DEFAULT ] CHARACTER SET <字符集名> |
[ DEFAULT ] COLLATE <校對(duì)規(guī)則名>}
  • ALTER DATABASE 用于更改數(shù)據(jù)庫(kù)的全局特性。
  • 使用 ALTER DATABASE 需要獲得數(shù)據(jù)庫(kù) ALTER 權(quán)限。
  • 數(shù)據(jù)庫(kù)名稱(chēng)可以忽略,此時(shí)語(yǔ)句對(duì)應(yīng)于默認(rèn)數(shù)據(jù)庫(kù)。
  • CHARACTER SET 子句用于更改默認(rèn)的數(shù)據(jù)庫(kù)字符集。
刪除數(shù)據(jù)庫(kù)
  • 語(yǔ)法:
DROP DATABASE [ IF EXISTS ] <數(shù)據(jù)庫(kù)名>
  • <數(shù)據(jù)庫(kù)名>:指定要?jiǎng)h除的數(shù)據(jù)庫(kù)名。
  • IF EXISTS:用于防止當(dāng)數(shù)據(jù)庫(kù)不存在時(shí)發(fā)生錯(cuò)誤。
  • DROP DATABASE:刪除數(shù)據(jù)庫(kù)中的所有表格并同時(shí)刪除數(shù)據(jù)庫(kù)。
  • 如果要使用 DROP DATABASE,需要獲得數(shù)據(jù)庫(kù) DROP 權(quán)限。

表管理

關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化

良好的數(shù)據(jù)庫(kù)設(shè)計(jì)表現(xiàn)在以下幾方面:

  • 訪(fǎng)問(wèn)效率高
  • 減少數(shù)據(jù)冗余,節(jié)省存儲(chǔ)空間,便于進(jìn)一步擴(kuò)展
  • 可以使應(yīng)用程序的開(kāi)發(fā)變得更容易

關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化理論為:關(guān)系數(shù)據(jù)庫(kù)中的每一個(gè)關(guān)系都要滿(mǎn)足一定的規(guī)范。根據(jù)滿(mǎn)足規(guī)范的條件不同,可以分為5個(gè)等級(jí):第一范式(1NF)、第二范式(2NF)……第五范式(5NF)。其中,NF是Normal Form的縮寫(xiě)。一般情況下,只要把數(shù)據(jù)規(guī)范到第三范式標(biāo)準(zhǔn)就可以滿(mǎn)足需要了。

第一范式(1NF)

  • 在一個(gè)關(guān)系中,消除重復(fù)字段,且各字段都是最小的邏輯存儲(chǔ)單位。即,要滿(mǎn)足原子性。
  • 第一范式是第二和第三范式的基礎(chǔ),是最基本的范式。第一范式包括下列指導(dǎo)原則。
    (1)數(shù)據(jù)組的每個(gè)屬性只可以包含一個(gè)值。
    (2)關(guān)系中的每個(gè)數(shù)組必須包含相同數(shù)量的值。
    (3)關(guān)系中的每個(gè)數(shù)組一定不能相同。
  • 在任何一個(gè)關(guān)系數(shù)據(jù)庫(kù)中,第一范式是對(duì)關(guān)系模式的基本要求,不滿(mǎn)足第一范式的數(shù)據(jù)庫(kù)就不是關(guān)系型數(shù)據(jù)庫(kù)。

第二范式(2NF)

  • 第二范式是在第一范式的基礎(chǔ)上建立起來(lái)的,即滿(mǎn)足第二范式必先滿(mǎn)足第一范式(1NF)。
  • 第二范式要求數(shù)據(jù)庫(kù)表中的每個(gè)實(shí)體(即各個(gè)記錄行)必須可以被唯一地區(qū)分。
  • 為實(shí)現(xiàn)區(qū)分各行記錄通常需要為表設(shè)置一個(gè)“區(qū)分列”,用以存儲(chǔ)各個(gè)實(shí)體的唯一標(biāo)識(shí)。這個(gè)唯一屬性列被稱(chēng)為主關(guān)鍵字或主鍵。
  • 第二范式要求實(shí)體的屬性完完全依賴(lài)于主關(guān)鍵字,即不能存在僅依賴(lài)主關(guān)鍵字一部分的屬性,如果存在,那么這個(gè)屬性和主關(guān)鍵字的這一部分應(yīng)該分離出來(lái)形成一個(gè)新的實(shí)體,新實(shí)體與原實(shí)體之間是一對(duì)多的關(guān)系。

第三范式(3NF)

  • 第三范式是在第二范式的基礎(chǔ)上建立起來(lái)的,即滿(mǎn)足第三范式必先滿(mǎn)足第二范式。
  • 第三范式要求關(guān)系表不存在非關(guān)鍵字列對(duì)任意候選關(guān)鍵字列的傳遞函數(shù)依賴(lài),也就是說(shuō),第三范式要求一個(gè)關(guān)系表中不包含已在其他表中包含的非主關(guān)鍵字信息。
  • 除主鍵外,其他字段必須依賴(lài)主鍵。

表管理語(yǔ)句

創(chuàng)建表

  • 語(yǔ)法:
CREATE TABLE 表名稱(chēng)
(
列名稱(chēng)1 數(shù)據(jù)類(lèi)型 [(長(zhǎng)度) 約束],
列名稱(chēng)2 數(shù)據(jù)類(lèi)型 [(長(zhǎng)度) 約束],
列名稱(chēng)3 數(shù)據(jù)類(lèi)型 [(長(zhǎng)度) 約束],
....
)
  • 常用數(shù)據(jù)類(lèi)型
數(shù)據(jù)類(lèi)型 描述
tinyint(m) 1個(gè)字節(jié) 范圍(-128~127)
smallint(m) 2個(gè)字節(jié) 范圍(-32768~32767)
mediumint(m) 3個(gè)字節(jié) 范圍(-8388608~8388607)
int(m) 4個(gè)字節(jié) 范圍(-2147483648~2147483647)
bigint(m) 8個(gè)字節(jié) 范圍(+-9.22*10的18次方)
float(m,d) 單精度浮點(diǎn)型 8位精度(4字節(jié)) m總個(gè)數(shù),d小數(shù)位
double(m,d) 雙精度浮點(diǎn)型 16位精度(8字節(jié)) m總個(gè)數(shù),d小數(shù)位
decimal(m,d) m表示十進(jìn)制數(shù)字總的個(gè)數(shù),d表示小數(shù)點(diǎn)后面數(shù)字的位數(shù)。常用于貨幣
char(n) 固定長(zhǎng)度,最多255個(gè)字符
varchar(n) 固定長(zhǎng)度,最多65535個(gè)字符
tinytext 可變長(zhǎng)度,最多255個(gè)字符
text 可變長(zhǎng)度,最多65535個(gè)字符
mediumtext 可變長(zhǎng)度,最多2的24次方-1個(gè)字符
longtext 可變長(zhǎng)度,最多2的32次方-1個(gè)字符
date 日期 '2008-12-2'
time 時(shí)間 '12:25:36'
datetime 日期時(shí)間 '2008-12-2 22:06:44'
timestamp 自動(dòng)存儲(chǔ)記錄修改時(shí)間
enum(選項(xiàng)1, 選項(xiàng)2, ...) 單選字符串?dāng)?shù)據(jù)類(lèi)型,適合存儲(chǔ)表單界面中的“單選值”
set(選項(xiàng)1,選項(xiàng)2, ...) 多選字符串?dāng)?shù)據(jù)類(lèi)型,適合存儲(chǔ)表單界面的“多選值”。
  • 示例:
# 創(chuàng)建數(shù)據(jù)庫(kù)mydb
mysql> create database mydb default charset utf8mb4;
Query OK, 1 row affected (0.00 sec)

mysql> use mydb;
Database changed

# 創(chuàng)建部門(mén)表
mysql> create table departments (
    ->   id int,
    ->   dept_name varchar(20)
    -> );
Query OK, 0 rows affected (0.01 sec)

修改表

修改列名
  • 語(yǔ)法:
ALTER TABLE 表
CHANGE [COLUMN] 列表 數(shù)據(jù)類(lèi)型
  • 示例:
mysql> alter table departments
    -> change id dept_id int;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0
修改列的類(lèi)型或約束
  • 語(yǔ)法:
ALTER TABLE 表
MODIFY [COLUMN] 列名 類(lèi)型
  • 示例:
mysql> alter table departments
    -> modify dept_name varchar(10);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
添加新列
  • 語(yǔ)法:
ALTER TABLE 表
ADD [COLUMN] 列名 類(lèi)型
  • 示例:
mysql> alter table departments
    -> add manager_id int;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0
刪除列
  • 語(yǔ)法:
ALTER TABLE 表
DROP [COLUMN] 列名
  • 示例:
mysql> alter table departments
    -> drop manager_id;
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0
修改表名
  • 語(yǔ)法:
ALTER TABLE 表名
RENAME TO 新表名
  • 示例:
mysql> alter table departments
    -> rename to depts;
Query OK, 0 rows affected (0.00 sec)

刪除表

  • 語(yǔ)法:
DROP TABLE [IF EXISTS] 表名
  • 示例:
mysql> drop table depts;
Query OK, 0 rows affected (0.01 sec)

表復(fù)制

僅復(fù)制表結(jié)構(gòu)
  • 語(yǔ)法:
CREATE TABLE 待創(chuàng)建的表名 LIKE 已有表名
  • 示例:
mysql> create table departments like test2021.departments;
Query OK, 0 rows affected (0.01 sec)
復(fù)制表結(jié)構(gòu)及數(shù)據(jù)
  • 語(yǔ)法:
CREATE TABLE 待創(chuàng)建的表名
SELECT 字段, ... FROM 已有表名
  • 示例:
mysql> create table departments2
    -> select * from test2021.departments;
Query OK, 13 rows affected (0.01 sec)
Records: 13  Duplicates: 0  Warnings: 0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容