数据库命名规范建议:数据库名只能包含字母、数字、下划线、不能以数字开头、建议使用小写字母、避免使用 MySQL 关键字(如 database、table 等)、如果必须使用关键字,需要用反引号 ` 包裹:
1
>SHOWCREATE DATABASE `database`;
2. 字符集和校验规则
1. 查看系统默认的字符集与校验规则
我们可以使用以下语句查看当前 MySQL 服务的 系统默认字符集 和 默认校验规则:
1 2 3 4
SHOW VARIABLES LIKE'character_set_database'; # 查看当前 USE 的数据库的字符集 SHOW VARIABLES LIKE'collation_database'; # 查看当前 USE 的数据库的校验规则 SHOW VARIABLES LIKE'character_set_server'; # 查看服务器默认字符集 SHOW VARIABLES LIKE'collation_server'; # 查看服务器默认校验规则
也可以一次性查看所有字符集相关配置:
1 2
SHOW VARIABLES LIKE'character_set_%'; SHOW VARIABLES LIKE'collation%';
+----------+--------------------------------------------------------------------------------------------------------------------------------+ | Database | Create Database | +----------+--------------------------------------------------------------------------------------------------------------------------------+ | test | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ | +----------+--------------------------------------------------------------------------------------------------------------------------------+
看着有点乱对吧,可以使用 show create database test\G,此时后面的 ; 可有可无,G 选项的作用是将结果按行垂直排列,每个字段单独占一行,特别适合处理字段值较长的输出场景:
1 2 3 4 5
mysql> show create database test\G *************************** 1. row *************************** Database: test Create Database: CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ 1 row inset (0.00 sec)
说明: 语句会完整显示数据库的创建 SQL,包括字符集与校验规则,可用于迁移或备份时复制创建语句。/*!40100 DEFAULT CHARACTER SET utf8 */ 不是注释,它表示当前 MySQL 版本如果大于 4.10,则执行后面的 SQL 语句,相当于 if 语句。
3. 修改数据库
可通过 ALTER DATABASE 修改数据库的默认字符集与校验规则,语法格式:
1 2 3
ALTER DATABASE 数据库名 [DEFAULTCHARACTER SET 字符集名] [DEFAULTCOLLATE 校验规则]; ALTER DATABASE 数据库名 [DEFAULT] CHARSET=字符集名 [DEFAULT] COLLATE=校验规则; alter database 数据库名 charset=字符集名 collate=校验规则;
1. 示例 1:修改字符集
1 2
ALTER DATABASE test DEFAULTCHARACTER SET utf8mb4; alter database test default charset=utfmb4;
2. 示例 2:修改字符集和校验规则
1 2 3 4 5 6
ALTER DATABASE test DEFAULTCHARACTER SET utf8mb4 DEFAULTCOLLATE utf8mb4_general_ci; ALTER DATABASE test CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
# 分 2 次修改: alter database test character set utf8mb4; alter database test collate utf8mb4_general_ci;
说明: 只会改变“数据库默认字符集”,不会自动修改已存在表的字符集。如果要真正改变表内数据编码,还需针对表执行 ALTER TABLE。
4. 删除数据库
语法格式:
1 2
DROP DATABASE [IF EXISTS] 数据库名; drop database 数据库名;
示例:
1
drop database test;
说明:
IF EXISTS 表示若数据库不存在则不报错。
MySQL 不支持同时删除多个库的语法,一次只能删除一个数据库。如果要一次性删除多个库,需要写多条语句,或用脚本批量执行。
root@hcss-ecs-be68:~/temp# cat t.sql -- MySQL dump 10.13 Distrib 8.0.43, for Linux (x86_64) -- -- Host: localhost Database: test -- ------------------------------------------------------ -- Server version 8.0.43-0ubuntu0.22.04.2
/*!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 */; /*!50503 SET NAMES utf8mb4 */; /*!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: `test` --
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci *//*!80016 DEFAULT ENCRYPTION='N' */;
LOCK TABLES `students` WRITE; /*!40000 ALTER TABLE `students` DISABLE KEYS */; INSERT INTO `students` VALUES (1,'张三',18,'高三'),(2,'李四',17,'高二'),(3,'王五',19,'大学一年级'); /*!40000 ALTER TABLE `students` ENABLE KEYS */; UNLOCK TABLES; /*!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 */;