使用SQL语句创建数据库studentsdb
很多人第一次接触数据库,使用卡住的句创建数据库地方不是SELECT怎么写,而是使用连库都还没建出来。这就像你要整理一间屋子,句创建数据库结果连门都没打开。使用SQL里创建数据库的句创建数据库语句其实就一行核心命令,但围绕它的使用细节,足够让新手踩几个坑。句创建数据库 打开MySQL命令行或者Navicat的使用查询窗口,输入: 回车执行,句创建数据库如果没报错,使用studentsdb这个库就躺在你的句创建数据库数据库列表里了。用 我第一次建库的时候,用的是默认字符集。结果往里插中文数据,全是问号。后来查了半天才知道,MySQL早期版本的默认字符集是latin1,存英文没问题,中文直接乱码。所以现在建库,我习惯把字符集和排序规则一起指定: utf8mb4和utf8的区别值得说一句。MySQL里的utf8是个“残废”版本,最多只支持3字节,存不了emoji和一些生僻汉字。utf8mb4才是真正的UTF-8,4字节完整支持。这个坑我在一个学生姓名表里遇到过——有个名字带“𠮷”字,用utf8直接插入失败。换成utf8mb4之后一切正常。 排序规则utf8mb4_unicode_ci里的ci是case insensitive,大小写不敏感。意味着 还有一种情况:你不确定这个库是否已经存在。直接CREATE DATABASE会报错。加个IF NOT EXISTS就稳了: 这条语句在脚本里特别实用。比如你写了一个初始化脚本,反复执行时不会因为库已存在而中断。我见过有同学在部署脚本里没加这个判断,第二次跑直接报错退出,排查了半天以为是权限问题。 建完库之后,通常要切进去才能建表: 然后才能写CREATE TABLE。这个顺序不能乱。有人建完库直接写建表语句,忘了USE,结果表建到了另一个默认库里。这种错误不报错,但数据写到了错误的地方,查起来很隐蔽。 权限方面也提一句。如果你用的不是root账号,CREATE DATABASE需要相应的权限。普通用户可能只有对特定库的操作权限,没有建库权限。执行时报“Access denied”就是这个问题。找DBA开权限,或者换有权限的账号。 还有一个实际场景:教学环境里经常需要重建库。比如每次上课前把studentsdb删掉重新建,保证初始状态一致。这时候用: 两句话搞定重置。DROP那行加IF EXISTS同样是为了避免库不存在时报错。顺序不能反,先删后建。有人写反了,先建再删,结果库没了。 建库这件事,说简单也简单,一行语句的事。但字符集、排序规则、存在性判断、权限、后续的USE切换,每个点都可能让新手卡住。我的建议是:养成习惯,建库时把字符集和排序规则写全,加上IF NOT EXISTS。多打几个字,省掉后面一堆乱码和报错的麻烦。CREATE DATABASE studentsdb;SHOW DATABASES; 能看到它。使用这一步本身没什么难度,句创建数据库但问题往往出在后面。使用CREATE DATABASE studentsdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;WHERE name = 'Tom' 和 WHERE name = 'tom' 结果一样。如果业务需要区分大小写,得换成utf8mb4_bin。这个选择在建库时就定下来了,后面改虽然可以,但涉及表结构和数据迁移,麻烦得很。CREATE DATABASE IF NOT EXISTS studentsdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;USE studentsdb;DROP DATABASE IF EXISTS studentsdb; CREATE DATABASE studentsdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
上一篇
-
下一篇