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

下载本文档

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

文档简介

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

2、michael “monty” widenius在瑞典创办的。在2008年初,sun microsystems收购了mysql ab公司。在2009年,oracle收购了sun公司,使mysql并入oracle的数据库产品线。4mysql数据库产品数据库产品mysql数据库是公认的简单易用、高性能及高可靠性的产品。mysql企业服务器mysql社区服务器mysql嵌入数据库mysql集群5mysql图形用户界面(图形用户界面(gui)工具)工具mysql gui工具为mysql数据库提供了一组丰富的图形用户界面。mysql移植工具包mysql administratormysql query

3、browser6mysql驱动程序驱动程序mysql数据库驱动程序(也称作连接器),为多种编程语言提供数据库客户端的连接。mysql包括以下连接器:mysql c apimysql连接器/odbcmysql连接器/jmysql连接器/netmysql连接器/php7嵌入式嵌入式mysql解决方案解决方案mysql还提供了库文件,用来将mysql数据库服务器嵌入到程序中。libmysqldmysql mxj8安装安装mysql推荐到mysql网站的下载网页:http:/ downloads/下载mysql数据库服务器。这里有多种支持的平台,并且每个版本都有不同的安装说明。在windows中安装m

4、ysql服务器9安装安装“world”数据库数据库mysql提供了三个数据库示例,以用于测试数据库特征及培训。下载地址为:http:/ 创建“world”数据库mysql create database world;2. 选择“world”数据库mysql use world;3. 构建“world”数据库的表mysql source c:/world.sql10mysql客户端客户端-服务器模型服务器模型在网络环境中,mysql采用客户端/服务器架构进行工作。mysql的安装包括以下主要部件: mysql服务器客户端程序mysql非客户端工具11mysql客户端客户端-服务器模型服务器模型1

5、2第二章第二章 mysql客户端客户端目目 标标在mysql客户/服务器体系结构中调用客户端程序使用mysql客户端程序14调用客户端程序调用客户端程序mysql客户端程序可以从命令行调用。当客户端程序被调用时,可以通过在程序名后指定选项来控制它的行为。选项也可以在选项文件中定义。shell mysql helpshell mysql -version15通用命令选项语法通用命令选项语法mysql程序选项具有以下两种通用形式:长选项,由单词之前加两个减号组成短选项,由单个字母之前加一个减号组成shell mysql -versionshell mysql -v一些选项是要赋值的。例如:shel

6、l mysql -host=shell mysql -h shell mysql -16建立连接的选项建立连接的选项17mysql用户身份选项用户身份选项-user=“用户名”或 u “用户名”-password=“密码值”或 p“密码值”18如何指定连接参数如何指定连接参数用缺省主机名和用户名(没有密码)连接服务器:shell mysql使用用户名“myname”连接本地主机服务器,让mysql提示用户输入密码:shell mysql -host=localhost -password -user=myname与上例使用相同的选项,但使用相应的短选项形式:shell mysql -h loc

7、alhost -p -u myname19交互式使用交互式使用mysqlmysql客户端程序可以交互式地使用,或以批处理模式从文件中读取查询。交互式模式对日常使用是非常有用的,例如快速的sql语句处理,以及测试sql语句是如何工作的。对运行保存在文本文件中的sql语句(也称为sql脚本),批处理是很有用的。例如:mysql select version(); 或shell mysql -u user_name -ppassword -e select version() 20语句结束符语句结束符有多个结束符可用于终结语句:mysql select version(), database();m

8、ysql 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 = in

9、d - and population 3000000; 如果一条语句导致错误,mysql将显示服务器返回的错误信息:mysql this is an invalid statement;如果想要终止一条正在编写的语句,可键入c。为了退出mysql,可使用q、quit或exit:mysql q 22mysql提示符提示符23mysql提示符提示符为了重新定义“mysql”提示符,可使用prompt命令;mysql prompt win 1win 1在提示符中放入当前信息,诸如用户、主机和数据库;mysqlprompt (uh) dprompt set to (uh) d(rootlocalhos

10、t) world为了将提示符转换为缺省形式,应输入不带参数的prompt命令或r。(rootlocalhost) worldpromptreturning to default prompt of mysqlmysql24在在mysql中使用编辑键中使用编辑键mysql客户端支持输入行的编辑,这使得它可以回调以前的输入行并可以进行编辑。在unix/linux上,它还支持“tab”完成键,从而可以更容易地输入查询。四个方向键在unix下,mysql客户端拥有全部的readline功能会话期间命令历史的保存25在在mysql中使用脚本文件中使用脚本文件一个包含sql语句并将要被执行的输入文件叫做脚

11、本文件或sql批处理文件。处理脚本文件的方法之一是用source命令在mysql中执行它:mysql source input_file例如:mysql source c:/scripts/my_commands.sqlmysql source ./scripts/my_commands.sql26客户端命令与客户端命令与sql语句语句当mysql在运行中发布一条sql语句时,程序将该语句发送到mysql服务器来执行。select、insert、update和delete都是这类输入的示例。mysql也会知道其中哪些是自己的命令而非sql语句。例如:quitsourcestatushelp27

12、第三章第三章 表数据查询表数据查询目目 标标使用select语法执行基本的、单个表的查询聚集查询结果使用union关键字连接多个select语句的结果29select语句语句select语句主要被用于查询数据库中的一个或多个表里的数据。select语句表示数据库中一组特定的数据记录。select语句的基本的语法模式如下:select from 例如:mysql select name from country;mysql select 1+2; 30基本的基本的select使用使用许多子句及它们的结合都可以用于select语句中:from:指定从哪些表中获取数据distinct:消除重复的记录

13、行where:只返回满足特定条件(也叫过滤器)的记录行order by:按照表达式列表排序记录limit:返回特定部分的数据,而不是所有的结果集示例:select distinct from where order by limit 31使用使用fromfrom子句在select语句中是可选项,它出现在语句的表达式之后,而表达式是在select关键字后面出现。from子句指定语句要处理的表。非限定表名from 例如:from country限定的表名from .例如:from world.country表的别名在sql语句里,在from子句里引用的表可以给定一个临时的名称,该名称叫做表的别名。

14、 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使用使用wherewhere子句将过滤满足特定条件的记录。例如:mysql

15、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

16、, 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来明确指定记录按升序或降序排列

17、。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_countlimit skip_count, row_count例如:mysql s

18、elect 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聚集查询结果聚集查询结果有可能出现这种情况,结果集里的一行对应

19、于底层基表里的一组记录行。这个过程叫聚合,并且这样一个结果集被称为聚集。计算一组值的摘要值的函数(例如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;

20、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 gov

21、ernmentform, group_concat(name) as countries - from country - where continent = south america - group by governmentformg41带带with rollup的分组的分组可在group by子句里使用with rollup修饰符来产生多个级别的统计值。例如:mysql select continent, sum(population) as pop - from country - group by continent - with rollup;mysql select conti

22、nent, avg(population) as avg_pop - from country - group by continent with rollup;42havinghaving子句被用于消除基于聚集值的记录行。例如:mysql select continent, sum(population) as pop - from country - group by continent - having sum(population) 100000000;43使用使用unionunion关键字能够将两个或多个select语句的结果连接起来。其语句是:select unionselect

23、缺省地,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

24、 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 -(sele

25、ct 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_na

26、me, email from list3 order by email limit 5);46第四章第四章 数据类型数据类型目目 标标描述三个主要类别的数据类型理解字符集与校对规则分配合适的数据类型给表实体理解null与not null的含义与使用48数据类型概述数据类型概述在mysql中,可用的数据类型共分为四个主要类别:数值数字值(整数、浮点、定点数、位字段值)字符文本字符串二进制二进制数据字符串时间时间和日期abc的数据类型a) apt b)briefc)complete49使用数据类型创建表使用数据类型创建表创建表时,每个列的声明包括列名、识别该列保存信息的数据类型以及可能的其它属性(

27、选项)以用来明确定义mysql如何处理该列。例如:mysql create table people ( id int, first_namechar(30), last_name char(30) );50数值数据类型数值数据类型为了保存数值数据,mysql提供以下类型:整数类型:保存整数数字浮点类型:保存近似数值数据定点类型:保存精确数值位类型:保存位字段数值当选择一个数值数据类型时,应考虑以下因素:数据类型数值的范围列值所需要的存储空间数量列的精度和标度(适用于浮点和定点数)51整数类型整数类型以下列表是mysql支持的整数数据类型:tinyint smallint mediumint

28、int或integerbigint 例如:population int(11)52浮点类型浮点类型浮点数据类型包括float和double。它们都被用来表示近似数值数据,包含整数部分、小数部分或二者都有。floatdouble对于float和double,如果列可以为null,则缺省值是null,如果列不能为null,其缺省值是0。53浮点类型浮点类型float数据类型可以用以下不同的表示法来指定:不指定精度:float使用二进制精度:float (m)指定总的数字位数与小数部分的数字位数:float (d,f)没有任何精度:double指定数值的位数与小数部分位数:double(d,f)例如

29、: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列可以用数字表达式赋值。例如,b1111等于15,b1000000等于64。 56字符串数据类型字符串数据类型以下列

30、出了mysql提供的字符串数据类型。所有这些类型都可用于保存非结构化格式的字符串:char 固定长度字符串varchar 可变长度字符串text 可变长度字符串mysql还定义了两种结构化字符串类型:enum 由一组固定的有效值组成的枚举set 由一组固定的有效值组成的集合57char类型类型定义一个列为char数据类型的语法如下:char(l)l代表char值可以接受的最大的字符数。char列的每个值都将占用l个字符,即使该值不需要整个可用的长度。58varchar类型类型这种数据类型被用来存储可变长度的字符串。其定义的语法是:varchar(l)例如:language varchar(30

31、)countrylanguage表中的某个实例值只使用25个字符,尽管允许30个字符:southern slavic languages59文本类型文本类型文本类型由一组非结构化的、可变长度的字符串组成,它最适合于存储访问频率低且相当大的字符串。tinytexttextmediumtextlongtext60enum类型类型enum类型是一个枚举数据类型。语法enum(value1,vauln)示例continent enum(asia,europe,north americal,africa,oceania,antarctica,south american)61set类型类型set类型可以

32、从给定的列表中选择将多个值组合为一个有效的值。语法set(value1,valuen)示例special_features set (trailers, commentaries, deleted scenes, behind the scenes)62字符集与校对规则的支持字符集与校对规则的支持字符集是一套符号和编码,其中包含了编码规则以定义字符如何被编码为数字。在字符比较时,所有字符串都按校对规则进行比较。校对规则是一套比较序列的规则,它定义了字符的排序顺序,以及管理单个字符和字符串如何与其它值进行比较。可用下面的语句显示可用的字符集:mysql show character set;一个

33、给定的字符集可以有几个校对规则可用。这使得同一个字符集可以选择不同的排序顺序。mysql show collation like latin1%;63二进制类型二进制类型下面列举了二进制数据类型:binaryvarbinary除了这些类型,mysql还支持很多blob类型。64什么是什么是blob?blob是一种可变长度的非结构化的二进制数据集合。通常地,blob是图像、语音或其它多媒体对象。blob术语是二进制大对象(binary large object)的字首缩写。mysql支持的blob类型有以下几种:tinyblobblobmediumblob longblob65时间数据类型时间数

34、据类型mysql提供了用来存储不同类型时间信息的数据类型。time类型 用于存储时间部分的信息year类型 用两位数字或四位数字格式表示年,缺省的是四位数字格式date类型 用于存储完整的日历日期datetime类型 存储日期与时间信息timestamp类型 与datetime一样存储日期和时间66时间数据类型总结时间数据类型总结67null的含义的含义在sql中,null值是一个特殊的值,表示无法计算或未知的值。对于可为null的列,出现null值有不同的含义。所有原因都可以归为两类:未 知不可用68何时使用何时使用null在数据库设计的开始阶段,如果某列中有些数据是不可用的,这时需要详查并

35、决定是否允许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 nullisofficial en

36、um(t, f) not null default f70第五章第五章 sql表达式表达式目目 标标使用表达式组件在表达式中使用数值、字符串和时间值72sql表达式的组件表达式的组件表达式通常出现在select、delete或update语句的where子句里,用来表示要获取、删除或修改的记录。表达式也可以被用于许多其他地方,例如,select语句输出列的列表中、order by或group by子句中。表达式由直接量(数字、字符串、日期与时间)、内置的常量(例如null、true与false)、表的列引用及函数调用组成。73sql表达式示例表达式示例下列语句使用表的列从country表里获取

37、国家的名称与人口: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 in

38、creasing) 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将字符串转换为数字并执行数字

39、操作: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_

40、as_concat被启用后,“|”将产生字符串连接: mysql set sql_mode = pipes_as_concat;mysql select abc | def;77字符串比较里的大小写敏感字符串比较里的大小写敏感字符串表达式包含了来自于特定字符集中的字符,它与字符集里可用的一个校对规则(排列顺序)相关联。字符由单字节或多字节组成,而校对规则可能是大小写不敏感的或大小写敏感的。直接量字符串的缺省字符和校对规则依赖于系统变量character_set_connection与collation_connection的值。缺省的字符集是latin1,缺省的校对规则是latin1_swed

41、ish_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

42、使用使用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

43、 united%;80使用正则表达式来进行模式匹配使用正则表达式来进行模式匹配还有一个更强大的模式匹配运算符: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

44、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 regexpmysql select rlike

45、 ;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 ddmonthmmquarterqyearyyyy84时间表达式时间表达式为了执行内部的计算,可使用interval关键字与一个单元值

46、。例如: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服

47、务器,它所有的数据库目录都有一个共同的父目录:data目录。88设计实践设计实践当设计数据库时,要考虑两件重要的事情:存储的信息:要保存什么样的信息?要问的问题:发送到数据库的查询。为了实践良好的设计,可以运用不同的mysql技术:键 用于标识唯一的数据标准化 精炼数据库表以提高效率的过程建模 数据库结构的图形表示89键键超键(super key)即表中的一组列,用来唯一标识表中的一行。候选键(candidate key)是一个能标识一行的最小列组。主键(primary key)就是一个候选键,被设计(或创建)为精确定义一个唯一的行。表中的主键能够被另一个表所引用,从而连接两个表。引用键被称作

48、外键(foreign key)。使用键的好处:降低查找时间强化每行的唯一标识主键不能包含null(未知或空值)90键的示例键的示例91常见的图表系统常见的图表系统实体关系图erd是一个很常见的数据模型或图表,用于数据模型概念的高级描述,它还提供了表示这类模型数据的图形表示。这类模型通常被用于信息系统设计的第一阶段;例如,在需求分析中,它们被用于描述所需的信息和/或要被保存在数据库里的信息类型。92基本的基本的erd关系符号关系符号93标准化标准化在关系型数据库设计中,标准化是细化数据库设计的过程,以此确保每个独立的信息块仅被存放在一个地方(除外键外)。对于复杂表的标准化,通常是将其分解为一系列

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

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

51、名或列名均不能被用作标识符,否则会出现错误。例如: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

52、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 fr

53、om 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 cre

54、ate 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 g103修改数据库修改数据库alter database语句可修改已有数据库的选项。mysql alter da

55、tabase 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;为了避免因数据库不存在而产生错误,可以使用

56、if exists子句;mysql drop database if exists mydb;drop database不需要数据库为空。当删除一个数据库时,mysql将删除它包含的所有对象,例如表、存储过程、触发器等等。一个数据库是data目录下的一个子目录来表示。服务器只删除它能识别的由自己创建的文件与目录(例如,.frm文件或raid目录),它不会删除其他的文件与目录。105第七章第七章 表表目目 标标创建表修改表清空表删除表分配与使用外键107创建表创建表创建表的语法如下,其中包括各种列与表的选项:create table ( , ,)例如:mysql create table cou

57、ntrylanguage ( - 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语句中定义该表的全局行为

58、。定义的格式为: = 几个常用的表选项:engine = comment = default charset set | charset = default collate = 表的选项实例create table countrylanguage( )engine myisamcomment list language spokecharset utf8collate utf8_unicode_ci;109列的选项列的选项几个常见的列选项:null与not null default auto_increment110约约 束束约束是一个规则,它定义了对存储在表中的各行的特殊限制。约束常被用来保

59、护数据库的一致性。约束的类型:primary key uniqueforeign key列和约束选项的实例:mysql create table city ( - id int not null auto_increment, - name char(35) not null default “, - countrycode char(3) not null default “, - district char(20) not null default “, - population int not null default 0, - primary key (id), - foreign k

60、ey (countrycode) references country(code) - ) engine=myisam charset=latin1;111show create tableshow create table语句可用于获取已有表的结构描述文本。mysql show create table cityg112基于已有的表创建新表基于已有的表创建新表mysql提供了两种基于一个表创建另一个表的方法:create tableas selectcreate tablelike113create tableas select根据select语句的返回结果,创建一个空表或非空的表:例如:m

温馨提示

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

评论

0/150

提交评论