第02章数据定义.ppt
第二章第二章第二章第二章 数据定义数据定义数据定义数据定义本章要点本章要点v本章要点1了解数据库、数据表、索引和SQL语言的基本概念2掌握数据库和表定义的SQL语言3熟悉索引创建和删除的SQL语言4掌握Workbench中数据库、数据表和索引的创建引言引言vMySQL数据库中,数据库对象的操作有两种方式:交互式和命令式。其中交互式方式是使用Workbench进行操作,比如数据库操作、表的操作、数据的操作和用户管理等等都是如此,因为交互式操作一般不要基础知识,只需要学习Workbench工具的使用即可,因此在任务实施过程中进行讲解。命令式方式需要学生掌握SQL语法知识,虽然使用Workbench可以简化知识,但是有些时候SQL语法是不可替代的,比如信息系统开发编写程序时,必须编写SQL语句,而不能使用Workbench,因此SQL语言以及Workbench工具都是学习过程中必须掌握的内容。任务一任务一 数据库的操作数据库的操作v基础知识v(一)SQL语言v1简介SQL,即StructuredQueryLanguage(即结构化查询语言),是关系数据库的标准语言,SQL是一个通用的、功能极强的关系数据库语言。大多数数据库均用SQL作为共同的数据存取语言和标准接口,使不同数据库系统之间的互操作有了共同的基础。SQL可以对数据库进行任何的操作,比如:创建数据库、数据表和用户,添加和删除数据,编写数据库程序等。当前,几乎所有的关系数据库管理系统软件都支持SQL,许多软件厂商对SQL基本命令集还进行了不同程度的扩充和修改。v2特点MySQL数据库数据库vSQL之所以能够为用户和业界接受,并成为国际标准,是因为它是一个综合的、功能极强又简洁易学的语言。SQL集数据查询、数据操纵、数据定义和数据控制功能于一体,主要特点包括:v(1)综合统一vSQL集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动。v(2)高度非过程化v非关系数据模型的数据操纵语言是“面向过程”的语言,只要提出“做什么”,而无须指明“怎么做”。SQL的操作过程由系统自动完成。这不但大大减轻了用户负担,而且有利于提高数据独立性。v(3)面向集合的操作方式MySQL数据库数据库非关系数据模型采用的是面向记录的操作方式,操作对象是一条记录。SQL采用集合操作方式,不仅操作对象、查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。v(4)以同一种语法结构提供多种使用方式SQL既是独立的语言,又是嵌入式语言。作为独立的语言,可以独立地用于联机交互的使用方式;作为嵌入式语言,SQL语句能够嵌入到高级语言,供程序员设计程序时使用。两种不同方式下的SQL语法结构一致,提供了极大的灵活性与方便性。v(5)语言简洁,易学易用SQL功能极强,但由于设计巧妙,语言十分简洁,完成核心功能只用了9个动词。v(二)SQL语法概述MySQL数据库数据库SQL输入由一系列命令组成,用一个分号;结尾。注意:SQL语句结尾的分号为英文分号,中文分号则出错。在SQL输入里可以有注释。v1标识符和关键字标识符和关键字是指SQL语言里有固定含义的单词,根据使用它们的命令的不同,它们标识表、字段或者其它数据库对象的名字。SQL标识符和关键字必须是以一个字母或下划线开头,并且只能包含字母、数字或者下划线的字符串。注意:标识符和关键字都是与大小写无关的,但是关键字用大写,而标识符名字等用小写是一种好习惯。数据库、表、索引、列和别名是标识符,每类标识符的最大长度和允许的字符如表2-1所示。MySQL数据库数据库v2注释注释有两种方式:双划线开头的单行注释;C风格的多行注释。-单行注释/*多行注释*/注释在进一步的语法分析之前被从输入流删除并有效地用空白代替。v(三)数据定义语言MySQL数据库数据库数据库系统的基本对象有数据库、表、视图和索引等。SQL的数据定义功能包括定义数据库、定义表、定义视图和定义索引,如图表2-2所示。数据库对象数据库、视图、索引在标准SQL中,一般不提供修改操作,而是采用先将它们删除,然后再创建的方式实现修改的方法。MySQL数据库提供了数据库、视图和索引的直接修改。v四数据库操作v1创建数据库创建数据库语法如下:MySQL数据库数据库mysqlCREATEDATABASEchap02;注意:在Unix下,数据库名称是区分大小写的,这点不像SQL关键字,因此你必须总是以chap02访问数据库,而不能用Chap02、CHAP02或其它一些名称。对表名也是这样的。在Windows下,则不存在该限制,查询中,可以使用不同的大小写来引用数据库和表,但是,作为好的习惯,推荐使用与数据库和数据表创建时相同的大小写引用相关对象。创建数据库并不表示选定并使用它,你必须明确地操作。为了使chap02成为当前的数据库,使用这个命令:mysqlUSEchap02;Databasechanged数据库只需要创建一次,但是必须在每次启动MySQL会话时在使用前先选择它。你可以根据上面的例子执行一个USE语句来实现。MySQL数据库数据库v2修改数据库v(1)修改表名ALTERDATABASE数据库名DEFAULTCHARACTERSET编码方式DEFAULTCOLLATE编码方式_bin;ALTERDATABASE用于更改数据库的全局特性。CHARACTERSET子句用于更改默认的数据库字符集。COLLATE子句用于更改默认的数据库排序。v3删除数据库DROPDATABASEIFEXISTS数据库名DROPDATABASE用于取消数据库中的所用表格和取消数据库。注意:MySQL数据库数据库(1)使用此语句时要非常小心(2)IFEXISTS用于防止当数据库不存在时发生错误。(3)也可以使用DROPSCHEMA。MySQL数据库数据库v基础知识v(一)字段(列)类型MySQL支持多种列类型:数值类型、日期/时间类型和字符串(字符)类型。v1数值类型MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型、近似数值数据类型。MySQL整数类型包括:tinyint、mediumint、int和bigint,每个整数类型的存储大小和范围如表2-3所示。MySQL数据库数据库任务二任务二 表的操作表的操作MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度,例如int(4)。对于浮点列类型,在MySQL中单精度值使用4个字节,双精度值使用8个字节。MySQL允许使用非标准语法:float(M,D)或real(M,D)或dobule(M,D)。这里,“(M,D)”表示该值一共显示M位整数,D表示小数位数。decimal和numeric类型在MySQL中视为相同的类型。MySQL数据库数据库v2日期和时间类型表示日期和时间的类型主要有:datetime、date、timestamp、time和year。MySQL解释两位年值使用以下规则:70-99范围的年值转换为1970-1999。00-69范围的年值转换为2000-2069。datetime、date和timestamp类型是相关的。datetime类型同时包含日期和时间信息,以YYYY-MM-DDHH:MM:SS格式检索和显示值,支持的范围为1000-01-0100:00:00到9999-12-3123:59:59。date类型只需要日期值而不需要时间部分,以YYYY-MM-DD格式检索和显示值,支持的范围是1000-01-01到9999-12-31。MySQL数据库数据库timestamp列类型的属性不固定,取决于MySQL版本和服务器运行的SQL模式。time类型以HH:MM:SS格式检索和显示值,值范围可以从-838:59:59到838:59:59。year类型是一个单字节类型用于表示年,以YYYY格式检索和显示year值,范围是1901到2155。注意:(1)如果试图插入一个不合法的日期,MySQL将给出警告或错误。(2)当MySQL遇到一个日期或时间类型的超出范围或对于该类型不合法的值时,将该值转换为该类的“零”值。v3String类型字符串类型指char、varchar、binary、varbinary、blob、text等。MySQL数据库数据库v(1)char和varchar类型char和varchar类型类似。char和varchar类型声明的长度表示你想要保存的最大字符数。例如,char(30)可以占用30个字符。char为定长字符串,长度可以为从0到255的任何值。当保存char值时,在它们的右边填充空格以达到指定的长度。varchar为变长字符串,长度可以指定为0到65,535之间的值,varchar的最大有效长度由保存的字符串的值和使用的字符集确定,整体最大长度是65,532字节,varchar值保存时尾部不进行填充。v(2)binary和varbinary类型binary和varbinary类似于char和varchar,不同的是它们包含二进制字符串而不要非二进制字符串。MySQL数据库数据库binary和varbinary允许的最大长度一样,如同char和varchar,不同的是binary和varbinary的长度是字节长度而不是字符长度。(3)blob和text类型blob是一个二进制大对象,可以容纳可变数量的数据。有4种blob类型:tinyblob、blob、mediumblob和longblob。它们只是可容纳值的最大长度不同。有4种text类型:tinytext、text、mediumtext和longtext。这些对应4种blob类型,有相同的最大长度和存储需求。MySQL数据库数据库v(4选择正确的列类型为了优化存储,在任何情况下均应使用最精确的类型。例如,如果列的值的范围为从1到99999,若使用整数,则mediumintunsigned是最好的类型。在所有可以表示该列值的类型中,该类型使用的存储最少。使用双精度操作对decimal值进行计算。如果准确度不是太重要或速度为最高优先级,double类型即足够了。为了达到高精度,可以转换到保存在bigint中的定点类型。这样可以用64位整数进行所有计算,根据需要将结果转换回浮点值。v(二)创建表创建数据表语法基本格式如下:createtableifnotexists表名(列名数据类型列级完整性约束,MySQL数据库数据库(列名数据类型列级完整性约束,表级完整性约束);注意:(1)必须拥有表create权限,才能执行create语句。(2)默认情况下,表被创建到当前的数据库中。如果表已存在,或者如果没有当前数据库,或者如果数据库不存在,则会出现错误。表名称被指定为“数据库名.表名”,以便在特定的数据库中创建表。不论是否有当前数据库,都可以通过这种方式创建表。(3)如果表已存在,则使用关键词ifnotexists可以防止发生错误。v(三)修改表altertable用于更改原有表的结构。例如,您可以增加或删减列,创建或取消索引,更改原有列的类型,或重新命名列或表。您还可以更改表的评注和表的类型。MySQL数据库数据库altertableb表名add新列名数据类型完整性约束drop完整性约束altercolumn列名数据类型允许进行的变更中,许多子句的语法与createtable中的子句的语法相近。可以在一个altertable语句里写入多个add、alter、drop和change子句,中间用逗号分开。示例2-1:添加一个新的timestamp列,名称为d:altertablet2adddtimestamp;示例2-2:在列d和列a中添加索引:altertablet2addindex(d),addindex(a);MySQL数据库数据库(示例2-3:删除列c:altertablet2dropcolumnc;示例2-4:添加一个新的auto_increment整数列,名称为c:altertablet2addcintunsignednotnullauto_increment,addprimarykey(c);renametabletbl_nametonew_tbl_name,tbl_name2tonew_tbl_name2.v(四)删除表droptableifexists表名,表名;droptable用于删除一个或多个表。您必须有每个表的drop权限。所有的表数据和表定义会被删除。对于不存在的表,使用ifexists用于防止错误发生。MySQL数据库数据库任务三任务三 索引操作索引操作v基础知识索引是数据库中用来提高查询性能的最常用工具。在MySQL数据库中,所有字段类型都可以建立索引,对相关字段使用索引是提高select操作性能的常用方法。v(一)索引类型MySQL索引类型包括:1普通索引这是最基本的索引,它没有任何限制,由key或index定义。2唯一索引唯一索引的索引列的值必须唯一,但允许有空值,由unique定义。3主键索引它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引,在第五章完整性中讲解。MySQL数据库数据库v4组合索引组合索引也称作符合索引,是指在多列上创建的索引,不同于独立的多个单列索引。MySQL数据库从左到右使用组合索引中的字段列,一个查询可以只使用组合索引的一部分,但是只能是左侧部分,比如组合索引index(a,b,c),可以支持(a)、(a,b)和(a,b,c)进行查询,但是不支持(a,c)或(b,c)进行查询。v(二)索引语法索引可以在创建表时创建索引,也可以在创建表后通过修改表的方式创建索引,还可以直接创建索引。v1创建表时创建索引语法如下:createtable表名(MySQL数据库数据库字段名数据类型,字段名数据类型,字段名数据类型,index|key|unique(列名)asc|desc);v2修改表时创建索引语法如下:altertable表名addindex|key|unique索引名(列名)asc|desc;v3直接创建索引createuniqueindex索引名MySQL数据库数据库on表名(字段名)asc|desc;v4删除索引(1)直接删除索引删除索引语法:dropindex索引名on表名v(2)修改表时删除索引altertable表名dropindex索引名;v(三)建立索引的时机到这里我们已经学会了建立索引,那么我们需要在什么情况下建立索引呢?一般来说,在where和join中出现的列需要建立索引,但也MySQL数据库数据库不完全如此,因为MySQL只对,=,between,in,以及某些时候的like才会使用索引。v(四)索引的不足之处索引在提高查询效率上作用很大,但过多使用索引也会带来问题。1虽然索引大大提高了查询速度,同时却会降低更新表的速度,因为更新表时,MySQL不仅要保存数据,还要保存索引文件。2建立索引会占用磁盘空间的索引文件。如果你在一个大表上创建了多种组合索引,索引文件会膨胀的很快。索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。MySQL数据库数据库实验二实验二 数据定义实验数据定义实验v实验目的熟悉MySQL的SQL命令窗口和Workbench的使用。掌握SQL的数据定义语言的使用;理解数据库对象的概念。v实验条件计算机(电脑)Windows7操作系统MySQL5.6数据库v实验内容1在MySQL命令窗口中创建chap2数据库。2在MySQL命令窗口中创建student表,该表的结构描述如下。MySQL数据库数据库3在Workbench环境下,使用SQL语言定义course表,该表的结构描述如下:MySQL数据库数据库4在Workbench环境下,使用交互式方式定义sc表,该表的结构描述如下:5使用altertable语句修改student表为其增加一个birthday列,类型为date。6使用createindex语句在student表的sage列上建立一个名为age_index的索引,要求索引为升序。MySQL数据库数据库谢谢追求追求