MySQL對數(shù)據(jù)庫和表進(jìn)行DDL命令的操作代碼
一、什么是DDL操作
DDL(Data Definition Language),是數(shù)據(jù)定義語言的縮寫,它是SQL(Structured Query Language)語言的一個子集,用于定義或修改數(shù)據(jù)庫的結(jié)構(gòu)。DDL主要包括創(chuàng)建(CREATE)、修改(ALTER)、刪除(DROP)等操作。
二、數(shù)據(jù)庫編碼集和數(shù)據(jù)庫校驗集
數(shù)據(jù)庫編碼集就是當(dāng)對數(shù)據(jù)庫內(nèi)容進(jìn)行存儲時,采用怎樣的編碼格式來存儲。
數(shù)據(jù)庫校驗集就是當(dāng)對數(shù)據(jù)庫內(nèi)容進(jìn)行讀取時,采用怎樣的編碼格式來讀取。
所以,為了保證數(shù)據(jù)庫在讀取數(shù)據(jù)時,不會產(chǎn)生亂碼,我們就需要讓數(shù)據(jù)庫的編碼集和校驗集進(jìn)行對應(yīng),比如說用utf8的格式進(jìn)行存儲,那么也必須使用utf8的格式進(jìn)行讀取!
如何查看自己的mysql支持怎樣的編碼集和校驗集?show charset;
查看編碼集show collation;
查看校驗集
如何查看當(dāng)前的默認(rèn)的編碼集和校驗集?show variables like 'character_set_database';
show variables like 'collation_database';
三、使用步驟
對數(shù)據(jù)庫的增刪查改
1.創(chuàng)建數(shù)據(jù)庫
現(xiàn)在我要創(chuàng)建一個名為test的數(shù)據(jù)庫,應(yīng)該怎么創(chuàng)建呢?
create database test;
這是最簡單的寫法。create database if not exists test;
加上if not exists 表示如果不存在該數(shù)據(jù)庫才創(chuàng)建。create database if not exists test charset=utf8mb3 collate=utf8mb3_general_ci;
加上charset=utf8mb3,讓該數(shù)據(jù)庫默認(rèn)采用utf8mb3的編碼集格式,collate=utf8mb3_general_ci讓該數(shù)據(jù)庫默認(rèn)采用utf8mb3_general_ci的編碼集格式。這里的charset=utf8mb3還可以寫成 character set utf8mb3;collate=utf8mb3_general_ci還可以寫成collate utf8mb3_general_ci。
當(dāng)我們創(chuàng)建一個數(shù)據(jù)庫之后,我們可以在/var/lib/mysql路徑下找到對應(yīng)的數(shù)據(jù)庫目錄。
2.進(jìn)入數(shù)據(jù)庫
use database_name;
進(jìn)入了這個數(shù)據(jù)庫,我們才能再對數(shù)據(jù)庫中的表進(jìn)行增刪查改。
3.顯示數(shù)據(jù)庫
show databases;
如何查看我當(dāng)前所在的數(shù)據(jù)庫?select database();
4.修改數(shù)據(jù)庫
對數(shù)據(jù)庫進(jìn)行修改只能修改其字符編碼集和字符校驗集。alter database test charset=gbk collate=gbk_chinese_ci;
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME = DATABASE();
那有沒有修改數(shù)據(jù)庫名字的操作呢? 以前有,但是被移除了,因為不安全!
如果想要修改數(shù)據(jù)庫的名字,應(yīng)該使用mysqldump進(jìn)行備份!
首先這里需要插入一個前備知識。
當(dāng)輸入show create database test;
需要注意的是,這里的/*!40100 DEFAULT CHARACTER SET gbk / /!80016 DEFAULT ENCRYPTION=‘N’ */并不是注釋,而是可變選項!
所以這個指令是什么意思? 這個指令是告訴我們?nèi)绻獎?chuàng)建一個test數(shù)據(jù)庫,需要輸入怎樣的指令。
mysqldump
mysqldump是一個bash命令,并不是mysql命令,這個命令程序在安裝mysql的時候也順帶安裝上了。
我們?nèi)绻獙⒛硞€數(shù)據(jù)庫進(jìn)行備份,就可以使用這個命令。
我們先在test庫先創(chuàng)建一個表,并插入一些內(nèi)容以便等會看實驗現(xiàn)象。
此時我們再退出數(shù)據(jù)庫,并進(jìn)入一個空目錄下,執(zhí)行命令mysqldump -P 3306 -u root -p -B test >./test.sql
再使用ls
就可看到,此目錄多出一個test.sql的文件。
我們可以打開文件,看文件的內(nèi)容是什么。
如果細(xì)心觀察就可以看出這就是一串創(chuàng)建數(shù)據(jù)庫、創(chuàng)建表并插入數(shù)據(jù)的mysql指令。
所以,mysqldump的備份其實是備份“指令”。
那么怎么導(dǎo)入這個文件為我們創(chuàng)建數(shù)據(jù)庫呢?
再登錄我們的mysql,將我們的test數(shù)據(jù)庫刪掉。
輸入source /home/fengjunziya/test/lesson37_mysqltest/test.sql;
它就為我們執(zhí)行了那個文件的命令,也就達(dá)到了備份導(dǎo)入的作用。
可是怎么修改數(shù)據(jù)庫名字呢?
首先在使用mysqldump命令時不能加上-Bmysqldump -P3306 -uroot -p test > test.sql
這時我們就可以看到文件內(nèi)的并沒有創(chuàng)建數(shù)據(jù)庫的指令。
所以我們在使用source導(dǎo)入的時候,就需要先創(chuàng)建一個數(shù)據(jù)庫(新名字)再進(jìn)行導(dǎo)入。
create database hello;
創(chuàng)建hello數(shù)據(jù)庫use hello;
進(jìn)入hello數(shù)據(jù)庫source /home/fengjunziya/test/lesson37_mysqltest/test.sql;
導(dǎo)入文件指令select database();
查看當(dāng)前所在數(shù)據(jù)庫select * from user;
查看user表中的數(shù)據(jù)內(nèi)容
最后也是被拷貝進(jìn)來了。
5.刪除數(shù)據(jù)庫
刪除數(shù)據(jù)庫很簡單,但是一旦刪除數(shù)據(jù)庫,該數(shù)據(jù)庫內(nèi)的數(shù)據(jù)將全部被清空,所以需要謹(jǐn)慎!
drop database database_name;
需要注意的是,對于數(shù)據(jù)庫而言,不論是修改還是刪除,都是有風(fēng)險的行為,因為我們的數(shù)據(jù)庫一般都是直接與上層服務(wù)連接,一旦修改數(shù)據(jù)庫的名字,或者刪除數(shù)據(jù)庫都可能會造成上層服務(wù)出現(xiàn)問題!
對表的增刪查改
1.添加/創(chuàng)建表
創(chuàng)建表的格式怎么寫呢?create table table_name(...);
還可以加入 if not exists
還可以加入comment 添加描述
再復(fù)雜點(diǎn)還可以指定字符編碼集、字符校驗集還有存儲引擎
2.插入表內(nèi)容
insert into table_name values (...), (...), ... ;
insert是下一章的DML操作,這里大家先接觸一下。
3.查看表
查看所有表
show tables;
查看表結(jié)構(gòu)
desc table_name;
查看表內(nèi)容
select * from table_name;
select也是下一章的DML命令。
4.修改表
修改表的名字
alter table table_name rename (to) new_name;
修改表的結(jié)構(gòu)
對表結(jié)構(gòu)的增加
如果要對表原有的結(jié)構(gòu)再加一欄。alter table table_name add newfield type;
alter table teachers add birthday varchar(20) after gender;
after gender代表是在gender后面加一欄。
對表結(jié)構(gòu)的其中一列屬性進(jìn)行修改
alter table table_name modify field_name type;
對表結(jié)構(gòu)的其中一列改名并修改屬性
alter table table_name change field_name newfield_name type;
對表結(jié)構(gòu)的刪除
alter table table_name drop field_name;
刪除表
drop table table_name;
一旦刪除表,該表的數(shù)據(jù)將全部被清空,所以需要謹(jǐn)慎!
以上就是MySQL對數(shù)據(jù)庫和表進(jìn)行DDL命令的操作代碼的詳細(xì)內(nèi)容,更多關(guān)于MySQL數(shù)據(jù)庫和表DDL的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
小型Drupal數(shù)據(jù)庫備份以及大型站點(diǎn)MySQL備份策略分享
為了防止web服務(wù)器出現(xiàn)故障而引起的數(shù)據(jù)丟失,數(shù)據(jù)庫備份顯得非常重要,以免出現(xiàn)重大損失。本文分析研究一下小型的Drupal站的備份策略以及大型站點(diǎn)的mysql備份策略2014-11-11MySQL入門(四) 數(shù)據(jù)表的數(shù)據(jù)插入、更新、刪除
這篇文章主要介紹了mysql數(shù)據(jù)庫中表的插入、更新、刪除非常簡單,但是簡單的也要學(xué)習(xí),細(xì)節(jié)決定成敗,需要的朋友可以參考下2018-07-07Xtrabackup使用指南 InnoDB數(shù)據(jù)備份工具
Xtrabackup是一個對InnoDB做數(shù)據(jù)備份的工具,支持在線熱備份(備份時不影響數(shù)據(jù)讀寫),是商業(yè)備份工具InnoDB Hotbackup的一個很好的替代品2011-10-10MySQL4 File ‘c:\mysql\share\charsets\?.conf’ not found (Errc
File ‘c:\mysql\share\charsets\?.conf’ not found (Errcode: 22) Character set ‘#33′ is not a compiled character set and is not specified in the ‘c:\mysql\share\charsets\Index’ file2013-08-08