实验2 MySQL数据库对象管理.docx
- 文档编号:17447022
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:14
- 大小:509.50KB
实验2 MySQL数据库对象管理.docx
《实验2 MySQL数据库对象管理.docx》由会员分享,可在线阅读,更多相关《实验2 MySQL数据库对象管理.docx(14页珍藏版)》请在冰点文库上搜索。
实验2MySQL数据库对象管理
实验2MySQL数据库对象管理
1.实验目的
理解数据字典、表、索引、视图的作用,掌握数据字典的操纵方式,掌握库、表、索引、视图的操作方法。
2.实验内容结果截图
【实验2-1】查看INFORMATION_SCHEMA.SCHEMATA表中的信息。
【实验2-2】查看INFORMATION_SCHEMA.TABLES表中的信息。
【实验2-3】查看INFORMATION_SCHEMA.COLUMNS表中的信息。
【实验2-4】查看INFORMATION_SCHEMA.STATISTICS表中的信息。
【实验2-5】查看INFORMATION_SCHEMA.CHARACTER_SETS表中的信息。
【实验2-6】查看INFORMATION_SCHEMA.COLLATIONS表中的信息。
【实验2-7】使用CREATEDABASE语句创建school数据库。
【实验2-8】将school数据库的字符集设为utf-8。
【实验2-9】在school数据库下创建stu_info表,包括stunovarchar(10)、stunamevarchar(8)、stubirdate、stuageint;创建表course,包括cournovarchar(3)、cournamevarchar(10)、schyeardate、creditint;创建stuandcour表,包括stunovarchar(10)、cournovarchar(3)、gradeint。
【实验2-10】使用SHOW、DESCRIBE语句查看所建的表。
【实验2-11】使用ALTERTABLE语句将stuinfo表的表名改为stuinfo,并且增加stugendervarchar(4)字段,将course表中courno字段的类型改为varchar(5)。
【实验2-12】将前边建的表复制到test数据库中,如果没有test数据库就新建一个。
【实验2-13】删除test数据库中的course表。
【实验2-14】创建stuinfo表上stuno的索引。
【实验2-15】创建stuandcour表上stuno字段和courno字段上的多列索引。
【实验2-16】删除创建的索引。
【实验2-17】创建stuinfo表上的单源视图。
【实验2-18】创建stuinfo表和stuandcour上的多源视图,包含stuno、stuname、courno、grade。
【实验2-19】分别通过访问information_schema的views表和tables表,查看已经创建好的视图;使用DESCRIBE语句查看已经创建好的视图。
【实验2-20】使用SELECT语句查询创建好的视图。
3.实验要求
(1)所有操作均在命令行或者MySQLWorkbench中完成。
(2)将操作过程以屏幕抓图的方式复制,形成实验文档,并对照本章内容写出分析报告。
实验分析报告
建数据库,实际上就是在数据库服务器中划分一块空间,用来存储相应的数据库对象。
在MySQL中创建数据库通过SQL语句CREATEDATABASE来实现,其语法形式如下:
CREATE{DATABASE|SCHEMA}[IFNOTEXISTS]database_name
[create_spectification[,create_specification]…];
其中,create_spectification的格式为
[DEFAULT]CHARACTERSETcharset_name
|[DEFAULT]COLLATEcollation_name
上述语句中IFNOTEXISTS表示在创建数据库前进行判断,只有该数据库目前尚不存在,才执行CREATEDATABASE操作。
MySQL中的SCHEMA是数据库DATABASE的同义词,此处指定任意一个关键字均可,功能是相同的。
MySQL不允许两个数据库使用相同的名字,用此选项可以避免出现数据库已经存在而再新建的错误。
database_name参数表示所要创建的数据库名字。
在操作系统中,MySQL数据存储区以目录方式表示MySQL数据库,因此,命令中的数据库名字必须符合操作系统文件夹的命名规则。
需要注意的是,在MySQL中是不区分大小写的。
推荐数据库命名(标识符)规则如下。
(1)由字母、数字、下划线、@、#和$符号组成,其中字母可以是英文字符a~z或A~Z,也可以是其他语言的字母字符。
(2)首字母不能是数字和$符号。
(3)标识符不允许是MYSQL的保留字。
(4)不允许有空格和特殊字符。
(5)长度小于128位。
DEFAULT参数为指定默认值。
CHARACTERSET参数为指定字符集,charset_name为字符集的名称。
COLLATE参数指定字符集的校对规则,collation_name为校对规则的名称。
每个数据库管理员或者程序员都不可避免地会遇到字符编码的问题,如果字符编码不匹配,就有可能出现“乱码问题”。
你知道什么是字符编码吗?
字符集是多个字符的集合,每个字符集都包含了特定的字符,计算机要准确地处理各种字符集文字,还需要进行字符编码,以便计算机能够识别和存储各种文字。
各个国家和地区在指定编码标准时,“字符的集合”和“编码”一般都是同时制定的。
常见的字符集有ASCII字符集、ISO8859字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。
规定每个“字符”分别用1字节还是多字节存放,用哪些字节来存储,这个规定就叫作“编码”。
字符编码就是以二进制的数字来对应字符集的字符。
常见的字符编码有ASCII编码、ANSI编码、Unicode编码。
Unicode字符集有多种编码方式,如UTF-8、UTF-16等,而大多数字符集编码方式只有一种,如ASCII、GB2312等。
MySQL数据库中提到字符集,有一个关键词是绝对不可以被忽略的,那就是校对规则(Collation),官方文档中对此做出的解释如下:
校对规则就是指定义的一种比较字符集中字符的规则,有些资料中将其称为排序规则。
例
将下列字符保存到对象的某列中,有“A、B、a、b”4个字符,然后再为上述的每个字符都定义了一个数值:
A以0表示,B以1表示,a以2表示,b以3表示。
就这个例子来说,A作为一个符号,与其对应的0就是A编码后的形式,上述这4个字符以及其编码形式的组合,就是前面所说的字符集。
那什么是校对规则呢?
仍通过上面的例子来说明,如果希望比较多个字符的值,最简单的方式就是按照定义好的规则直接对比编码,按照前面定义的规则,由于0比1小,因此我们说A比B小,应用比较的这个规则就是校对规则,说得简单点,校对规则的核心就是比较字符的编码的方式。
前例中只应用了一项比较的规则,这类最简单的比较称为二元校对规则(Binary)。
还有些比较复杂的校对规则,比如说大小写等同的规则,在比较时,就需要首先将a、b视为等同于A、B,而后再比较编码(相当于应用了两项规则),这种规则称为大小写不敏感(Case-Insensitive)的校对规则,与之相对应,当然也会有大小写敏感的校对规则,这类规则相对来说要比二元校对规则复杂。
上面所提到的这两种规则,只是字符集的校对规则最常见的形式。
在MySQL中可以使用SHOWCHARACTERSET语句查看当前数据库所支持的字符集,执行上述SQL语句,其结果如图3-2所示。
图3-2查看数据库字符集
一个字符集至少会拥有一个校对规则,显示字符集的校对规则可以使用SHOWCOLLATION语句。
例
查看latin1字符集所拥有的校对规则,具体SQL语句为SHOWCOLLATIONLIKE‘latin1%’,其结果如图3-3所示。
图3-3查看字符集latin1的校对规则
图3-3中Default列显示了校对规则是否为该字符集的默认规则。
MySQL数据库中字符集的校对规则的特点如下。
(1)每种校对规则只能属于一种字符集,也就是说,不同字符集不可能拥有同一个校对规则。
(2)每种字符集都拥有一个默认的校对规则(DefaultCollation),SHOWCHARACTERSET语句显示的结果中也指明了字符集的默认校对规则。
(3)校对规则的名称也有规则,通常开头的字符是校对规则所属的字符集,而后是其所属语言,最后则是校对规则类型的简写形式,有下列3种格式。
①_ci:
全称为caseinsensitive,表示这是大小写不敏感的校对规则。
②_cs:
全称为casesensitive,表示这是大小写敏感的校对规则。
③_bin:
即binary,表示这是一个二元校对规则,也一定是大小写敏感的校对规则。
执行CREATEDATABASE语句,在数据库管理系统中创建名为database_test的数据库,字符集和校对规则都采用默认方式,其结果如图3-4所示。
图3-4创建数据库
从图3-4中可以发现,执行完SQL语句之后,下面有一行提示“QueryOK,1rowaffected(0.00sec)”,这段提示可以分为3部分,含义如下。
①“QueryOK”:
表示SQL语句执行成功。
②“1rowaffected”:
表示该操作只影响了数据库中的一行记录。
③“0.00sec”:
表示操作执行的时间。
需要注意的是,创建数据库的SQL语句不属于查询操作,那么为什么显示结果是“QueryOK”呢?
这是MySQL软件的一个特点,即所有SQL语句中的DDL和DML(不包含SELECT)语句执行成功后都会显示“QueryOK”。
对于一个MySQL服务器,它自身不限制所拥有的数据库的个数,每个数据库实际上就仅仅是一个操作系统层的目录,位于MySQL数据库的data目录下(MySQL数据库的data目录指的是MySQL系统变量datadir所指的路径)。
比如我们刚刚创建的database_test库,就可以在数据文件目录下找到它对应的目录,如图3-5所示。
图3-5database_test库文件目录
当前没有在database_test库中创建任何对象,因此database_test库在物理层看起来就是一个目录(内含db.opt文件),如图3-6所示。
图3-6database_test库文件
如果手动在MySQL数据库的Data路径下创建一个目录,MySQL会怎么理解它呢?
我们可以通过实际操作来验证一下。
先在MySQL数据库的Data路径下创建一个目录,如图3-7所示,然后在MySQL命令行中查看,结果如图3-8所示。
图3-7新建一个文件目录
图3-8查看数据库
结果显示,操作实时生效,MySQL居然也将其视为一个数据库。
MySQL中的数据库就是个操作系统层的目录,不管是通过MySQL中的CREATEDATABASE命令创建,还是在操作系统层手动创建,其效果都是相同的,这也是MySQL数据库非常灵活的一个体现。
再往深层次想一想,既然可以在操作系统层以创建目录的方式建库,自然也就可以在操作系统层以删除目录的方式删除库。
不过通过SQL语句创建库和在操作系统中手动创建库还是有一点不同,使用CREATEDATABASE命令创建的数据库不仅创建了一个同名目录,该目录下还包含一个名为db.opt的文件,内容如图3-9所示。
图3-9db.opt文件内容
该文件中仅有两行内容,分别指定该数据库的默认字符集和校对规则。
如果在前面创建database_test库时没有指定字符集的参数,那么,在默认情况下,它会继承character_set_database系统变量和collation_database系统变量所设定的值,并保存到db.opt文件中。
对于test库,我们只是手动创建了目录,该目录下没有db.opt文件,其实MySQL仍是保持相同的处理逻辑,如果没有指定字符集的参数,那么就会默认继承charatcer_set_database系统变量和collation_database系统变量所设定的值。
当然,我们也可以手动创建或复制一份db.opt文件至test目录下,甚至可以直接修改该文件中的内容来指定字符集。
例如,我们手动为test库指定字符集为gbk,创建文件内容如图3-10所示。
图3-10创建db.opt文件
查看某个数据库设置的字符集的方法很多,这里介绍两种比较常用的方法,第一种是通过SHOWCREATEDATABASE命令,可以生成创建时的脚本,执行结果如图3-11所示。
另一种方式是通过查询MySQL中的字典表,位于information_schema库中的schemata对象。
图3-11通过生成创建时的脚本查看数据库字符集
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验2 MySQL数据库对象管理 实验 MySQL 数据库 对象 管理