詳解MySQL語(yǔ)句中的DDL
一.DDL數(shù)據(jù)庫(kù)語(yǔ)句
1.1語(yǔ)句講解
DDL是數(shù)據(jù)定義語(yǔ)言,用來(lái)對(duì)數(shù)據(jù)庫(kù)、表、字段進(jìn)行操作。
show databases;
這句代碼是讓命令行窗口顯示服務(wù)器里一共有多少個(gè)數(shù)據(jù)庫(kù),請(qǐng)看下圖:

MySQL系統(tǒng)軟件下載后,里面默認(rèn)有四個(gè)系統(tǒng)數(shù)據(jù)庫(kù)。
create database if not exists 數(shù)據(jù)庫(kù)名 default charset utf8mb4;
這句代碼是創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)的DDL語(yǔ)句。其中的if not exists 和 default charset utf8mb4是可以省略的。
if not exists的作用是,如果存在test這個(gè)數(shù)據(jù)庫(kù),這句代碼什么都不執(zhí)行,不存在就創(chuàng)建test數(shù)據(jù)庫(kù)。

下滑線部分表示數(shù)據(jù)庫(kù)創(chuàng)建成功。
補(bǔ)充:數(shù)據(jù)庫(kù)中有些字符用3個(gè)字節(jié)不夠表示,utf8的大小是3個(gè)字節(jié),utf8mb4是4個(gè)字節(jié)大小。
use 數(shù)據(jù)庫(kù)名;
這句代碼的作用是指定使用數(shù)據(jù)庫(kù);

在一般情況下,對(duì)一個(gè)數(shù)據(jù)庫(kù)里的表、字段進(jìn)行多步操作后,已經(jīng)忘了自己所處的數(shù)據(jù)庫(kù),使用這句代碼:
select database();
這句代碼可以指出現(xiàn)在處在哪個(gè)數(shù)據(jù)庫(kù)。

drop database if exists 數(shù)據(jù)庫(kù)名;
這句代碼是刪除數(shù)據(jù)庫(kù)的代碼,if exists可以省略,意思是如果存在test數(shù)據(jù)庫(kù)就刪除,否則不執(zhí)行任何操作。

1.2總結(jié)
DDL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)的操作有如下:

二.DDL表語(yǔ)句
2.1語(yǔ)句講解
數(shù)據(jù)庫(kù)的數(shù)據(jù)模型里,數(shù)據(jù)庫(kù)里包含表,所以在講表的知識(shí),先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)先。
show tables;
查詢當(dāng)前使用數(shù)據(jù)庫(kù)里包含的所有表。

由于是新建的數(shù)據(jù)庫(kù),所以是空表Empty。
create table employee( id int comment '編號(hào)', gender char(1) comment '性別', age tinyint unsigned comment '年齡' )comment '員工表';
這是創(chuàng)建表的代碼,我們來(lái)慢慢分析,別怕!
首先create table是創(chuàng)建表的意思,這個(gè)表名是employee。
接著id、gender、age是表格的字段名、int、char(1)、tinyint是數(shù)據(jù)類型。
最后comment這一部分是注釋,可以省略。


每一個(gè)字段與另一個(gè)字段之間用逗號(hào)隔開,最后一個(gè)不加逗號(hào)。
desc 表名;
這句代碼可以顯示表的字段名,字段的數(shù)據(jù)類型。

但是看不到注釋,雖然我們知道id可能是編號(hào)的意思,但是什么編號(hào)就不知道了,普通人?門診號(hào)?還有一種查表的語(yǔ)句:
show create table 表名;
這句代碼的意思是,展示創(chuàng)建表時(shí)的語(yǔ)句。

alter table 表名 rename to 新表名;
這句代碼的意思是選擇原先的表名,改成新的表名。

drop table if exists 表名;
這句代碼是用來(lái)刪除指定表名的表,if exists可以省略,它的意思同前面用到的地方意思是一樣的。

刪完之后,test數(shù)據(jù)庫(kù)里就沒有表了,所以再次顯示表的信息時(shí)為空。
truncate table 表名;
這句代碼也是用來(lái)刪除表的,但它會(huì)重新創(chuàng)建一個(gè)相同類型的沒有數(shù)據(jù)的表,但表的結(jié)構(gòu)還在。
比如前面emp這個(gè)表不是使用drop而是使用truncate的話,那在show tables的時(shí)候,還能看到emp表。
2.2總結(jié)
DDL語(yǔ)句對(duì)表的操作有如下:

三.DDL字段語(yǔ)句
3.1語(yǔ)句講解
對(duì)表中的字段進(jìn)行操作,也是DDL語(yǔ)句有的屬性。接下來(lái)我們就來(lái)學(xué)習(xí)對(duì)字段的操作吧~

突然覺得這個(gè)表在創(chuàng)建的時(shí)候,沒有添加一個(gè)信息,想增加一個(gè)字段,可以這樣做:
alter table 表名 add 字段名 數(shù)據(jù)類型 [comment '注釋'];
比如想加一個(gè)表示薪資的字段:

老板發(fā)現(xiàn)工資用int表示,工資給太高了,想給個(gè)小一點(diǎn)的整型表示,于是:
alter table 表名 modify 字段名 新數(shù)據(jù)類型;

這樣就可以改掉原先字段的數(shù)據(jù)類型了,老板很是開心~
后來(lái)老板發(fā)現(xiàn),這個(gè)薪資不能直接用數(shù)字表現(xiàn)出來(lái),用等級(jí)的話隱蔽性會(huì)更好,這就需要更換整個(gè)字段。
alter table 表名 change 舊字段 新字段 新數(shù)據(jù)類型 [comment '注釋'];

此時(shí),老板的想法達(dá)成了。
alter table emp drop 字段名;
這段代碼的意思是刪除指定表的字段名。

3.2總結(jié)
以下是DDL語(yǔ)句對(duì)字段的操作:

講到這里,DDL語(yǔ)句的基本操作就講完啦!可能讀者很好奇tinyint、smallint、char(1)這些是什么,我們接下來(lái)看。
四.MySQL數(shù)據(jù)類型
SQL里的數(shù)據(jù)類型和其它編程語(yǔ)言有點(diǎn)區(qū)別,但也有相似的地方,它分為三類,我們直接看圖吧。

整型:
數(shù)值類型是其中的一種類型,tinyint的大小是一個(gè)字節(jié)的整型,相當(dāng)于C語(yǔ)言里的char類型。
smallint相當(dāng)于C里的short,bigint相當(dāng)于C里的long long類型。特殊一點(diǎn)的是mediumint占三個(gè)字節(jié)大小。
浮點(diǎn)類型和C是一樣的,有兩點(diǎn)特別的是:decimal和控制浮點(diǎn)數(shù)小數(shù)點(diǎn)保留位數(shù)的方式。
這里得引入兩個(gè)概念,精度和標(biāo)度。
- 精度是浮點(diǎn)數(shù)總共有多少位數(shù),比如3.14的精度是3。
- 標(biāo)度是浮點(diǎn)數(shù)有多少個(gè)小數(shù)位,6.1的標(biāo)度是1。
如何表示三位數(shù),一個(gè)小數(shù)位呢?首先總共有四個(gè)有效位,其次是一個(gè)小數(shù)位,是這樣表示的double(4,1)。

在字符串類型里,有char和varchar,學(xué)過(guò)C語(yǔ)言的讀者會(huì)聯(lián)想到表示字符串用char arr[元素個(gè)數(shù)]數(shù)組表示。
在MySQL用char(元素個(gè)數(shù))表示定長(zhǎng)數(shù)組,varchar(元素個(gè)數(shù))表示可變數(shù)組。注意不是方括號(hào)。
blob是表示二進(jìn)制數(shù)據(jù)的數(shù)據(jù)類型,text是表示文本數(shù)據(jù)的數(shù)據(jù)類型;
二進(jìn)制數(shù)據(jù)類型的有軟件包、音頻呀這些。一般不會(huì)用數(shù)據(jù)庫(kù)存儲(chǔ)的。
tinyblob一個(gè)字節(jié)、blob兩個(gè)字節(jié)、mediumblob三個(gè)字節(jié)、longblob四個(gè)字節(jié)、text一樣的,博主不贅述了。

表示日期時(shí)間的數(shù)據(jù)類型:
date是表示年月日--- yyyy--mm--dd
time是表示時(shí)分秒--- hh--mm--ss
year是表示年--- yyyy
datetime表示年月日,時(shí)分秒
timestamp表示的也是年月日,時(shí)分秒,不同于datetime的是timestamp是時(shí)間戳,由于數(shù)值溢出的原因,在2038年會(huì)失效,也叫Unix千年臭蟲。
五.結(jié)尾
好啦,到這里就講完SQL語(yǔ)句里的DDL語(yǔ)言,還講了MySQL中的數(shù)據(jù)類型與其它編程語(yǔ)言有一定聯(lián)系,也有區(qū)別。
以上就是詳解MySQL語(yǔ)句中的DDL的詳細(xì)內(nèi)容,更多關(guān)于MySQL語(yǔ)句DDL的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
一文搞定MySQL binlog/redolog/undolog區(qū)別
這篇文章主要介紹了一文搞定MySQL binlog/redolog/undolog區(qū)別,作為開發(fā),我們重點(diǎn)需要關(guān)注的是二進(jìn)制日志(binlog)和事務(wù)日志(包括redo log和undo log),本文接下來(lái)會(huì)詳細(xì)介紹這三種日志,需要的朋友可以參考下2023-04-04
mysql如何對(duì)String類型的數(shù)字值排序
這篇文章主要介紹了mysql如何對(duì)String類型的數(shù)字值排序問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
MySQL基礎(chǔ)入門之Case語(yǔ)句用法實(shí)例
case語(yǔ)句是mysql中的一個(gè)條件語(yǔ)句,可以在字段中使用case語(yǔ)句進(jìn)行復(fù)雜的篩選以及構(gòu)造新的字段,下面這篇文章主要給大家介紹了關(guān)于MySQL基礎(chǔ)入門之Case語(yǔ)句用法的相關(guān)資料,需要的朋友可以參考下2022-08-08
MySQL插入數(shù)據(jù)的實(shí)現(xiàn)方式
這篇文章主要介紹了MySQL插入數(shù)據(jù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-07-07
MySQL實(shí)戰(zhàn)教程之Join語(yǔ)句執(zhí)行流程
這篇文章主要介紹了MySQL Join語(yǔ)句執(zhí)行流程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
如何解決mysql表輸入中文出現(xiàn)問(wèn)號(hào)的問(wèn)題
這篇文章主要介紹了如何解決mysql表輸入中文出現(xiàn)問(wèn)號(hào)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
MySQL中DML添加數(shù)據(jù)insert的操作方法
DML英文全稱Data Manipulation Language數(shù)據(jù)操作語(yǔ)言,用來(lái)對(duì)數(shù)據(jù)庫(kù)中表的數(shù)據(jù)記錄進(jìn)行增、刪、改在實(shí)際開發(fā)過(guò)程中使用比較多,務(wù)必掌握操作,這篇文章主要介紹了MySQL中DML添加數(shù)據(jù)insert的操作方法,需要的朋友可以參考下2023-07-07

