《实训教材系列数据库的设计与开发.ppt》由会员分享,可在线阅读,更多相关《实训教材系列数据库的设计与开发.ppt(238页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实训教材系列数据库的设计与开发 Still waters run deep.流流静静水深水深,人人静静心深心深 Where there is life,there is hope。有生命必有希望。有生命必有希望第一章第一章 MySQL介绍介绍目目 标标解释MySQL产品的起源和状态列出现有的MySQL产品及专业服务安装MySQL及“world”数据库描述MySQL客户端-服务器模型3MySQL概述概述MySQL最初是由“MySQL AB”公司开发的一套关系型数据库管理系统(RDBMS)。MySQL不仅是最流行的开源数据库,而且是业界增长最快的数据库,每天有超过7万次的下载量,其应用范围从大型企
2、业到专有的嵌入应用系统。MySQL AB是由两个瑞典人和一个芬兰人:David Axmark、Allan Larsson和Michael“Monty”Widenius在瑞典创办的。在2008年初,Sun Microsystems收购了MySQL AB公司。在2009年,Oracle收购了Sun公司,使MySQL并入Oracle的数据库产品线。4MySQL数据库产品数据库产品MySQL数据库是公认的简单易用、高性能及高可靠性的产品。MySQL企业服务器MySQL社区服务器MySQL嵌入数据库MySQL集群5MySQL图形用户界面(图形用户界面(GUI)工具)工具MySQL GUI工具为MySQL
3、数据库提供了一组丰富的图形用户界面。MySQL移植工具包MySQL AdministratorMySQL Query Browser6MySQL驱动程序驱动程序MySQL数据库驱动程序(也称作连接器),为多种编程语言提供数据库客户端的连接。MySQL包括以下连接器:MySQL C APIMySQL连接器/ODBCMySQL连接器/JMySQL连接器/NetMySQL连接器/PHP7嵌入式嵌入式MySQL解决方案解决方案MySQL还提供了库文件,用来将MySQL数据库服务器嵌入到程序中。libmysqldMySQL MXJ8安装安装MySQL推荐到MySQL网站的下载网页:http:/ CREA
4、TE DATABASE world;2.选择“world”数据库mysql USE world;3.构建“world”数据库的表mysql SOURCE C:/world.sql10MySQL客户端客户端-服务器模型服务器模型在网络环境中,MySQL采用客户端/服务器架构进行工作。MySQL的安装包括以下主要部件:MySQL服务器客户端程序MySQL非客户端工具11MySQL客户端客户端-服务器模型服务器模型12第二章第二章 MySQL客户端客户端目目 标标在MySQL客户/服务器体系结构中调用客户端程序使用mysql客户端程序14调用客户端程序调用客户端程序MySQL客户端程序可以从命令行调
5、用。当客户端程序被调用时,可以通过在程序名后指定选项来控制它的行为。选项也可以在选项文件中定义。shell mysql helpshell mysql-version15通用命令选项语法通用命令选项语法MySQL程序选项具有以下两种通用形式:长选项,由单词之前加两个减号组成短选项,由单个字母之前加一个减号组成shell mysql-versionshell mysql-V一些选项是要赋值的。例如:shell mysql-host=shell mysql-h shell mysql-16建立连接的选项建立连接的选项17MySQL用户身份选项用户身份选项-user=“用户名”或 u“用户名”-pa
6、ssword=“密码值”或 p“密码值”18如何指定连接参数如何指定连接参数用缺省主机名和用户名(没有密码)连接服务器:shell mysql使用用户名“myname”连接本地主机服务器,让mysql提示用户输入密码:shell mysql-host=localhost-password-user=myname与上例使用相同的选项,但使用相应的短选项形式:shell mysql-h localhost-p-u myname19交互式使用交互式使用mysqlmysql客户端程序可以交互式地使用,或以批处理模式从文件中读取查询。交互式模式对日常使用是非常有用的,例如快速的SQL语句处理,以及测试S
7、QL语句是如何工作的。对运行保存在文本文件中的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.
8、City -go G序列也被用作语句结束符,但它还有其它影响,即导致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,
9、可使用q、QUIT或EXIT:mysql q 22mysql提示符提示符23mysql提示符提示符为了重新定义“mysql”提示符,可使用prompt命令;mysql prompt win 1win 1在提示符中放入当前信息,诸如用户、主机和数据库;mysqlprompt(uh)dPROMPT set to(uh)d(rootlocalhost)world为了将提示符转换为缺省形式,应输入不带参数的prompt命令或R。(rootlocalhost)worldpromptReturning to default PROMPT of mysqlmysql24在在mysql中使用编辑键中使用编辑键
10、mysql客户端支持输入行的编辑,这使得它可以回调以前的输入行并可以进行编辑。在Unix/Linux上,它还支持“tab”完成键,从而可以更容易地输入查询。四个方向键在Unix下,mysql客户端拥有全部的readline功能会话期间命令历史的保存25在在mysql中使用脚本文件中使用脚本文件一个包含SQL语句并将要被执行的输入文件叫做脚本文件或SQL批处理文件。处理脚本文件的方法之一是用SOURCE命令在mysql中执行它:mysql SOURCE input_file例如:mysql SOURCE C:/scripts/my_commands.sqlmysql SOURCE./script
11、s/my_commands.sql26客户端命令与客户端命令与SQL语句语句当mysql在运行中发布一条SQL语句时,程序将该语句发送到MySQL服务器来执行。SELECT、INSERT、UPDATE和DELETE都是这类输入的示例。mysql也会知道其中哪些是自己的命令而非SQL语句。例如:QUITSOURCESTATUSHELP27第三章第三章 表数据查询表数据查询目目 标标使用SELECT语法执行基本的、单个表的查询聚集查询结果使用UNION关键字连接多个SELECT语句的结果29SELECT语句语句SELECT语句主要被用于查询数据库中的一个或多个表里的数据。SELECT语句表示数据库
12、中一组特定的数据记录。SELECT语句的基本的语法模式如下:SELECT FROM 例如:mysql 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使用使用FROMFROM子
13、句在SELECT语句中是可选项,它出现在语句的表达式之后,而表达式是在SELECT关键字后面出现。FROM子句指定语句要处理的表。非限定表名FROM 例如:FROM Country限定的表名FROM.例如:FROM world.Country表的别名在SQL语句里,在FROM子句里引用的表可以给定一个临时的名称,该名称叫做表的别名。32使用使用DISTINCT如果查询的结果中包含重复的记录,该重复记录要被删除以生成每行都是唯一的结果集。为了达到这个目的,可在SELECT关键字后添加DISTINCT关键字。mysql SELECT Continent FROM Country;mysql SEL
14、ECT DISTINCT Continent FROM Country;在指定的列里,DISTINCT将所有的NULL值当作相同的值。mysql SELECT i,j FROM t;mysql SELECT DISTINCT i,j FROM t;33使用使用WHEREWHERE子句将过滤满足特定条件的记录。例如:mysql SELECT ID,Name,District FROM city WHERE Name=New York;MySQL支持许多不同类型的运算符,这依赖于操作数的数据类型,或操作数与运算符处理的值的数据类型。运算比较 逻辑例如:mysql SELECT Name,Popul
15、ation -FROM Country -WHERE Population 50000000 AND -(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语句里使
16、用语句里使用ORDER BY如果有必要让输出记录按某一特定的顺序返回,可以使用ORDER BY子句以显示如何排序结果集。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 AS
17、C;36在在SELECT语句里使用语句里使用LIMIT当一个查询返回许多记录行时,有必要通过增加LIMIT子句来限定只显示部分记录。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
18、BY SurfaceArea LIMIT 1;mysql SELECT Name,Population -FROM Country -ORDER BY Population DESC LIMIT 5;37聚集查询结果聚集查询结果有可能出现这种情况,结果集里的一行对应于底层基表里的一组记录行。这个过程叫聚合,并且这样一个结果集被称为聚集。计算一组值的摘要值的函数(例如AVG()被称为“聚集”函数。MIN()MAX()SUM()AVG()STD()COUNT()GROUP_CONCAT()38聚集查询结果示例聚集查询结果示例例如,使用COUNT(*)函数来统计world数据库中Country表中的
19、行数。mysql SELECT COUNT(*)FROM Country;现在,指定统计Capital列而产生不同的结果,因为不是每个国家都有Capital,NULL值将不会被统计:mysql SELECT COUNT(Capital)FROM Country;39用用SELECT与与GROUP BY分组分组所有在GROUP BY子句中指定的表达式里,具有相同结合值的记录行将按一组处理,在结果集里以一行结束。聚集函数可以与GROUP BY一起使用将记录分组。当带有GROUP BY子句时,聚集函数将为每个组统计值。mysql SELECT Continent,AVG(Population)-FR
20、OM Country -GROUP BY Continent;40带带GROUP_CONCAT()的分组的分组GROUP_CONCAT()函数将每组的结果字符串连接起来。例如,将南美洲的国家按特定的政府形式创建国家的列表:mysql SELECT GovernmentForm,GROUP_CONCAT(Name)AS Countries -FROM Country -WHERE Continent=South America -GROUP BY GovernmentFormG41带带WITH ROLLUP的分组的分组可在GROUP BY子句里使用WITH ROLLUP修饰符来产生多个级别的统计
21、值。例如:mysql SELECT Continent,SUM(Population)as pop -FROM Country -GROUP BY Continent -WITH ROLLUP;mysql SELECT Continent,AVG(Population)AS avg_pop -FROM Country -GROUP BY Continent WITH ROLLUP;42HAVINGHAVING子句被用于消除基于聚集值的记录行。例如:mysql SELECT Continent,SUM(Population)AS pop -FROM Country -GROUP BY Conti
22、nent -HAVING SUM(Population)100000000;43使用使用UNIONUNION关键字能够将两个或多个SELECT语句的结果连接起来。其语句是:SELECT UNIONSELECT 缺省地,UNION消除结果集中的重复记录。为了获得所有的记录行,可用UNION ALL取代每个UNION实例。UNION在下面情况下将很有用:多个表中有相似的信息,并且需要从这些表中立刻获取记录。需要从同一个表中获取几组记录,但是表现每组的条件并不容易写在一个单个的WHERE子句里。44使用使用UNION例如:mysql CREATE TABLE list1(-subscriber CH
23、AR(60),-email CHAR(60)-);mysql CREATE TABLE list2(-name CHAR(96),-address CHAR(128)-);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与LIMI
24、T可用于排序与限定一个UNION结果集。mysql(SELECT subscriber,email FROM list1)-UNION -(SELECT name,address 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,addre
25、ss FROM list2 ORDER BY address LIMIT 5)-UNION -(SELECT real_name,email FROM list3 ORDER BY email LIMIT 5);46第四章第四章 数据类型数据类型目目 标标描述三个主要类别的数据类型理解字符集与校对规则分配合适的数据类型给表实体理解NULL与NOT NULL的含义与使用48数据类型概述数据类型概述在MySQL中,可用的数据类型共分为四个主要类别:数值数字值(整数、浮点、定点数、位字段值)字符文本字符串二进制二进制数据字符串时间时间和日期ABC的数据类型A)Apt B)BriefC)Complet
26、e49使用数据类型创建表使用数据类型创建表创建表时,每个列的声明包括列名、识别该列保存信息的数据类型以及可能的其它属性(选项)以用来明确定义MySQL如何处理该列。例如:mysql CREATE TABLE people(id INT,first_nameCHAR(30),last_name CHAR(30);50数值数据类型数值数据类型为了保存数值数据,MySQL提供以下类型:整数类型:保存整数数字浮点类型:保存近似数值数据定点类型:保存精确数值位类型:保存位字段数值当选择一个数值数据类型时,应考虑以下因素:数据类型数值的范围列值所需要的存储空间数量列的精度和标度(适用于浮点和定点数)51整
27、数类型整数类型以下列表是MySQL支持的整数数据类型:TINYINT SMALLINT MEDIUMINT INT或INTEGERBIGINT 例如:Population INT(11)52浮点类型浮点类型浮点数据类型包括FLOAT和DOUBLE。它们都被用来表示近似数值数据,包含整数部分、小数部分或二者都有。FLOATDOUBLE对于FLOAT和DOUBLE,如果列可以为NULL,则缺省值是NULL,如果列不能为NULL,其缺省值是0。53浮点类型浮点类型FLOAT数据类型可以用以下不同的表示法来指定:不指定精度:FLOAT使用二进制精度:FLOAT(M)指定总的数字位数与小数部分的数字位数
28、:FLOAT(D,F)没有任何精度:DOUBLE指定数值的位数与小数部分位数:DOUBLE(D,F)例如:GNP FLOAT(10,2)54定点类型定点类型定点数据类型是DECIMAL,它被用来保存精确数值。它们包含整数部分、小数部分或二者都有。DECIMAL数据类型用下列语法定义:DECIMAL(P,S)例如:cost DECIMAL(10,2)在MySQL中,NUMERIC数据类型与DECIMAL是相同的类型。55BIT类型类型BIT数据类型表示位字段值。BIT列指定了每个值所需要的位数,从1到64位。例如:bit_col1 BIT(4)bit_col2 BIT(20)BIT列可以用数字表
29、达式赋值。例如,b1111等于15,b1000000等于64。56字符串数据类型字符串数据类型以下列出了MySQL提供的字符串数据类型。所有这些类型都可用于保存非结构化格式的字符串:CHAR 固定长度字符串VARCHAR 可变长度字符串TEXT 可变长度字符串MySQL还定义了两种结构化字符串类型:ENUM 由一组固定的有效值组成的枚举SET 由一组固定的有效值组成的集合57CHAR类型类型定义一个列为CHAR数据类型的语法如下:CHAR(L)L代表CHAR值可以接受的最大的字符数。CHAR列的每个值都将占用L个字符,即使该值不需要整个可用的长度。58VARCHAR类型类型这种数据类型被用来存
30、储可变长度的字符串。其定义的语法是:VARCHAR(L)例如:Language VARCHAR(30)CountryLanguage表中的某个实例值只使用25个字符,尽管允许30个字符:Southern Slavic Languages59文本类型文本类型文本类型由一组非结构化的、可变长度的字符串组成,它最适合于存储访问频率低且相当大的字符串。TINYTEXTTEXTMEDIUMTEXTLONGTEXT60ENUM类型类型ENUM类型是一个枚举数据类型。语法ENUM(value1,vaulN)示例Continent ENUM(Asia,Europe,North Americal,Africa,
31、Oceania,Antarctica,South American)61SET类型类型SET类型可以从给定的列表中选择将多个值组合为一个有效的值。语法SET(value1,valueN)示例special_features SET(Trailers,Commentaries,Deleted Scenes,Behind the Scenes)62字符集与校对规则的支持字符集与校对规则的支持字符集是一套符号和编码,其中包含了编码规则以定义字符如何被编码为数字。在字符比较时,所有字符串都按校对规则进行比较。校对规则是一套比较序列的规则,它定义了字符的排序顺序,以及管理单个字符和字符串如何与其它值进行
32、比较。可用下面的语句显示可用的字符集:mysql SHOW CHARACTER SET;一个给定的字符集可以有几个校对规则可用。这使得同一个字符集可以选择不同的排序顺序。mysql SHOW COLLATION LIKE latin1%;63二进制类型二进制类型下面列举了二进制数据类型:BINARYVARBINARY除了这些类型,MySQL还支持很多BLOB类型。64什么是什么是BLOB?BLOB是一种可变长度的非结构化的二进制数据集合。通常地,BLOB是图像、语音或其它多媒体对象。BLOB术语是二进制大对象(Binary Large Object)的字首缩写。MySQL支持的BLOB类型有以
33、下几种:TINYBLOBBLOBMEDIUMBLOB LONGBLOB65时间数据类型时间数据类型MySQL提供了用来存储不同类型时间信息的数据类型。TIME类型 用于存储时间部分的信息YEAR类型 用两位数字或四位数字格式表示年,缺省的是四位数字格式DATE类型 用于存储完整的日历日期DATETIME类型 存储日期与时间信息TIMESTAMP类型 与DATETIME一样存储日期和时间66时间数据类型总结时间数据类型总结67NULL的含义的含义在SQL中,NULL值是一个特殊的值,表示无法计算或未知的值。对于可为NULL的列,出现NULL值有不同的含义。所有原因都可以归为两类:未 知不可用68
34、何时使用何时使用NULL在数据库设计的开始阶段,如果某列中有些数据是不可用的,这时需要详查并决定是否允许NULL值。同时,对已有的表,如果发现的问题是由于列中出现了NULL值引起的,可以修改表的定义以允许NULL值。例如:LifeExpectancy FLOAT(3,1)DEFAULT NULL在MySQL中,列缺省是可以为NULL的(除了TIMESTAMP列),除非特定声明它不能为NULL。69何时不用何时不用NULL有时,可能不允许列为NULL,通常的情况是当该列为主键时。作为主键列缺省是不能为NULL的,TIMESTAMP列也是不能为NULL的。另外,可以使用NOT NULL来声明该列不
35、为NULL。例如:Name CHAR(35)NOT NULLIsOfficial ENUM(T,F)NOT NULL DEFAULT F70第五章第五章 SQL表达式表达式目目 标标使用表达式组件在表达式中使用数值、字符串和时间值72SQL表达式的组件表达式的组件表达式通常出现在SELECT、DELETE或UPDATE语句的WHERE子句里,用来表示要获取、删除或修改的记录。表达式也可以被用于许多其他地方,例如,SELECT语句输出列的列表中、ORDER BY或GROUP BY子句中。表达式由直接量(数字、字符串、日期与时间)、内置的常量(例如NULL、TRUE与FALSE)、表的列引用及函数
36、调用组成。73SQL表达式示例表达式示例下列语句使用表的列从Country表里获取国家的名称与人口:mysql SELECT Name,Population FROM Country;可以直接使用没有保存在表里的直接量数据值。例如:mysql SELECT 14,-312.82,4.32E-03,I am a string;另一个产生数据值的方法是调用函数。例如:mysql SELECT CURDATE(),VERSION();复杂的SQL表达式示例mysql SELECT Name,-TRUNCATE(Population/SurfaceArea,2)AS people/sq.Km,-IF(
37、GNP GNPOld,Increasing,Not increasing)AS GNP Trend -FROM Country -ORDER BY Name LIMIT 10;74数字表达式数字表达式数字可以是精确值直接量或近似值直接量。精确值直接量是不带指数的,而近似值直接量是用带指数的科学记数法表示的。精确值数字是整数值或小数值。近似值直接量表示为浮点数(像DOUBLE数据类型),并且有尾数与指数。几乎所有包含有NULL部分的数字表达式都将运算为NULL。例如:mysql SELECT 1.1+2.2=3.3,1.1E0+2.2E0=3.3E0;如果在数字表达式里混合了数字与字符串,MyS
38、QL将字符串转换为数字并执行数字操作:mysql SELECT 1+1,1=1;75字符串表达式字符串表达式表达式里的直接量字符串使用带引号的值表示。在表达式里直接使用字符串通常出现在比较操作中。小于=小于或等于=等于 等于(也可用于NULL值)或!=不等于=大于或等于 大于BETWEENAND 测试字符串是否在该值的范围内76字符串表达式字符串表达式在MySQL里,字符串的连接通常是使用CONCAT()函数来实现的:mysql SELECT CONCAT(abc,def,REPEAT(X,3);缺省地,“|”运算符被当作逻辑或(OR)操作。mysql SELECT abc|def;在PIPE
39、S_AS_CONCAT被启用后,“|”将产生字符串连接:mysql SET sql_mode=PIPES_AS_CONCAT;mysql SELECT abc|def;77字符串比较里的大小写敏感字符串比较里的大小写敏感字符串表达式包含了来自于特定字符集中的字符,它与字符集里可用的一个校对规则(排列顺序)相关联。字符由单字节或多字节组成,而校对规则可能是大小写不敏感的或大小写敏感的。直接量字符串的缺省字符和校对规则依赖于系统变量character_set_connection与collation_connection的值。缺省的字符集是latin1,缺省的校对规则是latin1_swedish
40、_ci,校对规则名称后面的“_ci”显示它是大小写不敏感的。mysql SELECT Hello=hello;78字符串比较里的大小写敏感字符串比较里的大小写敏感一个给定的校对规则可能会出现某种重音字符与其他字符的比较是相同的。例如,“”与“ue”在缺省的latin1_swedish_ci校对规则里是不同的,但在latin1_german2_ci校对规则里却是相同的:mysql SELECT Mller=Muller;mysql SET collation_connection=latin1_german2_ci;mysql SELECT Mller=Muller;79使用使用LIKE模式匹配
41、模式匹配有时有必要找到类似的值,而此时模式匹配将非常有用。expression LIKE pattern被用于模式的字符串直接量里,字符_与%有特殊的含义(“元字符”),它表示一个通配符而不是字符本身的含义:字符%匹配任何零或多个字符序列。字符_(下划线)匹配任何单字符。模式也可以与这些元字符结合使用。mysql SELECT Name FROM Country -WHERE Name LIKE United%;为了颠倒匹配模式,使用NOT LIKE而不用LIKE:mysql SELECT Name FROM Country -WHERE Name NOT LIKE United%;80使用正
42、则表达式来进行模式匹配使用正则表达式来进行模式匹配还有一个更强大的模式匹配运算符:REGEXP或RLIKE。LIKE与RLIKE的区别是RLIKE的模式是正则表达式。使用正则表达式,你可以测试复杂的模式,例如:URLIP地址E-mail地址电话号码邮政编码 使用正则表达式示例mysql SELECT Name FROM City -WHERE Name RLIKE nat;mysql SELECT Name FROM City -WHERE Name RLIKE New.*rk$;mysql SELECT Name FROM City -WHERE Name RLIKE Los|Las;mys
43、ql 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 1139(42000):Got error trailing backslash()from regexpmysql SELECT RLIKE;mysql SELECT RLIKE;82时间表达式
44、时间表达式可通过以下方式来产生时间值:从已有的DATE、DATETIME或TIME列复制数据。执行内置的函数返回一个DATE、DATETIME或TIME列。构建一个由服务器来执行的时间数据的字符串表达式。83时间表达式时间表达式日期组件:DATEYYYY-MM-DDTIMEHH:MM:SSDATETIMEYYYY-MM-DD HH:MI:SSTIMESTAMPYYYY-MM-DD HH:MI:SSDAY DDMONTHMMQUARTERQYEARYYYY84时间表达式时间表达式为了执行内部的计算,可使用INTERVAL关键字与一个单元值。例如:mysql SELECT 2010-01-01+I
45、NTERVAL 10 DAY,INTERVAL 10 DAY+2010-01-01;mysql SELECT 2010-01-01-INTERVAL 10 DAY;85第六章第六章 数据库数据库目目 标标理解MySQL的数据目录使用好的实践经验进行数据库结构设计选择合适的数据库标识符创建、修改和删除数据库87数据库属性数据库属性MySQL服务器通过执行存储、检索与操作数据行来管理数据。行是包含在表中,而表是包含在数据库中。MySQL使用文件系统的一个目录来表示一个数据库,这种目录被称作数据库目录。对于一个特定的MySQL服务器,它所有的数据库目录都有一个共同的父目录:data目录。88设计实践
46、设计实践当设计数据库时,要考虑两件重要的事情:存储的信息:要保存什么样的信息?要问的问题:发送到数据库的查询。为了实践良好的设计,可以运用不同的MySQL技术:键 用于标识唯一的数据标准化 精炼数据库表以提高效率的过程建模 数据库结构的图形表示89键键超键(Super Key)即表中的一组列,用来唯一标识表中的一行。候选键(Candidate Key)是一个能标识一行的最小列组。主键(Primary Key)就是一个候选键,被设计(或创建)为精确定义一个唯一的行。表中的主键能够被另一个表所引用,从而连接两个表。引用键被称作外键(Foreign Key)。使用键的好处:降低查找时间强化每行的唯一
47、标识主键不能包含NULL(未知或空值)90键的示例键的示例91常见的图表系统常见的图表系统实体关系图ERD是一个很常见的数据模型或图表,用于数据模型概念的高级描述,它还提供了表示这类模型数据的图形表示。这类模型通常被用于信息系统设计的第一阶段;例如,在需求分析中,它们被用于描述所需的信息和/或要被保存在数据库里的信息类型。92基本的基本的ERD关系符号关系符号93标准化标准化在关系型数据库设计中,标准化是细化数据库设计的过程,以此确保每个独立的信息块仅被存放在一个地方(除外键外)。对于复杂表的标准化,通常是将其分解为一系列的小表。该过程将删除行里的冗余组以及列里的重复数据。为什么要标准化?消除
48、冗余数据 消除列与键的无关性隔离独立的多重关系94world数据库标准化的实例数据库标准化的实例其中有一个表是CountryLanguage。为什么语言不包含在Country表里?因为不同国家里可能有多种语言增加更多的列到Country表结构里将导致效率低下同样,还有只适合于语言自身的详细信息可能与国家的其他信息没有任何关系(例如,官方语言、讲每种语言的人口百分比)在创建该表时,标准化的目的达到了,因为它包含的信息只保存在一个地方,并且通过主键与其他表关联95标准的样式标准的样式标准化有许多级别,每个连续的级别都对数据的修改、异常的消除提供了强有力的保障。第一标准样式(1NF)第二标准样式(2
49、NF)第三标准样式(3NF)96一对多关系一对多关系标准化数据库的最积极结果之一是产生了表之间的关系。World数据库也有这种关系的实例:一个国家对多种语言一个国家对多个城市97标识符标识符标识符是一个别名、数据库、表、列或索引的简单名称。标识符可以是非引用的或引用的。如果是非引用的,它必须遵循以下规则:标识符可以包含所有文字数字字符、下划线(_)和美元符号($)标识符可以以任何合法的字符,甚至数字开始标识符不能全部为数字标识符可以被引用98将保留单词作为标识符将保留单词作为标识符保留单词是特殊的标识符。例如,函数名称、表名或列名均不能被用作标识符,否则会出现错误。例如:mysql CREAT
50、E 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 UNIQUE,d DATE NOT NULL);为了将保留单词作为别名,可以使用单引号、双引号或倒引号