目錄
庫的操作
數(shù)據(jù)庫創(chuàng)建
數(shù)據(jù)庫編碼集
數(shù)據(jù)庫刪除
數(shù)據(jù)庫修改
數(shù)據(jù)庫查詢
數(shù)據(jù)庫備份
表的操作
表的創(chuàng)建
查詢表
刪除表
修改表
庫的操作
這里先聲明一下,這篇文章主要是講數(shù)據(jù)庫表的定義操作,也就是 DDL,只要是對數(shù)據(jù)庫以及表結(jié)構(gòu)操作的 SQL
數(shù)據(jù)庫創(chuàng)建
數(shù)據(jù)庫的創(chuàng)建,其實在之前我們淺淺的提過創(chuàng)建數(shù)據(jù)庫。
CREATE DATABASE database_name [character set 字符集編碼 collate 校驗集];
-
一般 mysql 里面關(guān)鍵字用大寫,但是小寫也支持
-
database_name 是數(shù)據(jù)庫名
-
[ ] 里面的是可選項
上面就是創(chuàng)建數(shù)據(jù)庫的語法,我們先不看可選項,我們先簡單的創(chuàng)建一下數(shù)據(jù)庫。
示例:
創(chuàng)建一個 d1 的數(shù)據(jù)庫。
mysql> create database d1;
Query OK, 1 row affected (0.00 sec)
創(chuàng)建好該數(shù)據(jù)庫后,在 /var/lib/mysql 目錄下一定會生成一個 d1 的目錄,而創(chuàng)建數(shù)據(jù)庫的本質(zhì)就是在特定的目錄下創(chuàng)建一個目錄,而幫我們創(chuàng)建該目錄的就是 mysqld(也就是 mysql 服務(wù))。
上面就是默認(rèn)的創(chuàng)建,等創(chuàng)建好后,該數(shù)據(jù)庫的編碼就是按照我們的配置文件里面來的。
數(shù)據(jù)庫編碼集
先說一下什么是編碼,編碼就是當(dāng)一個文本存到計算機(jī)中那么是按照什么格式存儲的,就可以這樣簡單的理解。
在mysql中其實有兩個編碼集:
-
字符集:當(dāng)存儲的時候按照字符集的格式存儲
-
校驗集:當(dāng)數(shù)據(jù)庫里面的數(shù)據(jù)比較或者讀取的時候按照校驗集
所以當(dāng)我們創(chuàng)建數(shù)據(jù)庫的時候,字符集和校驗集一定要是相對應(yīng)的。
上面的編碼集可以簡單理解一下,就是如果我們用中文來寫文章,那么其他人也必須要中中文來理解這篇文章,如果用其他語言的話,那么就會看不懂或者理解錯誤。
編碼集在數(shù)據(jù)庫創(chuàng)建的時候也可以設(shè)置,如果不設(shè)置的話就會按照配置文件里面的默認(rèn)來設(shè)置。
當(dāng)前 mysql 的默認(rèn)字符集和編碼集分別是多少?
字符集:
mysql> show variables like 'character_set_database';
+------------------------+-------+
| Variable_name ? ? ? ? | Value |
+------------------------+-------+
| character_set_database | utf8 |
+------------------------+-------+
1 row in set (0.00 sec)
校驗集:
mysql> show variables like 'collation_database';
+--------------------+-----------------+
| Variable_name ? ? | Value ? ? ? ? ? |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0.00 sec)
上面就是當(dāng)前創(chuàng)建數(shù)據(jù)庫的默認(rèn)編碼集。
當(dāng)前mysql 中所有的編碼集合
字符集:
show character set;
mysql> show character set;
+----------+---------------------------------+---------------------+--------+
| Charset | Description ? ? ? ? ? ? ? ? ? ? | Default collation ? | Maxlen |
+----------+---------------------------------+---------------------+--------+
| big5 ? ? | Big5 Traditional Chinese ? ? ? | big5_chinese_ci ? ? | ? ? ?2 |
| dec8 ? ? | DEC West European ? ? ? ? ? ? ? | dec8_swedish_ci ? ? | ? ? ?1 |
| cp850 ? | DOS West European ? ? ? ? ? ? ? | cp850_general_ci ? | ? ? ?1 |
| hp8 ? ? | HP West European ? ? ? ? ? ? ? | hp8_english_ci ? ? | ? ? ?1 |
| koi8r ? | KOI8-R Relcom Russian ? ? ? ? ? | koi8r_general_ci ? | ? ? ?1 |
| latin1 ? | cp1252 West European ? ? ? ? ? | latin1_swedish_ci ? | ? ? ?1 |
| latin2 ? | ISO 8859-2 Central European ? ? | latin2_general_ci ? | ? ? ?1 |
| swe7 ? ? | 7bit Swedish ? ? ? ? ? ? ? ? ? | swe7_swedish_ci ? ? | ? ? ?1 |
| ascii ? | US ASCII ? ? ? ? ? ? ? ? ? ? ? | ascii_general_ci ? | ? ? ?1 |
| ujis ? ? | EUC-JP Japanese ? ? ? ? ? ? ? ? | ujis_japanese_ci ? | ? ? ?3 |
| sjis ? ? | Shift-JIS Japanese ? ? ? ? ? ? | sjis_japanese_ci ? | ? ? ?2 |
| hebrew ? | ISO 8859-8 Hebrew ? ? ? ? ? ? ? | hebrew_general_ci ? | ? ? ?1 |
| tis620 ? | TIS620 Thai ? ? ? ? ? ? ? ? ? ? | tis620_thai_ci ? ? | ? ? ?1 |
| euckr ? | EUC-KR Korean ? ? ? ? ? ? ? ? ? | euckr_korean_ci ? ? | ? ? ?2 |
| koi8u ? | KOI8-U Ukrainian ? ? ? ? ? ? ? | koi8u_general_ci ? | ? ? ?1 |
| gb2312 ? | GB2312 Simplified Chinese ? ? ? | gb2312_chinese_ci ? | ? ? ?2 |
| greek ? | ISO 8859-7 Greek ? ? ? ? ? ? ? | greek_general_ci ? | ? ? ?1 |
| cp1250 ? | Windows Central European ? ? ? | cp1250_general_ci ? | ? ? ?1 |
| gbk ? ? | GBK Simplified Chinese ? ? ? ? | gbk_chinese_ci ? ? | ? ? ?2 |
| latin5 ? | ISO 8859-9 Turkish ? ? ? ? ? ? | latin5_turkish_ci ? | ? ? ?1 |
| armscii8 | ARMSCII-8 Armenian ? ? ? ? ? ? | armscii8_general_ci | ? ? ?1 |
| utf8 ? ? | UTF-8 Unicode ? ? ? ? ? ? ? ? ? | utf8_general_ci ? ? | ? ? ?3 |
| ucs2 ? ? | UCS-2 Unicode ? ? ? ? ? ? ? ? ? | ucs2_general_ci ? ? | ? ? ?2 |
| cp866 ? | DOS Russian ? ? ? ? ? ? ? ? ? ? | cp866_general_ci ? | ? ? ?1 |
| keybcs2 | DOS Kamenicky Czech-Slovak ? ? | keybcs2_general_ci | ? ? ?1 |
| macce ? | Mac Central European ? ? ? ? ? | macce_general_ci ? | ? ? ?1 |
| macroman | Mac West European ? ? ? ? ? ? ? | macroman_general_ci | ? ? ?1 |
| cp852 ? | DOS Central European ? ? ? ? ? | cp852_general_ci ? | ? ? ?1 |
| latin7 ? | ISO 8859-13 Baltic ? ? ? ? ? ? | latin7_general_ci ? | ? ? ?1 |
| utf8mb4 | UTF-8 Unicode ? ? ? ? ? ? ? ? ? | utf8mb4_general_ci | ? ? ?4 |
| cp1251 ? | Windows Cyrillic ? ? ? ? ? ? ? | cp1251_general_ci ? | ? ? ?1 |
| utf16 ? | UTF-16 Unicode ? ? ? ? ? ? ? ? | utf16_general_ci ? | ? ? ?4 |
| utf16le | UTF-16LE Unicode ? ? ? ? ? ? ? | utf16le_general_ci | ? ? ?4 |
| cp1256 ? | Windows Arabic ? ? ? ? ? ? ? ? | cp1256_general_ci ? | ? ? ?1 |
| cp1257 ? | Windows Baltic ? ? ? ? ? ? ? ? | cp1257_general_ci ? | ? ? ?1 |
| utf32 ? | UTF-32 Unicode ? ? ? ? ? ? ? ? | utf32_general_ci ? | ? ? ?4 |
| binary ? | Binary pseudo charset ? ? ? ? ? | binary ? ? ? ? ? ? | ? ? ?1 |
| geostd8 | GEOSTD8 Georgian ? ? ? ? ? ? ? | geostd8_general_ci | ? ? ?1 |
| cp932 ? | SJIS for Windows Japanese ? ? ? | cp932_japanese_ci ? | ? ? ?2 |
| eucjpms | UJIS for Windows Japanese ? ? ? | eucjpms_japanese_ci | ? ? ?3 |
| gb18030 | China National Standard GB18030 | gb18030_chinese_ci | ? ? ?4 |
+----------+---------------------------------+---------------------+--------+
41 rows in set (0.01 sec)
校驗集:
show collation;
mysql> show collation;
+--------------------------+----------+-----+---------+----------+---------+
| Collation ? ? ? ? ? ? ? | Charset | Id | Default | Compiled | Sortlen |
+--------------------------+----------+-----+---------+----------+---------+
| gbk_chinese_ci ? ? ? ? ? | gbk ? ? | ?28 | Yes ? ? | Yes ? ? | ? ? ? 1 |
| gbk_bin ? ? ? ? ? ? ? ? | gbk ? ? | ?87 | ? ? ? ? | Yes ? ? | ? ? ? 1 |
| latin5_turkish_ci ? ? ? | latin5 ? | ?30 | Yes ? ? | Yes ? ? | ? ? ? 1 |
| latin5_bin ? ? ? ? ? ? ? | latin5 ? | ?78 | ? ? ? ? | Yes ? ? | ? ? ? 1 |
| armscii8_general_ci ? ? | armscii8 | ?32 | Yes ? ? | Yes ? ? | ? ? ? 1 |
| armscii8_bin ? ? ? ? ? ? | armscii8 | ?64 | ? ? ? ? | Yes ? ? | ? ? ? 1 |
| utf8_general_ci ? ? ? ? | utf8 ? ? | ?33 | Yes ? ? | Yes ? ? | ? ? ? 1 |
| utf8_bin ? ? ? ? ? ? ? ? | utf8 ? ? | ?83 | ? ? ? ? | Yes ? ? | ? ? ? 1 |
| utf8_unicode_ci ? ? ? ? | utf8 ? ? | 192 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_icelandic_ci ? ? ? | utf8 ? ? | 193 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_latvian_ci ? ? ? ? | utf8 ? ? | 194 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_romanian_ci ? ? ? ? | utf8 ? ? | 195 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_slovenian_ci ? ? ? | utf8 ? ? | 196 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_polish_ci ? ? ? ? ? | utf8 ? ? | 197 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_estonian_ci ? ? ? ? | utf8 ? ? | 198 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_spanish_ci ? ? ? ? | utf8 ? ? | 199 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_swedish_ci ? ? ? ? | utf8 ? ? | 200 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_turkish_ci ? ? ? ? | utf8 ? ? | 201 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_czech_ci ? ? ? ? ? | utf8 ? ? | 202 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_danish_ci ? ? ? ? ? | utf8 ? ? | 203 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_lithuanian_ci ? ? ? | utf8 ? ? | 204 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_slovak_ci ? ? ? ? ? | utf8 ? ? | 205 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_spanish2_ci ? ? ? ? | utf8 ? ? | 206 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_roman_ci ? ? ? ? ? | utf8 ? ? | 207 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_persian_ci ? ? ? ? | utf8 ? ? | 208 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_esperanto_ci ? ? ? | utf8 ? ? | 209 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_hungarian_ci ? ? ? | utf8 ? ? | 210 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_sinhala_ci ? ? ? ? | utf8 ? ? | 211 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_german2_ci ? ? ? ? | utf8 ? ? | 212 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_croatian_ci ? ? ? ? | utf8 ? ? | 213 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_unicode_520_ci ? ? | utf8 ? ? | 214 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_vietnamese_ci ? ? ? | utf8 ? ? | 215 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
| utf8_general_mysql500_ci | utf8 ? ? | 223 | ? ? ? ? | Yes ? ? | ? ? ? 1 |
| gb18030_chinese_ci ? ? ? | gb18030 | 248 | Yes ? ? | Yes ? ? | ? ? ? 2 |
| gb18030_bin ? ? ? ? ? ? | gb18030 | 249 | ? ? ? ? | Yes ? ? | ? ? ? 1 |
| gb18030_unicode_520_ci ? | gb18030 | 250 | ? ? ? ? | Yes ? ? | ? ? ? 8 |
+--------------------------+----------+-----+---------+----------+---------+
222 rows in set (0.00 sec)
上面的校驗集太多了,所以只截取了一部分。
前面說了,如果創(chuàng)建數(shù)據(jù)庫沒有帶編碼集的話,那么就會按照默認(rèn)來,如果設(shè)置了那么就會就近原則,按照設(shè)置的。
下面我們看一下如何在創(chuàng)建數(shù)據(jù)庫的時候設(shè)置編碼集。
mysql> create database d1 character set utf8 collate utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
上面就是設(shè)置了編碼集,其實還有一種設(shè)置編碼集的方法。
mysql> create database d2 charset=utf8 collate=utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
上面這兩種設(shè)置的方法都可以,但是其實一般我們都是不寫的,因為我們都設(shè)置在了配置文件里面。
那么既然設(shè)置了編碼集,要怎么查看呢?
在 /var/lib/mysql 目錄下,存的是創(chuàng)建好的數(shù)據(jù)庫,當(dāng)創(chuàng)建好一個數(shù)據(jù)庫后都會有一個默認(rèn)的文件 db.opt 文件,而該文件里面寫的就是默認(rèn)的編碼集。
[root@slave0 mysql]# cat ./d1/db.opt
default-character-set=utf8
default-collation=utf8_general_ci
[root@slave0 mysql]# cat ./d2/db.opt
default-character-set=utf8
default-collation=utf8_general_ci
上面是剛才創(chuàng)建的兩個數(shù)據(jù)庫,以及里面的編碼集就是剛才創(chuàng)建數(shù)據(jù)庫時候設(shè)置的,既然如此,我們在看一下如果沒有設(shè)置編碼集默認(rèn)的編碼集是什么。
創(chuàng)建數(shù)據(jù)庫:
mysql> create database d3;
Query OK, 1 row affected (0.00 sec)
查看默認(rèn)編碼集:
[root@slave0 mysql]# cat ./d3/db.opt
default-character-set=utf8
default-collation=utf8_general_ci
這里看到默認(rèn)的編碼集也是 utf8
下面設(shè)置一個其他的編碼集,這樣看起來明顯一點,想要設(shè)置其他的編碼集可以在上面所有的編碼中找一對。
這里我們設(shè)置編碼集為 gbk 和 gbk_chinese_ci
mysql> create database d4 charset=gbk collate=gbk_chinese_ci;
Query OK, 1 row affected (0.00 sec)
查看編碼集:
[root@slave0 mysql]# cat ./d4/db.opt
default-character-set=gbk
default-collation=gbk_chinese_ci
這里看到也是相對應(yīng)的。
數(shù)據(jù)庫刪除
上面說了數(shù)據(jù)庫的創(chuàng)建,那么也說一下數(shù)據(jù)庫的刪除,數(shù)據(jù)庫的刪除是比較簡單的。
drop database database_naeme;
這里就不作示范了,但是這里要說明一點,如果數(shù)據(jù)庫刪除了的話,那么該數(shù)據(jù)庫里面的數(shù)據(jù)也是一同被刪除了,而且刪除后就無法找回了,所以這里并不建議隨便刪除數(shù)據(jù)庫。
數(shù)據(jù)庫修改
數(shù)據(jù)庫修改可以修改數(shù)據(jù)庫的編碼集,mysql 在之前的版本是可以修改數(shù)據(jù)庫的名稱的,但是后來不支持了。而且數(shù)據(jù)庫也不建議隨便修改。
alter database database_name charset=字符集 collate=校驗集;
修改 d1 數(shù)據(jù)庫:
mysql> alter database d1 charset=gbk collate=gbk_chinese_ci;
Query OK, 1 row affected (0.00 sec)
查看默認(rèn)編碼:
[root@slave0 mysql]# cat ./d1/db.opt
default-character-set=gbk
default-collation=gbk_chinese_ci
上面就是修改,而且修改后在查一下也是可以的。
數(shù)據(jù)庫查詢
show databases;
上面這條是查詢所有的數(shù)據(jù)庫
mysql> show databases;
+--------------------+
| Database ? ? ? ? ? |
+--------------------+
| information_schema |
| d1 ? ? ? ? ? ? ? ? |
| d2 ? ? ? ? ? ? ? ? |
| d3 ? ? ? ? ? ? ? ? |
| d4 ? ? ? ? ? ? ? ? |
| mysql ? ? ? ? ? ? |
| performance_schema |
| sys ? ? ? ? ? ? ? |
+--------------------+
8 rows in set (0.00 sec)
除了可以查詢當(dāng)前所有的數(shù)據(jù)庫,還可以查詢當(dāng)前所在的數(shù)據(jù)庫
select database();
上面就是通過 database() 函數(shù) 來查詢當(dāng)前所在數(shù)據(jù)庫。
mysql> select database();
+------------+
| database() |
+------------+
| NULL ? ? ? |
+------------+
1 row in set (0.00 sec)
由于我們當(dāng)前并沒有在其中某一個數(shù)據(jù)庫中,所以我們需要進(jìn)入其中任意一個數(shù)據(jù)庫,然后查詢。
mysql> use d1;
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| d1 ? ? ? ? |
+------------+
1 row in set (0.00 sec)
上面 use 就是選擇數(shù)據(jù)庫,而數(shù)據(jù)庫選擇也不需要退出其他的數(shù)據(jù)庫,可以直接use,當(dāng)進(jìn)入 d1 數(shù)據(jù)庫后,查詢得知當(dāng)前在 d1 數(shù)據(jù)庫。
上面就是庫的操作,增、刪、查、改。
數(shù)據(jù)庫備份
數(shù)據(jù)庫備份可以防止數(shù)據(jù)丟失。
mysqldump -P 端口號 -u 用戶 -p 密碼 -B 數(shù)據(jù)庫名 表名 > /路徑/ file_name.sql
這樣就是對數(shù)據(jù)庫進(jìn)行備份,這時候我們還需要輸入數(shù)據(jù)庫的密碼,如果沒有密碼可以不輸入,直接回車,也可以直接不帶 -p 選項,然后備份到一個目錄下一個 file_name.sql 的文件。
把 d1 備份:
[root@slave0 MySql]# mysqldump -P3306 -uroot -p -B d1 > /MySql/d1.sql
Enter password:
下面我們看一下備份里面的數(shù)據(jù)
[root@slave0 MySql]# cat d1.sql
-- MySQL dump 10.13 Distrib 5.7.43, for Linux (x86_64)
--
-- Host: localhost ? Database: d1
-- ------------------------------------------------------
-- Server version 5.7.43
?
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
?
--
-- Current Database: `d1`
--
?
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `d1` /*!40100 DEFAULT CHARACTER SET gbk */;
?
USE `d1`;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
?
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
?
-- Dump completed on 2023-08-21 11:54:09
?
其實數(shù)據(jù)庫的備份里面存儲的并不是數(shù)據(jù),而是對該數(shù)據(jù)庫的一些操作,由于我們沒有對該數(shù)據(jù)庫做什么操作所以里面也沒有什么內(nèi)容。
恢復(fù)備份
source 路徑
恢復(fù)備份只需要 source 然后后面跟備份路徑就可以了,到時候 mysql 會自動執(zhí)行里面原本的操作然后恢復(fù)數(shù)據(jù)。
恢復(fù) d1 數(shù)據(jù)庫:
mysql> source /MySql/d1.sql
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 0 rows affected, 1 warning (0.00 sec)
?
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 1 row affected (0.00 sec)
?
Database changed
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 0 rows affected, 1 warning (0.00 sec)
?
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 0 rows affected (0.00 sec)
?
Query OK, 0 rows affected (0.00 sec)
查看是否恢復(fù):
mysql> show databases;
+--------------------+
| Database ? ? ? ? ? |
+--------------------+
| information_schema |
| d1 ? ? ? ? ? ? ? ? |
| d2 ? ? ? ? ? ? ? ? |
| d3 ? ? ? ? ? ? ? ? |
| d4 ? ? ? ? ? ? ? ? |
| mysql ? ? ? ? ? ? |
| performance_schema |
| sys ? ? ? ? ? ? ? |
| test ? ? ? ? ? ? ? |
+--------------------+
9 rows in set (0.00 sec)
這里看到 d1 數(shù)據(jù)庫已經(jīng)恢復(fù)到數(shù)據(jù)庫了。
表的操作
前面我們說的樹庫的操作,那么當(dāng)我們會對庫進(jìn)行操作后,我們當(dāng)然也是需要會對表進(jìn)行操作的。
而表的操作也是屬于 DDL 的一部分。
表的創(chuàng)建
表的創(chuàng)建用的關(guān)鍵字也是 create 因為這些操作都屬于 DDL 所以關(guān)鍵字都基本一樣。
create table [if not exists] table_name (
filed1 datatype [comment '該字段描述'],
filed2 datatype [comment '該字段描述'],
filed3 datatype [comment '該字段描述']
) [character set 字符集 collate 校驗集 engine 索引];
-
create table 創(chuàng)建表
-
filed 列名
-
datatype 數(shù)據(jù)類型
-
comment 該字段的描述
-
if not exists 表示如果該表不存在就創(chuàng)建,否則不創(chuàng)建
-
[ ]可選項
下面我們自己創(chuàng)建一張表 table表:
mysql> create table table1(
? -> name varchar(10),
? -> id int);
Query OK, 0 rows affected (0.01 sec)
上面就是創(chuàng)建一張表,我們沒有帶 comment 等字段,也沒有帶編碼集,如果沒有帶編碼集的話,那么就是根據(jù)數(shù)據(jù)庫的編碼集,如果帶了那么就是按照自己設(shè)置的編碼集。
那么我們把這些字段都帶上,然后創(chuàng)建一個 user 表:
mysql> create table if not exists user(
? -> id int comment '用戶 ID',
? -> name varchar(12) comment '用戶名',
? -> birthday date comment '用戶生日'
? -> )character set utf8 collate utf8_general_ci engine innodb;
Query OK, 0 rows affected (0.01 sec)
這里介紹一下這些內(nèi)容,首先 id、name 、birthday 等這些就是列名,而后面跟的就是類型,這些類型和語言里面的是有一些差別的,我們后面會專門介紹。
這樣就是創(chuàng)建一張表。
查詢表
經(jīng)過剛才創(chuàng)建表,我們現(xiàn)在看一下查詢表
show tables;
show tables 這樣查的表是該數(shù)據(jù)庫里面所有的表。
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| table1 ? ? ? ? |
| user ? ? ? ? ? |
+----------------+
2 rows in set (0.00 sec)
其中還可以查詢表的結(jié)構(gòu)
desc table_name;
查詢 user 表:
mysql> desc user;
+----------+-------------+------+-----+---------+-------+
| Field ? | Type ? ? ? | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id ? ? ? | int(11) ? ? | YES | ? ? | NULL ? | ? ? ? |
| name ? ? | varchar(12) | YES | ? ? | NULL ? | ? ? ? |
| birthday | date ? ? ? | YES | ? ? | NULL ? | ? ? ? |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
這就是查詢到表結(jié)構(gòu):
-
filed 列名
-
Type 類型
-
Null 表示是否為空
-
Key 表示索引
-
Default 表示默認(rèn)值
-
Extra 表示該表的額外信息等,常見的有 默認(rèn)自增加等...
但是在創(chuàng)建表的時候,我們還有一些描述在里面,但是這樣看不到描述。
show create table table_name;
上面就是查看創(chuàng)建時候的詳細(xì)字段,但是上面這樣查看并不好看,我們可以加一個 \G查看更好看。
mysql> show create table user \G
*************************** 1. row ***************************
? ? ? Table: user
Create Table: CREATE TABLE `user` (
?`id` int(11) DEFAULT NULL COMMENT '用戶 ID',
?`name` varchar(12) DEFAULT NULL COMMENT '用戶名',
?`birthday` date DEFAULT NULL COMMENT '用戶生日'
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
這樣查看就可以看到創(chuàng)建時候的詳細(xì)信息了。
但是這和我們當(dāng)時寫的時候不一致,因為mysql 會記錄用戶的所有操作,但是也會在記錄的時候幫這些內(nèi)容進(jìn)行修改,當(dāng)然修改是更正式了。
刪除表
表的刪除也是很簡單,和數(shù)據(jù)庫刪除一樣,但是這里還是和數(shù)據(jù)庫的刪除一樣,刪除后就沒辦法恢復(fù)了,所以不建議隨便刪除。
drop table table_name;
刪除表就不演示了。
修改表
修改表也是對表結(jié)構(gòu)的一些修改,而不是修改其中的數(shù)據(jù)。
alter table table_name rename to table_name1;
上面是修改表名的語法
修改 user 為 user1:
mysql> alter table user rename to user1;
Query OK, 0 rows affected (0.00 sec)
下面開始正式介紹修改
添加一列:
alter table table_name add 列名 數(shù)據(jù)類型 [after 列明];
-
after 后面的列名 表示添加的一列在哪一列后面,如果不設(shè)置默認(rèn)為最后
刪除一列:
alter table table_name drop 列名;
修改一列數(shù)據(jù)類型:
alter table table_name modify 列名 新的數(shù)據(jù)類型;
修改列名:
alter table table_name change 列明 新列明 新數(shù)據(jù)類型;
示例:
user1 表中添加一列 path 到 birthday 后面 數(shù)據(jù)類型為 varchar(30)
mysql> alter table user1 add path varchar(30) after birthday;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 ?Warnings: 0
?
mysql> desc user1;
+----------+-------------+------+-----+---------+-------+
| Field ? | Type ? ? ? | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id ? ? ? | int(11) ? ? | YES | ? ? | NULL ? | ? ? ? |
| name ? ? | varchar(12) | YES | ? ? | NULL ? | ? ? ? |
| birthday | date ? ? ? | YES | ? ? | NULL ? | ? ? ? |
| path ? ? | varchar(30) | YES | ? ? | NULL ? | ? ? ? |
+----------+-------------+------+-----+---------+-------+
刪除 path 列
mysql> alter table user1 drop path;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 ?Warnings: 0
?
mysql> desc user1;
+----------+-------------+------+-----+---------+-------+
| Field ? | Type ? ? ? | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id ? ? ? | int(11) ? ? | YES | ? ? | NULL ? | ? ? ? |
| name ? ? | varchar(12) | YES | ? ? | NULL ? | ? ? ? |
| birthday | date ? ? ? | YES | ? ? | NULL ? | ? ? ? |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
將 name 列數(shù)據(jù)類型修改為 varchar(20)文章來源:http://www.zghlxwxcb.cn/news/detail-663095.html
mysql> alter table user1 modify name varchar(20);
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 ?Warnings: 0
?
mysql> desc user1;
+----------+-------------+------+-----+---------+-------+
| Field ? | Type ? ? ? | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id ? ? ? | int(11) ? ? | YES | ? ? | NULL ? | ? ? ? |
| name ? ? | varchar(20) | YES | ? ? | NULL ? | ? ? ? |
| birthday | date ? ? ? | YES | ? ? | NULL ? | ? ? ? |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
將 name 列的列名修改為 xingming 數(shù)據(jù)類型不變文章來源地址http://www.zghlxwxcb.cn/news/detail-663095.html
mysql> alter table user1 change name xingming varchar(20);
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 ?Warnings: 0
?
mysql> desc user1;
+----------+-------------+------+-----+---------+-------+
| Field ? | Type ? ? ? | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id ? ? ? | int(11) ? ? | YES | ? ? | NULL ? | ? ? ? |
| xingming | varchar(20) | YES | ? ? | NULL ? | ? ? ? |
| birthday | date ? ? ? | YES | ? ? | NULL ? | ? ? ? |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
到了這里,關(guān)于mysql 數(shù)據(jù)庫定義語言(DDL)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!