小贴纸“文章阅读与部分提示信息说明”文章中,使用白底黑字部分为叙述、说明。黑底显示部分,为系统命令行下的代码信息显示区域;其中白色文字为输入的SQL语句或系统输出的信息,为了特别着重说明这些信息,也会用蓝色、加粗等方式突出显示效果;其中红色文字为注释说明,也会用到加粗方式突出显示效果。
MySQL数据系统与其它关系数据库一样,在需要使用该数据库之前,必须先创建数据库。但创建数据库后万一创建的数据库有问题,只能删除数据库后重新创建吗?当然不是!现在的MySQL数据库系统已经非常完善,有相应的数据库修改语句可以使用。
之前已经提出过一个概念,就是任何程序都是四种语句状态:新增、查找、修改、删除。修改数据库当然属于第三种语句状态(有些书籍、资料中也有称为“编辑”或“再编辑”的)。让我们先用HELP‘CREATEDATABASE’;命令查看一下该语句的结构。
mysqlHELP‘ALTERDATABASE’;#使用HELP帮助功能调阅命令信息Name:‘ALTERDATABASE’Description:Syntax:#蓝色文字为该语句的语法格式ALTER{DATABASE
SCHEMA}[db_name]alter_option…alter_option:{[DEFAULT]CHARACTERSET[=]charset_name
[DEFAULT]COLLATE[=]collation_name
[DEFAULT]ENCRYPTION[=]{‘Y’
‘N’}
READONLY[=]{DEFAULT
0
1}#发现有不同的选项}….#使用命令行方式,查找该语法格式,之后还有很多。这里不再截取显示。
如果阅读过我之前写的“MySQL创建数据库CREATE{DATABASE|SCHEMA}”这篇文章,因该对以上语句格式感到非常熟悉了。因为除了第一个关键字ALTER不同以外,其他几乎都一样。唯一不同的是多了一个
READONLY[=]{DEFAULT
0
1选项。
READONLY[=]{DEFAULT
0
1初步理解是读取限制(开关)。以下是官方资料:ReadOnlyOptionTheREADONLYoption,introducedinMySQL8.0.22,controlswhethertopermitmodificationofthedatabaseandobjectswithinit.ThepermittedvaluesareDEFAULTor0(notreadonly)and1(readonly).ThisoptionisusefulfordatabasemigrationbecauseadatabaseforwhichREADONLYisenabledcanbemigratedtoanotherMySQLinstancewithoutconcernthatthedatabasemightbechangedduringtheoperation.以下是水平极其一般我的翻译:MySQL8.0.22中引入的READONLY选项控制是否允许修改数据库和其中的对象。允许的值为DEFAULT或0(非只读)和1(只读)。此选项对于数据库迁移很有用,因为启用了READONLY的数据库可以迁移到另一个MySQL实例,而无需担心数据库在操作期间可能会更改。
小贴纸本人的英语水平非常有限,一定有不准确的地方,请大家见谅!
从以上帮助信息,可以看出。MySQL8.0.22中才被启用该功能。换句话花说,如果您现在使用MySQL5版本学习,就没有这个选项。该功能是一个开关。开启后,数据库就处于只读状态。在数据库迁移的时候,起到很好的作用。其实这个作用我们可以展开应用,比如,您之后开发的由MySQL数据库驱动的网站,或者信息检索项目,只是管理员发布信息,而又不需要交互,就可以开启这样的选项。因为这样可以避免很多网络上的攻击和篡改数据。
好了,让我们来实际操作以下这个命令语句吧。GO!
mysqlSHOWDATABASES;+——————–+
Database
+——————–+
db_test1
db_test2
db_test3
db_test4
db_test5
db_test6
db_test7
information_schema
mysql
performance_schema
sys
测试用中文数据库
+——————–+12rowsinset(0.22sec)mysqlSHOWCREATEDATABASEdb_test1;+———-+————————————————————————————————————————————+
Database
CreateDatabase
+———-+————————————————————————————————————————————+
db_test1
CREATEDATABASEdb_test1/*!DEFAULTCHARACTERSETutf8mb4COLLATEutf8mb4__ai_ci*//*!DEFAULTENCRYPTION=’N’*/
+———-+————————————————————————————————————————————+1rowinset(0.06sec)
如果阅读过我之前写的“MySQL创建数据库CREATE{DATABASE|SCHEMA}”这篇文章,对上面的语句,包括SHOWDATABASES;SHOWCREATEDATABASEdb_test1;语句因该非常熟悉了。这里也就不再多加注释信息了。请注意:/*!DEFAULTCHARACTERSETutf8mb4COLLATEutf8mb4__ai_ci*//*!DEFAULTENCRYPTION=’N’*/蓝色文字部分,是修改数据库的主要针对部分。
mysqlALTERDATABASEdb_test1CHARACTERSETutf8;#输入语句,修改数据库中的字符集。QueryOK,1rowaffected,1warning(0.28sec)mysqlSHOWCREATEDATABASEdb_test1;+———-+——————————————————————————————————+
Database
CreateDatabase
+———-+——————————————————————————————————+
db_test1
CREATEDATABASEdb_test1/*!DEFAULTCHARACTERSETutf8*//*!DEFAULTENCRYPTION=’N’*/
+———-+——————————————————————————————————+#查下修改字符集结果1rowinset(0.00sec)
以上操作,我们只修改了数据库字符集信息。这是因为,字符集和排序规则是有隶属关系的。排序规则一定属于一个特定字符集,这样系统可以自己查找到并且自动添加。反之,字符集下会有很多排序规则,如果用户未指定,系统不知道为您指定那个具体的排序规则,所以无法添加。
小贴纸“字符集和排序规则”有关这个问题,笔者真的翻阅过大量资料,最后看到吐。我最后的理解是,计算机上需要处理很多文字(汉语、英语、日语、德语、西班牙语……)等等语言。需要处理这样多不同国家的文字需要有标准。字符集就是标准,字符集名称就是语言的名字。比如汉语,就是字符集的名字。排序规则可以理解为方言。虽然说的都是中文,辽宁方言,是无法与广东方言交流的。何况还有方言大省福建(据说在福建,过一个山口,当地人就听不懂山对面人的话了)。排序规则有些书籍资料上也有称为校验方式校验规则等等的。
mysqlSHOWCREATEDATABASEdb_test2;#输入语句,查看数据库字符集信息。+———-+————————————————————————————————————————————+
Database
CreateDatabase
+———-+————————————————————————————————————————————+
db_test2
CREATEDATABASEdb_test2/*!DEFAULTCHARACTERSETutf8mb4COLLATEutf8mb4__ai_ci*//*!DEFAULTENCRYPTION=’N’*/
+———-+————————————————————————————————————————————+#蓝色文字为现数据库的字符集与排序规则信息。1rowinset(0.00sec)mysqlALTERDATABASEdb_test2COLLATE‘utf8_unicode__ci’;#输入语句,修改数据库排序规则。QueryOK,1rowaffected,1warning(0.03sec)mysqlSHOWCREATEDATABASEdb_test2;+———-+———————————————————————————————————————————-+
Database
CreateDatabase
+———-+———————————————————————————————————————————-+
db_test2
CREATEDATABASEdb_test2/*!DEFAULTCHARACTERSETutf8COLLATEutf8_unicode__ci*//*!DEFAULTENCRYPTION=’N’*/
+———-+———————————————————————————————————————————-+#确认已经修改完成的数据库排序规则信息。1rowinset(0.05sec)
以上操作,我们只修改了数据库排序规则信息。同时,系统自动为您添加了相对于的字符集。
mysqlALTERDATABASEdb_test2CHARACTERSET’tis′COLLATE’tis_thai_ci’ENCRYPTION=’Y’READONLY=1;##输入语句,修改数据库字符集、排序规则、加密模式、只读模式。QueryOK,1rowaffected(0.03sec)mysqlSHOWCREATEDATABASEdb_test2;+———-+—————————————————————————————————————————-+
Database
CreateDatabase
+———-+—————————————————————————————————————————-+
db_test2
CREATEDATABASEdb_test2/*!DEFAULTCHARACTERSETtis*//*!DEFAULTENCRYPTION=’Y’*//*READONLY=1*/
+———-+—————————————————————————————————————————-+#确认已经修改完成的数据库字符集、排序规则、加密模式、只读模式。1rowinset(0.04sec)
这次我们的修改操作,把所有的选项都用上了。最后查看到,READONLY=1这个是全新的选项。
至此,有关MySQL数据库系统,所有关于数据库修改语句已经全部讲完!不过也许你会说,不对!如果在建立好的数据库后,又发现数据库的名字也需要再修改,如何处理?如果您看到这里,也有同样的疑问,恭喜您!说明您已经开始慢慢的体会到MySQL数据库系统的设计思路了。按之前我们学习的所有语句结构,应会有一个叫ALTERDATABASENAME的语句。其实还真的有,不过语句是RENAMEDATABASEold_db_nameTOnew_db_name
小贴纸出于安全考虑,RENAMEDATABASE语句在MySQL从5的部分版本已经开始舍弃该语句。有的资料说5.1.23之前的旧版本中还可以使用,之后的不可以。笔者未能从官方文档中,得到具体的版本号!
所以,如果您的MySQL版本是5.7、5.6或者是现在用的8.0。这个语句是无法使用的。
如果,一定要对数据库更名!好吧,也许会发生这不该发生的情况的!1:完整备份原有数据库;2:建立新的数据库;3:将原数据库备份文件,恢复到新数据库;4:对比数据库所有信息;5:删除原数据库。感觉是吃饱了撑的!
所以,创建数据库之前,先规划好数据库名,如果误操作造字不对,直接删除后再建立正确的!在之后的文章中,我们将学习如何删除一个已有的数据库。
小贴纸笔者水平有限,难免有错误的地方,如果您发现,很希望能告诉我。raoul
foxmail.