实训教材系列数据库的设计与开发.ppt_第1页
实训教材系列数据库的设计与开发.ppt_第2页
实训教材系列数据库的设计与开发.ppt_第3页
实训教材系列数据库的设计与开发.ppt_第4页
实训教材系列数据库的设计与开发.ppt_第5页
已阅读5页,还剩233页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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” Widenius在瑞典创办的。 在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 Administrator MySQL Query Browser,6,MySQL驱动程序,MySQL数据库驱动程序(也称作连接器),为多种编程语言提供数据库客户端的连接。MySQL包括以下连接器: MySQL C API MySQL连接器/ODBC MySQL连接器/J MySQL连接器/Net MySQL连接器/PHP,7,嵌入式MySQL解决方案,MySQL还提供了库文件,用来将MySQL数据库服务器嵌入到程序中。 libmysqld MySQL MXJ,8,安装MySQL,推荐到MySQL网站的下载网页:/ downloads/下载MySQL数据库服务器。这里有多种支持的平台,并且每个版本都有不同的安装说明。 在Windows中安装MySQL服务器,9,安装“world”数据库,MySQL提供了三个数据库示例,以用于测试数据库特征及培训。下载地址为:/doc/。 需要使用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客户/服务器体系结构中调用客户端程序 使用mysql客户端程序,14,调用客户端程序,MySQL客户端程序可以从命令行调用。 当客户端程序被调用时,可以通过在程序名后指定选项来控制它的行为。选项也可以在选项文件中定义。 shell mysql help shell mysql -version,15,通用命令选项语法,MySQL程序选项具有以下两种通用形式: 长选项,由单词之前加两个减号组成 短选项,由单个字母之前加一个减号组成 shell mysql -version shell mysql -V 一些选项是要赋值的。例如: shell mysql -host= shell mysql -h shell mysql -,16,建立连接的选项,17,MySQL用户身份选项,-user=“用户名”或 u “用户名” -password=“密码值”或 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语句是如何工作的。 对运行保存在文本文件中的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序列也被用作语句结束符,但它还有其它影响,即导致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,mysql提示符,23,mysql提示符,为了重新定义“mysql”提示符,可使用prompt命令; mysql prompt win 1 win 1 在提示符中放入当前信息,诸如用户、主机和数据库; mysqlprompt (uh) d PROMPT set to (uh) d (rootlocalhost) world 为了将提示符转换为缺省形式,应输入不带参数的prompt命令或R。 (rootlocalhost) worldprompt Returning to default PROMPT of mysql mysql,24,在mysql中使用编辑键,mysql客户端支持输入行的编辑,这使得它可以回调以前的输入行并可以进行编辑。在Unix/Linux上,它还支持“tab”完成键,从而可以更容易地输入查询。 四个方向键 在Unix下,mysql客户端拥有全部的readline功能 会话期间命令历史的保存,25,在mysql中使用脚本文件,一个包含SQL语句并将要被执行的输入文件叫做脚本文件或SQL批处理文件。 处理脚本文件的方法之一是用SOURCE命令在mysql中执行它: mysql SOURCE input_file 例如: mysql SOURCE C:/scripts/my_commands.sql mysql SOURCE /scripts/my_commands.sql,26,客户端命令与SQL语句,当mysql在运行中发布一条SQL语句时,程序将该语句发送到MySQL服务器来执行。SELECT、INSERT、UPDATE和DELETE都是这类输入的示例。 mysql也会知道其中哪些是自己的命令而非SQL语句。例如: QUIT SOURCE STATUS HELP,27,第三章 表数据查询,目 标,使用SELECT语法执行基本的、单个表的查询 聚集查询结果 使用UNION关键字连接多个SELECT语句的结果,29,SELECT语句,SELECT语句主要被用于查询数据库中的一个或多个表里的数据。 SELECT语句表示数据库中一组特定的数据记录。 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,使用FROM,FROM子句在SELECT语句中是可选项,它出现在语句的表达式之后,而表达式是在SELECT关键字后面出现。 FROM子句指定语句要处理的表。 非限定表名 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将所有的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 - (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子句以显示如何排序结果集。 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子句来限定只显示部分记录。 LIMIT子句可以采用以下一个或两个参数: LIMIT row_count LIMIT 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 - 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列而产生不同的结果,因为不是每个国家都有Capital,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()函数将每组的结果字符串连接起来。例如,将南美洲的国家按特定的政府形式创建国家的列表: 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 - 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语句的结果连接起来。其语句是: SELECT UNION SELECT 缺省地,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) - ); 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, 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, address 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)Brief C)Complete,49,使用数据类型创建表,创建表时,每个列的声明包括列名、识别该列保存信息的数据类型以及可能的其它属性(选项)以用来明确定义MySQL如何处理该列。 例如: mysql CREATE TABLE people ( id INT, first_name CHAR(30), last_name CHAR(30) );,50,数值数据类型,为了保存数值数据,MySQL提供以下类型: 整数类型:保存整数数字 浮点类型:保存近似数值数据 定点类型:保存精确数值 位类型:保存位字段数值 当选择一个数值数据类型时,应考虑以下因素: 数据类型数值的范围 列值所需要的存储空间数量 列的精度和标度(适用于浮点和定点数),51,整数类型,以下列表是MySQL支持的整数数据类型: TINYINT SMALLINT MEDIUMINT INT或INTEGER BIGINT 例如: Population INT(11),52,浮点类型,浮点数据类型包括FLOAT和DOUBLE。它们都被用来表示近似数值数据,包含整数部分、小数部分或二者都有。 FLOAT DOUBLE 对于FLOAT和DOUBLE,如果列可以为NULL,则缺省值是NULL,如果列不能为NULL,其缺省值是0。,53,浮点类型,FLOAT数据类型可以用以下不同的表示法来指定: 不指定精度:FLOAT 使用二进制精度:FLOAT (M) 指定总的数字位数与小数部分的数字位数:FLOAT (D,F) 没有任何精度:DOUBLE 指定数值的位数与小数部分位数:DOUBLE(D,F) 例如: GNP FLOAT(10,2),54,定点类型,定点数据类型是DECIMAL,它被用来保存精确数值。它们包含整数部分、小数部分或二者都有。 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 可变长度字符串 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 Languages,59,文本类型,文本类型由一组非结构化的、可变长度的字符串组成,它最适合于存储访问频率低且相当大的字符串。 TINYTEXT TEXT MEDIUMTEXT LONGTEXT,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 SET (Trailers, Commentaries, Deleted Scenes, Behind the Scenes),62,字符集与校对规则的支持,字符集是一套符号和编码,其中包含了编码规则以定义字符如何被编码为数字。 在字符比较时,所有字符串都按校对规则进行比较。校对规则是一套比较序列的规则,它定义了字符的排序顺序,以及管理单个字符和字符串如何与其它值进行比较。 可用下面的语句显示可用的字符集: mysql SHOW CHARACTER SET; 一个给定的字符集可以有几个校对规则可用。这使得同一个字符集可以选择不同的排序顺序。 mysql SHOW COLLATION LIKE latin1%;,63,二进制类型,下面列举了二进制数据类型: BINARY VARBINARY 除了这些类型,MySQL还支持很多BLOB类型。,64,什么是BLOB?,BLOB是一种可变长度的非结构化的二进制数据集合。 通常地,BLOB是图像、语音或其它多媒体对象。 BLOB术语是二进制大对象(Binary Large Object)的字首缩写。 MySQL支持的BLOB类型有以下几种: TINYBLOB BLOB MEDIUMBLOB LONGBLOB,65,时间数据类型,MySQL提供了用来存储不同类型时间信息的数据类型。 TIME类型 用于存储时间部分的信息 YEAR类型 用两位数字或四位数字格式表示年,缺省的是四位数字格式 DATE类型 用于存储完整的日历日期 DATETIME类型 存储日期与时间信息 TIMESTAMP类型 与DATETIME一样存储日期和时间,66,时间数据类型总结,67,NULL的含义,在SQL中,NULL值是一个特殊的值,表示无法计算或未知的值。 对于可为NULL的列,出现NULL值有不同的含义。所有原因都可以归为两类: 未 知 不可用,68,何时使用NULL,在数据库设计的开始阶段,如果某列中有些数据是不可用的,这时需要详查并决定是否允许NULL值。同时,对已有的表,如果发现的问题是由于列中出现了NULL值引起的,可以修改表的定义以允许NULL值。 例如: LifeExpectancy FLOAT(3, 1) DEFAULT NULL 在MySQL中,列缺省是可以为NULL的(除了TIMESTAMP列),除非特定声明它不能为NULL。,69,何时不用NULL,有时,可能不允许列为NULL,通常的情况是当该列为主键时。 作为主键列缺省是不能为NULL的,TIMESTAMP列也是不能为NULL的。另外,可以使用NOT NULL来声明该列不为NULL。 例如: Name CHAR(35) NOT NULL IsOfficial ENUM(T, F) NOT NULL DEFAULT F,70,第五章 SQL表达式,目 标,使用表达式组件 在表达式中使用数值、字符串和时间值,72,SQL表达式的组件,表达式通常出现在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.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,数字表达式,数字可以是精确值直接量或近似值直接量。精确值直接量是不带指数的,而近似值直接量是用带指数的科学记数法表示的。 精确值数字是整数值或小数值。 近似值直接量表示为浮点数(像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 测试字符串是否在该值的范围内,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,字符串比较里的大小写敏感,字符串表达式包含了来自于特定字符集中的字符,它与字符集里可用的一个校对规则(排列顺序)相关联。 字符由单字节或多字节组成,而校对规则可能是大小写不敏感的或大小写敏感的。 直接量字符串的缺省字符和校对规则依赖于系统变量character_set_connection与collation_connection的值。缺省的字符集是latin1,缺省的校对规则是latin1_swedish_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模式匹配,有时有必要找到类似的值,而此时模式匹配将非常有用。 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,使用正则表达式来进行模式匹配,还有一个更强大的模式匹配运算符:REGEXP或RLIKE。 LIKE与RLIKE的区别是RLIKE的模式是正则表达式。使用正则表达式,你可以测试复杂的模式,例如: URL IP地址 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; 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 1139 (42000): Got error trailing backslash () from regexp mysql SELECT RLIKE ; mysql SELECT RLIKE ;,82,时间表达式,可通过以下方式来产生时间值: 从已有的DATE、DATETIME或TIME列复制数据。 执行内置的函数返回一个DATE、DATETIME或TIME列。 构建一个由服务器来执行的时间数据的字符串表达式。,83,时间表达式,日期组件: DATE YYYY-MM-DD TIME HH:MM:SS DATETIME YYYY-MM-DD HH:MI:SS TIMESTAMP YYYY-MM-DD HH:MI:SS DAY DD MONTH MM QUARTER Q YEAR YYYY,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服务器通过执行存储、检索与操作数据行来管理数据。行是包含在表中,而表是包含在数据库中。 MySQL使用文件系统的一个目录来表示一个数据库,这种目录被称作数据库目录。 对于一个特定的MySQL服务器,它所有的数据库目录都有一个共同的父目录:data目录。,88,设计实践,当设计数据库时,要考虑两件重要的事情: 存储的信息:要保存什么样的信息? 要问的问题:发送到数据库的查询。 为了实践良好的设计,可以运用不同的MySQL技术: 键 用于标识唯一的数据 标准化 精炼数据库表以提高效率的过程 建模 数据库结构的图形表示,89,键,超键(Super Key)即表中的一组列,用来唯一标识表中的一行。 候选键(Candidate Key)是一个能标识一行的最小列组。 主键(Primary Key)就是一个候选键,被设计(或创建)为精确定义一个唯一的行。 表中的主键能够被另一个表所引用,从而连接两个表。引用键被称作外键(Foreign Key)。 使用键的好处: 降低查找时间 强化每行的唯一标识 主键不能包含NULL(未知或空值),90,键的示例,91,常见的图表系统,实体关系图ERD是一个很常见的数据模型或图表,用于数据模型概念的高级描述,它还提供了表示这类模型数据的图形表示。 这类模型通常被用于信息系统设计的第一阶段;例如,在需求分析中,它们被用于描述所需的信息和/或要被保存在数据库里的信息类型。,92,基本的ERD关系符号,93,标准化,在关系型数据库设计中,标准化是细化数据库设计的过程,以此确保每个独立的信息块仅被存放在一个地方(除外键外)。 对于复杂表的标准化,通常是将其分解为一系列的小表。该过程将删除行里的冗余组以及列里的重复数据。 为什么要标准化? 消除冗余数据 消除列与键的无关性 隔离独立的多重关系,94,world数据库标准化的实例,其中有一个表是CountryLanguage。为什么语言不包含在Country表里?因为不同国家里可能有多种语言 增加更多的列到Country表结构里将导致效率低下 同样,还有只适合于语言自身的详细信息可能与国家的其他信息没有任何关系(例如,官方语言、讲每种语言的人口百分比) 在创建该表时,标准化的目的达到了,因为它包含的信息只保存在一个地方,并且通过主键与其他表关联,95,标准的样式,标准化有许多级别,每个连续的级别都对数据的修改、异常的消除提供了强有力的保障。 第一标准样式(1NF) 第二标准样式(2NF) 第三标准样式(3NF),96,一对多关系,标准化数据库的最积极结果之一是产生了表之间的关系。World数据库也有这种关系的实例: 一个国家对多种语言 一个国家对多个城市,97,标识符,标识符是一个别名、数据库、表、列或索引的简单名称。 标识符可以是非引用的或引用的。如果是非引用的,它必须遵循以下规则: 标识符可以包含所有文字数字字符、下划线(_)和美元符号($) 标识符可以以任何合法的字符,甚至数字开始 标识符不能全部为数字 标识符可以被引用,98,将保留单词作为标识符,保留单词是特殊的标识符。例如,函数名称、表名或列名均不能被用作标识符,否则会出现错误。 例如: 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 UNIQUE, 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 FROM Country; mysql SELECT Country.Name FROM Country; mysql SELECT world.Country.Name FROM world.Country;,101,创建数据库,可使用CREATE DATABASE(SCHEMA)语句创建一个新的数据库。 mysql CREATE DATABASE mydb; 如果想确认数据库是否存在,可增加IF NOT EXISTS子句: mysql CREATE DATABASE IF NOT EXISTS mydb; CHARACTER SET与COLLATE为数据库分配缺省的字符集与校对规则。 mysql CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_danish_ci; 数据库的缺省字符集与校对规则信息保存在数据库目录下的db.opt文件中。,102,创建数据库,创建数据库并不影响当前的数据库作为缺省库。为了选择新的数据库为缺省数据库,应执行USE语句: mysql USE mydb; SHOW CREATE DATABASE可显示CREATE DATABASE语句: mysql SHOW CREATE DATABASE world G,103,修改数据库,ALTER DATABASE语句可修改已有数据库的选项。 mysql ALTER DATABASE mydb COLLATE utf8_polish_ci; mysql ALTER DATABASE mydb CHARACTER SET latin1 COLLATE utf8_polish_ci; ALTER DATABASE里的数据库名是可选的。 不能使用ALTER DATABASE来修改数据库名称。只有一个方法可以改变名称: 备份数据库。用新的名称创建新的数据库,然后装载数据,最后删除旧的数据库。,104,删除数据库,当不再需要某个数据库时,可以使用DROP DATABASE语句删除它: mysql DROP DATABASE mydb; 为了避免因数据库不存在而产生错误,可以使用IF EXISTS子句; mysql DROP DATABASE IF EXISTS mydb; DROP DATABASE不需要数据库为空。当删除一个数据库时,MySQL将删除它包含的所有对象,例如表、存储过程、触发器等等。 一个数据库是data目录下的一个子目录来表示。服务器只删除它能识别的由自己创建的文件与目录(例如,.frm文件或RAID目录),它不会删除其他的文件与目录。,105,第七章 表,目 标,创建表 修改表 清空表 删除表 分配与使用外键,107,创建表,创建表的语法如下,其中包括各种列与表的选项: CREATE TABLE ( , , ) 例如: mysql CREATE TABLE CountryLanguage ( - CountryCode CHAR(3) NOT NULL, - Language CHAR(30) NOT NULL, - IsOfficial ENUM(True,False) NOT NULL DEFAULT False, - Percentage FLOAT(3,1) NOT NULL, - PRIMARY KEY (CountryCode, Language) - ) - ENGINE = MyISAM - COMMENT = Lists Language Spoken;,108,表的属性,选项可用于在CREATE TABLE语句中定义该表的全局行为。定义的格式为: = 几个常用的表选项: ENGINE = COMMENT = DEFAULT CHARSET SET | CHARSET = DEFAULT COLLATE = 表的选项实例 CREATE TABLE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论