实训教材系列数据库的设计与开发.ppt

上传人:牧羊曲112 文档编号:6269879 上传时间:2023-10-12 格式:PPT 页数:238 大小:752KB
返回 下载 相关 举报
实训教材系列数据库的设计与开发.ppt_第1页
第1页 / 共238页
实训教材系列数据库的设计与开发.ppt_第2页
第2页 / 共238页
实训教材系列数据库的设计与开发.ppt_第3页
第3页 / 共238页
实训教材系列数据库的设计与开发.ppt_第4页
第4页 / 共238页
实训教材系列数据库的设计与开发.ppt_第5页
第5页 / 共238页
点击查看更多>>
资源描述

《实训教材系列数据库的设计与开发.ppt》由会员分享,可在线阅读,更多相关《实训教材系列数据库的设计与开发.ppt(238页珍藏版)》请在三一办公上搜索。

1、Oracle Java EE实训教材系列数据库的设计与开发,第一章 MySQL介绍,目 标,解释MySQL产品的起源和状态列出现有的MySQL产品及专业服务安装MySQL及“world”数据库描述MySQL客户端-服务器模型,3,MySQL概述,MySQL最初是由“MySQL AB”公司开发的一套关系型数据库管理系统(RDBMS)。MySQL不仅是最流行的开源数据库,而且是业界增长最快的数据库,每天有超过7万次的下载量,其应用范围从大型企业到专有的嵌入应用系统。MySQL AB是由两个瑞典人和一个芬兰人:David Axmark、Allan Larsson和Michael“Monty”Wide

2、nius在瑞典创办的。在2008年初,Sun Microsystems收购了MySQL AB公司。在2009年,Oracle收购了Sun公司,使MySQL并入Oracle的数据库产品线。,4,MySQL数据库产品,MySQL数据库是公认的简单易用、高性能及高可靠性的产品。MySQL企业服务器MySQL社区服务器MySQL嵌入数据库MySQL集群,5,MySQL图形用户界面(GUI)工具,MySQL GUI工具为MySQL数据库提供了一组丰富的图形用户界面。MySQL移植工具包MySQL AdministratorMySQL Query Browser,6,MySQL驱动程序,MySQL数据库驱

3、动程序(也称作连接器),为多种编程语言提供数据库客户端的连接。MySQL包括以下连接器:MySQL C APIMySQL连接器/ODBCMySQL连接器/JMySQL连接器/NetMySQL连接器/PHP,7,嵌入式MySQL解决方案,MySQL还提供了库文件,用来将MySQL数据库服务器嵌入到程序中。libmysqldMySQL MXJ,8,安装MySQL,推荐到MySQL网站的下载网页:下载MySQL数据库服务器。这里有多种支持的平台,并且每个版本都有不同的安装说明。在Windows中安装MySQL服务器,9,安装“world”数据库,MySQL提供了三个数据库示例,以用于测试数据库特征及

4、培训。下载地址为:。需要使用MySQL命令行客户端来装载world数据库。1.创建“world”数据库mysql CREATE DATABASE world;2.选择“world”数据库mysql USE world;3.构建“world”数据库的表mysql SOURCE C:/world.sql,10,MySQL客户端-服务器模型,在网络环境中,MySQL采用客户端/服务器架构进行工作。MySQL的安装包括以下主要部件:MySQL服务器客户端程序MySQL非客户端工具,11,MySQL客户端-服务器模型,12,第二章 MySQL客户端,目 标,在MySQL客户/服务器体系结构中调用客户端程

5、序使用mysql客户端程序,14,调用客户端程序,MySQL客户端程序可以从命令行调用。当客户端程序被调用时,可以通过在程序名后指定选项来控制它的行为。选项也可以在选项文件中定义。shell mysql helpshell mysql-version,15,通用命令选项语法,MySQL程序选项具有以下两种通用形式:长选项,由单词之前加两个减号组成短选项,由单个字母之前加一个减号组成shell mysql-versionshell mysql-V一些选项是要赋值的。例如:,16,建立连接的选项,17,MySQL用户身份选项,-user=“用户名”或 u“用户名”-password=“密码值”或

6、p“密码值”,18,如何指定连接参数,用缺省主机名和用户名(没有密码)连接服务器:shell mysql使用用户名“myname”连接本地主机服务器,让mysql提示用户输入密码:shell mysql-host=localhost-password-user=myname与上例使用相同的选项,但使用相应的短选项形式:shell mysql-h localhost-p-u myname,19,交互式使用mysql,mysql客户端程序可以交互式地使用,或以批处理模式从文件中读取查询。交互式模式对日常使用是非常有用的,例如快速的SQL语句处理,以及测试SQL语句是如何工作的。对运行保存在文本文件

7、中的SQL语句(也称为SQL脚本),批处理是很有用的。例如:mysql SELECT VERSION();或shell mysql-u user_name-ppassword-e SELECT VERSION(),20,语句结束符,有多个结束符可用于终结语句:mysql SELECT VERSION(),DATABASE();mysql SELECT VERSION(),DATABASE()g 可以用mysql命令DELIMITER来改变结束符:mysql DELIMITER go mysql SELECT COUNT(*)-FROM world.City-go G序列也被用作语句结束符,但它

8、还有其它影响,即导致mysql以垂直方式显示结果:mysql SELECT VERSION(),DATABASE()G,21,语句结束符,mysql允许使用多个输入行来键入一个查询:mysql SELECT Name,Population FROM City-WHERE CountryCode=IND-AND Population 3000000;如果一条语句导致错误,mysql将显示服务器返回的错误信息:mysql This is an invalid statement;如果想要终止一条正在编写的语句,可键入c。为了退出mysql,可使用q、QUIT或EXIT:mysql q,22,mys

9、ql提示符,23,mysql提示符,为了重新定义“mysql”提示符,可使用prompt命令;mysql prompt win 1win 1在提示符中放入当前信息,诸如用户、主机和数据库;mysqlprompt(uh)dPROMPT set to(uh)d(rootlocalhost)world为了将提示符转换为缺省形式,应输入不带参数的prompt命令或R。(rootlocalhost)worldpromptReturning to default PROMPT of mysqlmysql,24,在mysql中使用编辑键,mysql客户端支持输入行的编辑,这使得它可以回调以前的输入行并可以进

10、行编辑。在Unix/Linux上,它还支持“tab”完成键,从而可以更容易地输入查询。四个方向键在Unix下,mysql客户端拥有全部的readline功能会话期间命令历史的保存,25,在mysql中使用脚本文件,一个包含SQL语句并将要被执行的输入文件叫做脚本文件或SQL批处理文件。处理脚本文件的方法之一是用SOURCE命令在mysql中执行它:mysql SOURCE input_file例如:mysql SOURCE C:/scripts/my_commands.sqlmysql SOURCE./scripts/my_commands.sql,26,客户端命令与SQL语句,当mysql在

11、运行中发布一条SQL语句时,程序将该语句发送到MySQL服务器来执行。SELECT、INSERT、UPDATE和DELETE都是这类输入的示例。mysql也会知道其中哪些是自己的命令而非SQL语句。例如:QUITSOURCESTATUSHELP,27,第三章 表数据查询,目 标,使用SELECT语法执行基本的、单个表的查询聚集查询结果使用UNION关键字连接多个SELECT语句的结果,29,SELECT语句,SELECT语句主要被用于查询数据库中的一个或多个表里的数据。SELECT语句表示数据库中一组特定的数据记录。SELECT语句的基本的语法模式如下:SELECT FROM 例如:mysql

12、 SELECT Name FROM Country;mysql SELECT 1+2;,30,基本的SELECT使用,许多子句及它们的结合都可以用于SELECT语句中:FROM:指定从哪些表中获取数据DISTINCT:消除重复的记录行WHERE:只返回满足特定条件(也叫过滤器)的记录行ORDER BY:按照表达式列表排序记录LIMIT:返回特定部分的数据,而不是所有的结果集示例:SELECT DISTINCT FROM WHERE ORDER BY LIMIT,31,使用FROM,FROM子句在SELECT语句中是可选项,它出现在语句的表达式之后,而表达式是在SELECT关键字后面出现。FRO

13、M子句指定语句要处理的表。非限定表名FROM 例如:FROM Country限定的表名FROM.例如:FROM world.Country表的别名在SQL语句里,在FROM子句里引用的表可以给定一个临时的名称,该名称叫做表的别名。,32,使用DISTINCT,如果查询的结果中包含重复的记录,该重复记录要被删除以生成每行都是唯一的结果集。为了达到这个目的,可在SELECT关键字后添加DISTINCT关键字。mysql SELECT Continent FROM Country;mysql SELECT DISTINCT Continent FROM Country;在指定的列里,DISTINCT

14、将所有的NULL值当作相同的值。mysql SELECT i,j FROM t;mysql SELECT DISTINCT i,j FROM t;,33,使用WHERE,WHERE子句将过滤满足特定条件的记录。例如:mysql SELECT ID,Name,District FROM city WHERE Name=New York;MySQL支持许多不同类型的运算符,这依赖于操作数的数据类型,或操作数与运算符处理的值的数据类型。运算比较 逻辑例如:mysql SELECT Name,Population-FROM Country-WHERE Population 50000000 AND-(

15、Continent=Europe OR Code=USA);mysql SELECT ID,Name,District-FROM city-WHERE Name IN(New York,Rochester,Syracuse);,34,关于NULL,如果有一个操作数的结果是NULL,则大多数运算符的求值结果也会是NULL。当NULL值表达式在函数中被用于操作数时,运算符将产生NULL。WHERE子句也有相同的情况,WHERE子句会丢弃那些条件不是TRUE的记录。,35,在SELECT语句里使用ORDER BY,如果有必要让输出记录按某一特定的顺序返回,可以使用ORDER BY子句以显示如何排序结

16、果集。mysql SELECT Name FROM Country ORDER BY Name;可以在ORDER BY表达式后使用ASC或DESC来明确指定记录按升序或降序排列。mysql SELECT Name-FROM Country-ORDER BY Name DESC;还可以用多个表达式同时排序,每个表达式有自己的排列顺序。mysql SELECT Name,Continent-FROM Country-ORDER BY Continent DESC,Name ASC;,36,在SELECT语句里使用LIMIT,当一个查询返回许多记录行时,有必要通过增加LIMIT子句来限定只显示部分记

17、录。LIMIT子句可以采用以下一个或两个参数:LIMIT row_countLIMIT skip_count,row_count例如:mysql SELECT Name FROM Country ORDER BY Name LIMIT 3;mysql SELECT Name FROM Country ORDER BY Name LIMIT 2,3;它常见的用处是获取包含某个特定列的最小或最大值的行,例如:mysql SELECT*FROM Country ORDER BY SurfaceArea LIMIT 1;mysql SELECT Name,Population-FROM Country

18、-ORDER BY Population DESC LIMIT 5;,37,聚集查询结果,有可能出现这种情况,结果集里的一行对应于底层基表里的一组记录行。这个过程叫聚合,并且这样一个结果集被称为聚集。计算一组值的摘要值的函数(例如AVG()被称为“聚集”函数。MIN()MAX()SUM()AVG()STD()COUNT()GROUP_CONCAT(),38,聚集查询结果示例,例如,使用COUNT(*)函数来统计world数据库中Country表中的行数。mysql SELECT COUNT(*)FROM Country;现在,指定统计Capital列而产生不同的结果,因为不是每个国家都有Cap

19、ital,NULL值将不会被统计:mysql SELECT COUNT(Capital)FROM Country;,39,用SELECT与GROUP BY分组,所有在GROUP BY子句中指定的表达式里,具有相同结合值的记录行将按一组处理,在结果集里以一行结束。聚集函数可以与GROUP BY一起使用将记录分组。当带有GROUP BY子句时,聚集函数将为每个组统计值。mysql SELECT Continent,AVG(Population)-FROM Country-GROUP BY Continent;,40,带GROUP_CONCAT()的分组,GROUP_CONCAT()函数将每组的结果

20、字符串连接起来。例如,将南美洲的国家按特定的政府形式创建国家的列表:mysql SELECT GovernmentForm,GROUP_CONCAT(Name)AS Countries-FROM Country-WHERE Continent=South America-GROUP BY GovernmentFormG,41,带WITH ROLLUP的分组,可在GROUP BY子句里使用WITH ROLLUP修饰符来产生多个级别的统计值。例如:mysql SELECT Continent,SUM(Population)as pop-FROM Country-GROUP BY Continent

21、-WITH ROLLUP;mysql SELECT Continent,AVG(Population)AS avg_pop-FROM Country-GROUP BY Continent WITH ROLLUP;,42,HAVING,HAVING子句被用于消除基于聚集值的记录行。例如:mysql SELECT Continent,SUM(Population)AS pop-FROM Country-GROUP BY Continent-HAVING SUM(Population)100000000;,43,使用UNION,UNION关键字能够将两个或多个SELECT语句的结果连接起来。其语句是

22、:SELECT UNIONSELECT 缺省地,UNION消除结果集中的重复记录。为了获得所有的记录行,可用UNION ALL取代每个UNION实例。UNION在下面情况下将很有用:多个表中有相似的信息,并且需要从这些表中立刻获取记录。需要从同一个表中获取几组记录,但是表现每组的条件并不容易写在一个单个的WHERE子句里。,44,使用UNION,例如:mysql CREATE TABLE list1(-subscriber CHAR(60),-email CHAR(60)-);mysql CREATE TABLE list2(-name CHAR(96),-address CHAR(128)-

23、);mysql CREATE TABLE list3(-email CHAR(50),-real_name CHAR(30)-);mysql SELECT subscriber,email FROM list1-UNION-SELECT name,address FROM list2-UNION-SELECT real_name,email FROM list3;,45,使用UNION,总体而言,ORDER BY与LIMIT可用于排序与限定一个UNION结果集。mysql(SELECT subscriber,email FROM list1)-UNION-(SELECT name,addres

24、s FROM list2)-UNION-(SELECT real_name,email FROM list3)-ORDER BY email LIMIT 10;在UNION中,可以将ORDER BY与LIMIT应用于单独的SELECT语句中。mysql(SELECT subscriber,email FROM list1 ORDER BY email LIMIT 5)-UNION-(SELECT name,address FROM list2 ORDER BY address LIMIT 5)-UNION-(SELECT real_name,email FROM list3 ORDER BY

25、email LIMIT 5);,46,第四章 数据类型,目 标,描述三个主要类别的数据类型理解字符集与校对规则分配合适的数据类型给表实体理解NULL与NOT NULL的含义与使用,48,数据类型概述,在MySQL中,可用的数据类型共分为四个主要类别:数值数字值(整数、浮点、定点数、位字段值)字符文本字符串二进制二进制数据字符串时间时间和日期ABC的数据类型A)Apt B)BriefC)Complete,49,使用数据类型创建表,创建表时,每个列的声明包括列名、识别该列保存信息的数据类型以及可能的其它属性(选项)以用来明确定义MySQL如何处理该列。例如:mysql CREATE TABLE p

26、eople(id INT,first_nameCHAR(30),last_name CHAR(30);,50,数值数据类型,为了保存数值数据,MySQL提供以下类型:整数类型:保存整数数字浮点类型:保存近似数值数据定点类型:保存精确数值位类型:保存位字段数值当选择一个数值数据类型时,应考虑以下因素:数据类型数值的范围列值所需要的存储空间数量列的精度和标度(适用于浮点和定点数),51,整数类型,以下列表是MySQL支持的整数数据类型:TINYINT SMALLINT MEDIUMINT INT或INTEGERBIGINT 例如:Population INT(11),52,浮点类型,浮点数据类型包

27、括FLOAT和DOUBLE。它们都被用来表示近似数值数据,包含整数部分、小数部分或二者都有。FLOATDOUBLE对于FLOAT和DOUBLE,如果列可以为NULL,则缺省值是NULL,如果列不能为NULL,其缺省值是0。,53,浮点类型,FLOAT数据类型可以用以下不同的表示法来指定:不指定精度:FLOAT使用二进制精度:FLOAT(M)指定总的数字位数与小数部分的数字位数:FLOAT(D,F)没有任何精度:DOUBLE指定数值的位数与小数部分位数:DOUBLE(D,F)例如:GNP FLOAT(10,2),54,定点类型,定点数据类型是DECIMAL,它被用来保存精确数值。它们包含整数部分

28、、小数部分或二者都有。DECIMAL数据类型用下列语法定义:DECIMAL(P,S)例如:cost DECIMAL(10,2)在MySQL中,NUMERIC数据类型与DECIMAL是相同的类型。,55,BIT类型,BIT数据类型表示位字段值。BIT列指定了每个值所需要的位数,从1到64位。例如:bit_col1 BIT(4)bit_col2 BIT(20)BIT列可以用数字表达式赋值。例如,b1111等于15,b1000000等于64。,56,字符串数据类型,以下列出了MySQL提供的字符串数据类型。所有这些类型都可用于保存非结构化格式的字符串:CHAR 固定长度字符串VARCHAR 可变长度

29、字符串TEXT 可变长度字符串MySQL还定义了两种结构化字符串类型:ENUM 由一组固定的有效值组成的枚举SET 由一组固定的有效值组成的集合,57,CHAR类型,定义一个列为CHAR数据类型的语法如下:CHAR(L)L代表CHAR值可以接受的最大的字符数。CHAR列的每个值都将占用L个字符,即使该值不需要整个可用的长度。,58,VARCHAR类型,这种数据类型被用来存储可变长度的字符串。其定义的语法是:VARCHAR(L)例如:Language VARCHAR(30)CountryLanguage表中的某个实例值只使用25个字符,尽管允许30个字符:Southern Slavic Lang

30、uages,59,文本类型,文本类型由一组非结构化的、可变长度的字符串组成,它最适合于存储访问频率低且相当大的字符串。TINYTEXTTEXTMEDIUMTEXTLONGTEXT,60,ENUM类型,ENUM类型是一个枚举数据类型。语法ENUM(value1,vaulN)示例Continent ENUM(Asia,Europe,North Americal,Africa,Oceania,Antarctica,South American),61,SET类型,SET类型可以从给定的列表中选择将多个值组合为一个有效的值。语法SET(value1,valueN)示例special_features

31、SET(Trailers,Commentaries,Deleted Scenes,Behind the Scenes),62,字符集与校对规则的支持,字符集是一套符号和编码,其中包含了编码规则以定义字符如何被编码为数字。在字符比较时,所有字符串都按校对规则进行比较。校对规则是一套比较序列的规则,它定义了字符的排序顺序,以及管理单个字符和字符串如何与其它值进行比较。可用下面的语句显示可用的字符集:mysql SHOW CHARACTER SET;一个给定的字符集可以有几个校对规则可用。这使得同一个字符集可以选择不同的排序顺序。mysql SHOW COLLATION LIKE latin1%;,

32、63,二进制类型,下面列举了二进制数据类型:BINARYVARBINARY除了这些类型,MySQL还支持很多BLOB类型。,64,什么是BLOB?,BLOB是一种可变长度的非结构化的二进制数据集合。通常地,BLOB是图像、语音或其它多媒体对象。BLOB术语是二进制大对象(Binary Large Object)的字首缩写。MySQL支持的BLOB类型有以下几种:TINYBLOBBLOBMEDIUMBLOB LONGBLOB,65,时间数据类型,MySQL提供了用来存储不同类型时间信息的数据类型。TIME类型 用于存储时间部分的信息YEAR类型 用两位数字或四位数字格式表示年,缺省的是四位数字格

33、式DATE类型 用于存储完整的日历日期DATETIME类型 存储日期与时间信息TIMESTAMP类型 与DATETIME一样存储日期和时间,66,时间数据类型总结,67,NULL的含义,在SQL中,NULL值是一个特殊的值,表示无法计算或未知的值。对于可为NULL的列,出现NULL值有不同的含义。所有原因都可以归为两类:未 知不可用,68,何时使用NULL,在数据库设计的开始阶段,如果某列中有些数据是不可用的,这时需要详查并决定是否允许NULL值。同时,对已有的表,如果发现的问题是由于列中出现了NULL值引起的,可以修改表的定义以允许NULL值。例如:LifeExpectancy FLOAT(

34、3,1)DEFAULT NULL在MySQL中,列缺省是可以为NULL的(除了TIMESTAMP列),除非特定声明它不能为NULL。,69,何时不用NULL,有时,可能不允许列为NULL,通常的情况是当该列为主键时。作为主键列缺省是不能为NULL的,TIMESTAMP列也是不能为NULL的。另外,可以使用NOT NULL来声明该列不为NULL。例如:Name CHAR(35)NOT NULLIsOfficial ENUM(T,F)NOT NULL DEFAULT F,70,第五章 SQL表达式,目 标,使用表达式组件在表达式中使用数值、字符串和时间值,72,SQL表达式的组件,表达式通常出现在

35、SELECT、DELETE或UPDATE语句的WHERE子句里,用来表示要获取、删除或修改的记录。表达式也可以被用于许多其他地方,例如,SELECT语句输出列的列表中、ORDER BY或GROUP BY子句中。表达式由直接量(数字、字符串、日期与时间)、内置的常量(例如NULL、TRUE与FALSE)、表的列引用及函数调用组成。,73,SQL表达式示例,下列语句使用表的列从Country表里获取国家的名称与人口:mysql SELECT Name,Population FROM Country;可以直接使用没有保存在表里的直接量数据值。例如:mysql SELECT 14,-312.82,4.

36、32E-03,I am a string;另一个产生数据值的方法是调用函数。例如:mysql SELECT CURDATE(),VERSION();复杂的SQL表达式示例mysql SELECT Name,-TRUNCATE(Population/SurfaceArea,2)AS people/sq.Km,-IF(GNP GNPOld,Increasing,Not increasing)AS GNP Trend-FROM Country-ORDER BY Name LIMIT 10;,74,数字表达式,数字可以是精确值直接量或近似值直接量。精确值直接量是不带指数的,而近似值直接量是用带指数的科

37、学记数法表示的。精确值数字是整数值或小数值。近似值直接量表示为浮点数(像DOUBLE数据类型),并且有尾数与指数。几乎所有包含有NULL部分的数字表达式都将运算为NULL。例如:mysql SELECT 1.1+2.2=3.3,1.1E0+2.2E0=3.3E0;如果在数字表达式里混合了数字与字符串,MySQL将字符串转换为数字并执行数字操作:mysql SELECT 1+1,1=1;,75,字符串表达式,表达式里的直接量字符串使用带引号的值表示。在表达式里直接使用字符串通常出现在比较操作中。等于(也可用于NULL值)或!=不等于=大于或等于 大于BETWEENAND 测试字符串是否在该值的范

38、围内,76,字符串表达式,在MySQL里,字符串的连接通常是使用CONCAT()函数来实现的:mysql SELECT CONCAT(abc,def,REPEAT(X,3);缺省地,“|”运算符被当作逻辑或(OR)操作。mysql SELECT abc|def;在PIPES_AS_CONCAT被启用后,“|”将产生字符串连接:mysql SET sql_mode=PIPES_AS_CONCAT;mysql SELECT abc|def;,77,字符串比较里的大小写敏感,字符串表达式包含了来自于特定字符集中的字符,它与字符集里可用的一个校对规则(排列顺序)相关联。字符由单字节或多字节组成,而校对

39、规则可能是大小写不敏感的或大小写敏感的。直接量字符串的缺省字符和校对规则依赖于系统变量character_set_connection与collation_connection的值。缺省的字符集是latin1,缺省的校对规则是latin1_swedish_ci,校对规则名称后面的“_ci”显示它是大小写不敏感的。mysql SELECT Hello=hello;,78,字符串比较里的大小写敏感,一个给定的校对规则可能会出现某种重音字符与其他字符的比较是相同的。例如,“”与“ue”在缺省的latin1_swedish_ci校对规则里是不同的,但在latin1_german2_ci校对规则里却是相

40、同的:mysql SELECT Mller=Muller;mysql SET collation_connection=latin1_german2_ci;mysql SELECT Mller=Muller;,79,使用LIKE模式匹配,有时有必要找到类似的值,而此时模式匹配将非常有用。expression LIKE pattern被用于模式的字符串直接量里,字符_与%有特殊的含义(“元字符”),它表示一个通配符而不是字符本身的含义:字符%匹配任何零或多个字符序列。字符_(下划线)匹配任何单字符。模式也可以与这些元字符结合使用。mysql SELECT Name FROM Country-WH

41、ERE Name LIKE United%;为了颠倒匹配模式,使用NOT LIKE而不用LIKE:mysql SELECT Name FROM Country-WHERE Name NOT LIKE United%;,80,使用正则表达式来进行模式匹配,还有一个更强大的模式匹配运算符:REGEXP或RLIKE。LIKE与RLIKE的区别是RLIKE的模式是正则表达式。使用正则表达式,你可以测试复杂的模式,例如:URLIP地址E-mail地址电话号码邮政编码 使用正则表达式示例mysql SELECT Name FROM City-WHERE Name RLIKE nat;mysql SELEC

42、T Name FROM City-WHERE Name RLIKE New.*rk$;mysql SELECT Name FROM City-WHERE Name RLIKE Los|Las;mysql SELECT Name FROM City-WHERE Name RLIKE Laos;mysql SELECT CityName,StreetName FROM Addresses WHERE-PostalCode RLIKE A-HJ-NP-Z0-94(A-Z3)?$;,81,转义字符,如果想要匹配正则表达式里的字符本身,必须使用转义。mysql SELECT RLIKE;ERROR 11

43、39(42000):Got error trailing backslash()from regexpmysql SELECT RLIKE;mysql SELECT RLIKE;,82,时间表达式,可通过以下方式来产生时间值:从已有的DATE、DATETIME或TIME列复制数据。执行内置的函数返回一个DATE、DATETIME或TIME列。构建一个由服务器来执行的时间数据的字符串表达式。,83,时间表达式,日期组件:DATEYYYY-MM-DDTIMEHH:MM:SSDATETIMEYYYY-MM-DD HH:MI:SSTIMESTAMPYYYY-MM-DD HH:MI:SSDAY DDMO

44、NTHMMQUARTERQYEARYYYY,84,时间表达式,为了执行内部的计算,可使用INTERVAL关键字与一个单元值。例如:mysql SELECT 2010-01-01+INTERVAL 10 DAY,INTERVAL 10 DAY+2010-01-01;mysql SELECT 2010-01-01-INTERVAL 10 DAY;,85,第六章 数据库,目 标,理解MySQL的数据目录使用好的实践经验进行数据库结构设计选择合适的数据库标识符创建、修改和删除数据库,87,数据库属性,MySQL服务器通过执行存储、检索与操作数据行来管理数据。行是包含在表中,而表是包含在数据库中。MyS

45、QL使用文件系统的一个目录来表示一个数据库,这种目录被称作数据库目录。对于一个特定的MySQL服务器,它所有的数据库目录都有一个共同的父目录:data目录。,88,设计实践,当设计数据库时,要考虑两件重要的事情:存储的信息:要保存什么样的信息?要问的问题:发送到数据库的查询。为了实践良好的设计,可以运用不同的MySQL技术:键 用于标识唯一的数据标准化 精炼数据库表以提高效率的过程建模 数据库结构的图形表示,89,键,超键(Super Key)即表中的一组列,用来唯一标识表中的一行。候选键(Candidate Key)是一个能标识一行的最小列组。主键(Primary Key)就是一个候选键,被

46、设计(或创建)为精确定义一个唯一的行。表中的主键能够被另一个表所引用,从而连接两个表。引用键被称作外键(Foreign Key)。使用键的好处:降低查找时间强化每行的唯一标识主键不能包含NULL(未知或空值),90,键的示例,91,常见的图表系统,实体关系图ERD是一个很常见的数据模型或图表,用于数据模型概念的高级描述,它还提供了表示这类模型数据的图形表示。这类模型通常被用于信息系统设计的第一阶段;例如,在需求分析中,它们被用于描述所需的信息和/或要被保存在数据库里的信息类型。,92,基本的ERD关系符号,93,标准化,在关系型数据库设计中,标准化是细化数据库设计的过程,以此确保每个独立的信息

47、块仅被存放在一个地方(除外键外)。对于复杂表的标准化,通常是将其分解为一系列的小表。该过程将删除行里的冗余组以及列里的重复数据。为什么要标准化?消除冗余数据 消除列与键的无关性隔离独立的多重关系,94,world数据库标准化的实例,其中有一个表是CountryLanguage。为什么语言不包含在Country表里?因为不同国家里可能有多种语言增加更多的列到Country表结构里将导致效率低下同样,还有只适合于语言自身的详细信息可能与国家的其他信息没有任何关系(例如,官方语言、讲每种语言的人口百分比)在创建该表时,标准化的目的达到了,因为它包含的信息只保存在一个地方,并且通过主键与其他表关联,9

48、5,标准的样式,标准化有许多级别,每个连续的级别都对数据的修改、异常的消除提供了强有力的保障。第一标准样式(1NF)第二标准样式(2NF)第三标准样式(3NF),96,一对多关系,标准化数据库的最积极结果之一是产生了表之间的关系。World数据库也有这种关系的实例:一个国家对多种语言一个国家对多个城市,97,标识符,标识符是一个别名、数据库、表、列或索引的简单名称。标识符可以是非引用的或引用的。如果是非引用的,它必须遵循以下规则:标识符可以包含所有文字数字字符、下划线(_)和美元符号($)标识符可以以任何合法的字符,甚至数字开始标识符不能全部为数字标识符可以被引用,98,将保留单词作为标识符,

49、保留单词是特殊的标识符。例如,函数名称、表名或列名均不能被用作标识符,否则会出现错误。例如:mysql CREATE TABLE t(order INT NOT NULL,d DATE NOT NULL);mysql SELECT 1 AS INTEGER;,99,将保留单词作为标识符,为了使用保留单词作为数据库、表、列或索引标识符,有一到两种可用的引用方式,它依赖于服务器的SQL模式。mysql CREATE TABLE t(order INT NOT NULL UNIQUE,d DATE NOT NULL);mysql CREATE TABLE t(order INT NOT NULL U

50、NIQUE,d DATE NOT NULL);为了将保留单词作为别名,可以使用单引号、双引号或倒引号来引用它。mysql SELECT 1 AS INTEGER;mysql SELECT 1 AS INTEGER;mysql SELECT 1 AS INTEGER;当然,好的办法是避免使用函数名为标识符。,100,使用限定名称,列与表的标识符可以用限定形式书写。表名也可以用所属的数据库名称来限定它。mysql SELECT*FROM Country;mysql SELECT*FROM world.Country;列名也可以通过与它所属的表名一起使用来限定。mysql SELECT Name F

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号