实验2 MySQL数据库对象管理
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】使用CREATE DABASE语句创建school数据库。
【实验2-8】将school数据库的字符集设为utf-8。
【实验2-9】在school数据库下创建stu_info表,包括stuno varchar(10)、stuname varchar(8)、stubir date、stuage int;创建表course,包括courno varchar(3)、courname varchar(10)、schyear date、credit int;创建stuandcour表,包括stuno varchar(10)、courno varchar(3)、grade int。
【实验2-10】使用SHOW、DESCRIBE语句查看所建的表。
【实验2-11】使用ALTER TABLE语句将stuinfo表的表名改为stuinfo,并且增加stugender varchar(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)所有操作均在命令行或者MySQL Workbench中完成。
(2)将操作过程以屏幕抓图的方式复制,形成实验文档,并对照本章内容写出分析报告。
实验分析报告
mysql操作官方文档
建数据库,实际上就是在数据库服务器中划分一块空间,用来存储相应的数据库对象。在MySQL中创建数据库通过SQL语句CREATE DATABASE来实现,其语法形式如下:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS]database_name
[create_spectification [, create_specification]…];
其中,create_spectification的格式为
[DEFAULT] CHARACTER SET charset_name
| [DEFAULT] COLLATE collation_name
上述语句中IF NOT EXISTS表示在创建数据库前进行判断,只有该数据库目前尚不存在,才执行CREATE DATABASE操作。MySQL中的SCHEMA是数据库DATABASE的同义词,此处指定任意一个关键字均可,功能是相同的。MySQL不允许两个数据库使用相同的名字,用此选项可以避免出现数据库已经存在而再新建的错误。database_name参数表示所要创建的数据库名字。在操作系统中,MySQL数据存储区以目录方式表示MySQL数据库,
因此,命令中的数据库名字必须符合操作系统文件夹的命名规则。需要注意的是,在MySQL中是不区分大小写的。
推荐数据库命名(标识符)规则如下。
(1)由字母、数字、下划线、@、#和$符号组成,其中字母可以是英文字符a~z或A~Z,也可以是其他语言的字母字符。
(2)首字母不能是数字和$符号。
(3)标识符不允许是MYSQL的保留字。
(4)不允许有空格和特殊字符。
(5)长度小于128位。
DEFAULT参数为指定默认值。CHARACTER SET参数为指定字符集,charset_name为字符集的名称。COLLATE参数指定字符集的校对规则,collation_name为校对规则的名称。每个数据库管理员或者程序员都不可避免地会遇到字符编码的问题,如果字符编码不
匹配,就有可能出现“乱码问题”。你知道什么是字符编码吗?
字符集是多个字符的集合,每个字符集都包含了特定的字符,计算机要准确地处理各种字符集文字,还需要进行字符编码,以便计算机能够识别和存储各种文字。各个国家和地区在指定编码标准时,“字符的集合”和“编码”一般都是同时制定的。常见的字符集有ASCII字符集、ISO 8859字符集、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中可以使用SHOW CHARACTER SET语句查看当前数据库所支持的字符集,执行上述SQL语句,其结果如图3-2所示。
图3-2 查看数据库字符集
一个字符集至少会拥有一个校对规则,显示字符集的校对规则可以使用SHOW COLLATION语句。
查看latin1字符集所拥有的校对规则,具体SQL语句为SHOW COLLATION LIKE ‘latin1%’,其结果如图3-3所示。
图3-3 查看字符集latin1的校对规则
图3-3中Default列显示了校对规则是否为该字符集的默认规则。
MySQL数据库中字符集的校对规则的特点如下。
(1)每种校对规则只能属于一种字符集,也就是说,不同字符集不可能拥有同一个校对规则。
(2)每种字符集都拥有一个默认的校对规则(Default Collation),SHOW CHARACTER SET语句显示的结果中也指明了字符集的默认校对规则。
(3)校对规则的名称也有规则,通常开头的字符是校对规则所属的字符集,而后是其所属语言,最后则是校对规则类型的简写形式,有下列3种格式。
①_ci:全称为case insensitive,表示这是大小写不敏感的校对规则。
②_cs:全称为case sensitive,表示这是大小写敏感的校对规则。
③_bin:即binary,表示这是一个二元校对规则,也一定是大小写敏感的校对规则。
执行CREATE DATABASE语句,在数据库管理系统中创建名为database_test的数据库,字符集和校对规则都采用默认方式,其结果如图3-4所示。
图3-4 创建数据库
从图3-4中可以发现,执行完SQL语句之后,下面有一行提示“Query OK,1 row affected(0.00 sec)”,这段提示可以分为3部分,含义如下。
①“Query OK”:表示SQL语句执行成功。
②“1 row affected”:表示该操作只影响了数据库中的一行记录。
③“0.00 sec”:表示操作执行的时间。
需要注意的是,创建数据库的SQL语句不属于查询操作,那么为什么显示结果是“Query OK”呢?这是MySQL软件的一个特点,即所有SQL语句中的DDL和DML(不包含SELECT)语句执行成功后都会显示“Query OK”。
对于一个MySQL服务器,它自身不限制所拥有的数据库的个数,每个数据库实际上就仅仅是一个操作系统层的目录,位于MySQL数据库的data目录下(MySQL数据库的data目录指的是MySQL系统变量datadir所指的路径)。比如我们刚刚创建的database_test库,就可以在数据文件目录下到它对应的目录,如图3-5所示。
图3-5 database_test库文件目录
当前没有在database_test库中创建任何对象,因此database_test库在物理层看起来就是一个目录(内含db.opt文件),如图3-6所示。