網(wǎng)站開發(fā)專業(yè)術(shù)語軟文營銷的五大注意事項(xiàng)
目錄:
- 前言
- 庫的操作
- 創(chuàng)建數(shù)據(jù)庫
- 字符集和校驗(yàn)規(guī)則
- 校驗(yàn)規(guī)則對數(shù)據(jù)庫的影響
- 選擇和查看數(shù)據(jù)庫
- 修改數(shù)據(jù)庫
- 刪除數(shù)據(jù)庫
- 備份
- 注意事項(xiàng)
- 查看連接情況
- 總結(jié)
前言
劍指offer:一年又二天 |
---|
庫的操作
創(chuàng)建、選擇、查看、修改、刪除與備份。
創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
說明:
- 大寫的表示關(guān)鍵字
- [] 是可選項(xiàng)
- CHARACTER SET: 指定數(shù)據(jù)庫采用的字符集
- COLLATE: 指定數(shù)據(jù)庫字符集的校驗(yàn)規(guī)則
mysql> show databases; --- 查看所有數(shù)據(jù)庫,這些數(shù)據(jù)庫都是默認(rèn)的,我們不用管也不要動它們
+---------------------+
| Database |
+---------------------+
| information_schema |
| README_TO_RECOVER_A |
| mysql |
| performance_schema |
| sys |
+---------------------+
5 rows in set (0.00 sec)mysql> create database db1 --- 創(chuàng)建數(shù)據(jù)庫db1,字符集和校驗(yàn)規(guī)則可以不寫使用默認(rèn)。-> charset=utf8-> collate=utf8_bin;
Query OK, 1 row affected (0.00 sec)mysql> show databases; --- 查看所有數(shù)據(jù)庫
+---------------------+
| Database |
+---------------------+
| information_schema |
| README_TO_RECOVER_A |
| db1 | ---
| mysql |
| performance_schema |
| sys |
+---------------------+
6 rows in set (0.00 sec)
字符集和校驗(yàn)規(guī)則
- 查看系統(tǒng)默認(rèn)字符集以及校驗(yàn)規(guī)則
show variables like 'character_set_database';
show variables like 'collation_database';
- 查看數(shù)據(jù)庫支持的字符集
show charset;
字符集主要是控制用什么語言。比如utf8就可以使用中文。
- 查看數(shù)據(jù)庫支持的字符集校驗(yàn)規(guī)則
show collation;
校驗(yàn)規(guī)則對數(shù)據(jù)庫的影響
不區(qū)分大小寫
create database test1 collate utf8_general_ci; --- 創(chuàng)建一個數(shù)據(jù)庫,校驗(yàn)規(guī)則使用utf8_ general_ ci[不區(qū)分大小寫]
區(qū)分大小寫
create database test2 collate utf8_general_ci; --- 創(chuàng)建一個數(shù)據(jù)庫,校驗(yàn)規(guī)則使用utf8_ bin[區(qū)分大小寫]
建表插入數(shù)據(jù)
mysql> create table stu(name char); --- 在數(shù)據(jù)庫test1中建表stu,插入數(shù)據(jù)(test2同操作)
Query OK, 0 rows affected (0.04 sec)mysql> insert into stu values('a'), ('b'), ('A'), ('B');
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0mysql> select * from stu; --- 插入情況
+------+
| name |
+------+
| a |
| b |
| A |
| B |
+------+
4 rows in set (0.00 sec)
- 查詢對比
mysql> use test1; --- 選擇數(shù)據(jù)庫test1
Database changedmysql> select * from stu where name = 'a'; --- 查詢名字為a的學(xué)生
+------+
| name |
+------+
| a |
| A |
+------+
2 rows in set (0.00 sec)
mysql> use test1; --- 選擇數(shù)據(jù)庫test2
Database changedmysql> select * from stu where name = 'a'; --- 查詢名字為a的學(xué)生
+------+
| name |
+------+
| a |
+------+
1 rows in set (0.00 sec)
- 排序?qū)Ρ?/li>
mysql> use test1; --- 選擇數(shù)據(jù)庫test1
Database changedmysql> select * from stu order by name; --- 按照名字排序
+------+
| name |
+------+
| a |
| A |
| b |
| B |
+------+
4 rows in set (0.00 sec)
mysql> use test1; --- 選擇數(shù)據(jù)庫test2
Database changedmysql> select * from stu order by name; --- 按照名字排序
+------+
| name |
+------+
| A |
| B |
| a |
| b |
+------+
4 rows in set (0.00 sec)
選擇和查看數(shù)據(jù)庫
show databases;
- 查看所有數(shù)據(jù)庫
select database();
- 查看當(dāng)前正在使用的數(shù)據(jù)庫
show create database 數(shù)據(jù)庫名;
- 查看數(shù)據(jù)庫創(chuàng)建語句
mysql> show create database db1; --- 顯示創(chuàng)建語法
+----------+-------------------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------------------+
| db1 | CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */ |
+----------+-------------------------------------------------------------------------------+
1 row in set (0.01 sec)mysql> show create database db1 \G --- 更加簡潔的格式顯示
*************************** 1. row ***************************Database: db1
Create Database: CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */
1 row in set (0.00 sec)
MySQL 建議我們關(guān)鍵字使用大寫,但是不是必須的,在顯示時服務(wù)器(mysqld)會將我們的語法進(jìn)行規(guī)范處理。
數(shù)據(jù)庫名字的反引號``,是為了防止使用的數(shù)據(jù)庫名剛好是關(guān)鍵字。
/*!40100 default… */ 這個不是注釋,表示當(dāng)前mysql版本大于4.01版本,就執(zhí)行這句話。
mysql> select database(); --- 查看現(xiàn)在所操作的數(shù)據(jù)庫
+------------+
| database() |
+------------+
| NULL | --- 還沒有選擇數(shù)據(jù)庫
+------------+
1 row in set (0.00 sec)mysql> use db1; --- 選擇數(shù)據(jù)庫db1
Database changedmysql> select database();
+------------+
| database() |
+------------+
| db1 | --- 現(xiàn)在在操作數(shù)據(jù)庫db1
+------------+
1 row in set (0.00 sec)
修改數(shù)據(jù)庫
ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
- 對數(shù)據(jù)庫的修改主要指的是修改數(shù)據(jù)庫的字符集,校驗(yàn)規(guī)則
mysql> show create database db1 \G --- 字符集為 utf8 ,校驗(yàn)規(guī)則為 utf8_bin
*************************** 1. row ***************************Database: db1
Create Database: CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */
1 row in set (0.00 sec)mysql> alter database db1 charset=gbk; --- 修改字符集為gbk
Query OK, 1 row affected (0.00 sec)mysql> show create database db1 \G --- 修改是全部覆蓋式寫入,我們只指明字符集,沒有指明校驗(yàn)規(guī)則,就改為默認(rèn)
*************************** 1. row ***************************Database: db1
Create Database: CREATE DATABASE `db1` /*!40100 DEFAULT CHARACTER SET gbk */
1 row in set (0.00 sec)
mysql并沒有提供自帶的修改數(shù)據(jù)庫名的操作,一種常見的做法是創(chuàng)建一個新的數(shù)據(jù)庫,然后將舊數(shù)據(jù)庫中的表結(jié)構(gòu)和數(shù)據(jù)逐一導(dǎo)入到新數(shù)據(jù)庫中,最后刪除舊數(shù)據(jù)庫。這樣可以達(dá)到“修改”數(shù)據(jù)庫名的效果。
刪除數(shù)據(jù)庫
DROP DATABASE [IF EXISTS] db_ name;
執(zhí)行刪除之后的結(jié)果:
- 數(shù)據(jù)庫內(nèi)部看不到對應(yīng)的數(shù)據(jù)庫 對應(yīng)的數(shù)據(jù)庫文件夾被刪除,
- 級聯(lián)刪除,里面的數(shù)據(jù)表全部被刪
(慎用)
mysql> create database test; --- 創(chuàng)建一個數(shù)據(jù)庫test
Query OK, 1 row affected (0.00 sec)mysql> show databases like 'test'; --- 查看數(shù)據(jù)庫,like:在所有結(jié)果中匹配名為test的數(shù)據(jù)庫(用一下,后面會講)
+-----------------+
| Database (test) |
+-----------------+
| test | --- 找到一個
+-----------------+
1 row in set (0.00 sec)mysql> drop database test; --- 刪除數(shù)據(jù)庫 test
Query OK, 0 rows affected (0.00 sec)mysql> show databases like 'test'; --- 再找,沒找到
Empty set (0.00 sec)
備份
- 備份
語法:
[root@VM-4-11-centos ~]# mysqldump -P3306 -u root -p 密碼 -B 數(shù)據(jù)庫名 > 數(shù)據(jù)庫備份存儲的文件路徑
-P3306:端口號
[root@VM-4-11-centos ~]# mysqldump -P3306 -u root -p -B db1 > ./db1_code.sql
-- 提示輸入mysql中root賬號的密碼
這時,可以打開看看 db1_code.sql 文件里的內(nèi)容,其實(shí)把我們整個創(chuàng)建數(shù)據(jù)庫,建表,導(dǎo)入數(shù)據(jù)的語句都裝載這個文件中。
- 還原
mysql> source D:/mysql-5.7.22/mytest.sql;
注意事項(xiàng)
- 如果備份的不是整個數(shù)據(jù)庫,而是其中的一張表,怎么做?
[root@VM-4-11-centos ~]# mysqldump -u root -p 數(shù)據(jù)庫名 表名1 表名2 > D:/mytest.sql
- 同時備份多個數(shù)據(jù)庫
[root@VM-4-11-centos ~]# mysqldump -u root -p -B 數(shù)據(jù)庫名1 數(shù)據(jù)庫名2 ... > 數(shù)據(jù)庫存放路徑
如果備份一個數(shù)據(jù)庫時,沒有帶上-B參數(shù), 在恢復(fù)數(shù)據(jù)庫時,需要先創(chuàng)建空數(shù)據(jù)庫,然后使用數(shù)據(jù)庫,再使用source來還原。
查看連接情況
語法
show processlist;
mysql> show processlist;
+----+--------+-----------+-------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+--------+-----------+-------+---------+------+----------+------------------+
| 3 | root | localhost | db1 | Sleep | 3710 | | NULL |
| 5 | kz1111 | localhost | db1_1 | Query | 0 | starting | show processlist |
+----+--------+-----------+-------+---------+------+----------+------------------+
2 rows in set (0.00 sec)
可以告訴我們當(dāng)前有哪些用戶連接到我們的MySQL,如果查出某個用戶不是你正常登陸的,很有可能你的數(shù)據(jù)庫被人入侵了??梢杂眠@個指令來查看數(shù)據(jù)庫連接情況。
總結(jié)
數(shù)據(jù)庫不支持重命名,如果真的需要改名字,就把數(shù)據(jù)庫進(jìn)行備份,然后創(chuàng)建新庫并導(dǎo)入即可。(一般用不到)