1.創建數據庫語句
create database語句是在MySQL實例上創建一個指定名稱的數據庫。
create schema語句的語義和create database是一樣的。
2.語法解析
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[create_specification] ...
create_specification:
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
(1)用給定的名稱創建數據庫。如果用這句話,你需要創建數據庫的權限。創建模式是一個創建數據庫的同義詞。
(2)如果數據庫存在且未指定是否存在,則會出現錯誤。
(3)在一個活躍的鎖表語句的會話中不允許創建數據庫。
(4)create_specification選項指定創建數據庫的屬性,並存儲在數據庫目錄的db.opt文件中。
- charcter set屬性指定數據庫的默認字符集;
- collate屬性指定此數據庫的默認排序規則。
[root@localhost course]# ls
course.frm course.ibd db.opt dept.frm dept.ibd students.frm students.ibd teacher_backup.frm teacher_backup.ibd teacher.frm teacher.ibd
[root@localhost course]# cat db.opt
default-character-set=latin1
default-collation=latin1_swedish_ci
(5)MySQL中的數據庫被實現為一個目錄,該目錄包含與數據庫中的表相對應的文件。因為當數據庫初始化時是沒有表的,創建數據庫語句只在MySQL數據目錄下創建一個目錄的和db.opt文件。
(6)如果在數據庫目錄下手動創建目錄(使用mkdir),服務器認為它是數據庫目錄,並顯示在數據庫里。
(7)你也可以使用mysqladmin程序創建數據庫。
3.實踐演示
mysql> create database test2;
Query OK, 1 row affected (0.00 sec)
mysql> show create database test2;
+----------+------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------+
| test2 | CREATE DATABASE `test2` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> create database test3 character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> show create database test3;
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| test3 | CREATE DATABASE `test3` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> create database test3;
ERROR 1007 (HY000): Can't create database 'test3'; database exists
mysql> create database if not exists test3;
Query OK, 1 row affected, 1 warning (0.00 sec)
4.創建數據庫的另一種方式
[root@localhost data]# pwd
/data1/mysql/data
[root@localhost data]# mkdir test1
[root@localhost data]# chown mysql:mysql -R test1
[root@localhost data]# mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.20 MySQL Community Server (GPL)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| a1 |
| a2 |
| a3 |
| course |
| mysql |
| performance_schema |
| sys |
| test1 |
+--------------------+
9 rows in set (0.01 sec)
5.查看數據庫創建語句
SHOW CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
顯示創建命名數據庫的創建數據庫語句。
如果顯示語句包含"IF NOT EXISTS"子句,輸出也包含這樣一個子句。"SHOW CREATE SCHEMA"是"SHOW CREATE DATABASE"的同義詞。
mysql> show create database test2\G
*************************** 1. row ***************************
Database: test2
Create Database: CREATE DATABASE `test2` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)
mysql> show create database test2;
+----------+------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------+
| test2 | CREATE DATABASE `test2` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show create schema test2;
+----------+------------------------------------------------------------------+
| Database | Create Database |
+----------+------------------------------------------------------------------+
| test2 | CREATE DATABASE `test2` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)