MySQL经典之讲.ppt
1,MySQL数据库,2,MySQL数据库,数据库导论MySQL数据类型MySQL运算符SQL语句MySQL数据库管理,3,数据库导论,基本概念MySQL数据库建立与终止数据库的连接,4,基本概念,数据(Data)数据库(Database)数据库管理系统(DBMS)数据库系统(DBS),5,数据(data),数据的定义:描述事物的符号记录。在日常生活中,人们直接用语言来描述事物;在计算机中,为了存储和处理这些事物,就要将事物的特征抽象出来组成一个记录来描述。数据是数据库中存储的基本对象。数据的种类文字、图形、图象、声音数据的特点数据与其语义是不可分的,6,数据举例,学生档案中的学生记录(李明,男,1972,江苏,计算机系,1990)数据的形式不能完全表达其内容数据的解释语义:学生姓名、性别、出生年月、籍贯、所在系别、入学时间解释:李明是个大学生,1972年出生,江苏人,1990年考入计算机系请给出另一个解释和语义,7,数据库,人们收集并抽取出一个应用所需要的大量数据之后,并将其保存起来以供进一步加工处理,进一步抽取有用信息数据库的定义:数据库(Database,简称DB)是长期储存在计算机内、有组织的、可共享的大量数据集合,8,什么是数据库?,档案柜=数据库抽屉=表文件=记录在数据库中,称装有文件的抽屉为表,文件本身为记录,取出信息的行为称为查询,结果数据称为结果集合。,9,数据库的类型,纯文本数据库:纯文本数据库是只用空格符、制表符和换行符来分割信息的文本文件。适用于小型应用,对于大中型应用来说它存在诸多限制:只能顺序访问,不能进行随机访问。查找数据和数据关系或多用户同时访问进行写操作时非常困难。关系数据库:由于纯文本数据库存在诸多局限,所以人们开始研究数据模型,设计各种类型的使用方便的数据库。在数据库的发展史上,最具影响的数据库模型有:层次模型、网状模型和关系模型。其中,关系模型是目前应用最广泛和最有发展前途的一种数据模型,其数据结构简单,当前主流的数据库系统几乎都采用关系模型。,10,数据库(举例),11,数据库(续),数据库的特征数据按一定的数据模型组织、描述和储存可为各种用户共享冗余度较小数据独立性较高易扩展,12,数据库管理系统,什么是DBMS:数据库管理系统(Database Management System,简称DBMS)是位于用户与操作系统之间的一层数据管理软件。DBMS的用途:科学地组织和存储数据、高效地获取和维护数据。,13,DBMS的主要功能,数据定义功能:提供数据定义语言(DDL)定义数据库中的数据对象数据操纵功能:提供数据操纵语言(DML)操纵数据实现对数据库的基本操作(查询、插入、删除和修改),14,DBMS的主要功能,数据库的运行管理 保证数据的安全性、完整性、多用户对数据的并发使用 发生故障后的系统恢复数据库的建立和维护功能(实用程序)数据库数据批量装载 数据库转储 介质故障恢复 数据库的重组织 性能监视等,15,数据库系统,什么是数据库系统:数据库系统(Database System,简称DBS)是指在计算机系统中引入数据库后的系统构成。在不引起混淆的情况下常常把数据库系统简称为数据库。数据库系统的构成:由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员(和用户)构成。,16,MySQL数据库,一、什么是MySQL?MySQL是一个真正的多用户、多线程SQL数据库服务器。SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言。MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。,17,SQL是一种标准化的语言,它使得存储、更新和存取信息更容易。例如,你能用SQL语言为一个网站检索产品信息及存储顾客信息,同时MySQL也足够快和灵活以允许你存储记录文件和图像。MySQL主要目标是快速、健壮和易用。最初是因为我们需要这样一个SQL服务器,它能处理与任何在不昂贵硬件平台上提供数据库的厂家在一个数量级上的大型数据库,但速度更快,MySQL就开发出来。自1996年以来,我们一直都在使用MySQL,其环境有超过40个数据库,包含10,000个表,其中500多个表超过7百万行,这大约有100个吉字节(GB)的关键应用数据。,18,MySQL建立的基础是业已用在高要求的生产环境多年的一套实用例程。尽管MySQL仍在开发中,但它已经提供一个丰富和极其有用的功能集。MySQL的官方发音是“My Ess Que Ell”(不是MY-SEQUEL)。,19,MySQl特征,性能:在RDBMS中,速度就是一切。甚至MySQL的最激烈的批评家都会承认MySQL非常迅速,有时主要指令的执行比他的竞争者都要快。容易使用:MySQL易于使用,初学者在几个小时就可以领会它的基本知识,并且能得到很好的支持;,20,可靠性:大多数情况下,高级数据库的性能是以降低可靠性为代价的。然而MySQL不是这样,它提供了最大可靠性和正常运行时间,并且在大量要求严格的应用系统中已得到测试和认证。,21,多用户支持:MySQL是一个完全多用户系统,这意味着多个用户可以同时访问和使用一个(或更多个)MySQL数据库。MySQL也包括一个强有力的、灵活的权限系统,它允许管理者使用基于用户和基于主机的认证方案的组合来限制对敏感数据的访问。可移植性:MySQL对UNIX和非UNIX操作系统都适用。,22,遵循现有标准:MySQL的发展工作组试图使MySQL尽量适应标准。MySQL4.0支持ANSI SQL-99标准的大部分重要特性,而且支持在未来版本中希望增加的标准。国际化MySQL特征:MySQL是一个被全球很多国家数百万人使用的系统。,23,开放源代码:MySQL开发者MySQL AB是开放源代码运动的坚定支持者,并且MySQL软件可在GPL下畅通使用。用户可以免费下载和修改符合他们需要的应用程序的源代码,并且可以免费使用它来增强自己的应用程序。,24,三、MySQL应用,MySQL的官方网站引述MySQL是“世界上最受欢迎的开放源代码数据库”。这不是狂妄之语,数字可以证明它:根据MySQL网站上最近公布的统计,全世界有超过400万的系统使用MySQL。在下述网页你能查看到MySQL和它竞争对手进行了短兵相接的比较。http:/,25,随着网站以及基于WEB分布式应用程序变得越来越复杂,有效管理数据来改善处理效率、降低响应时间和提高用户的全面技能变得越来越重要。很多原因让MySQL正合需要。经过证实的记录让它的可靠性和寿命得到保证,开放源代码的根本能够确保迅速调整缺陷和性能持续增强的周期(成本低)对不同编程语言和技术的可移植性和支持,使它适应多种应用程序。,26,MySQL新支持的特性,储存过程 预先定义的SQL语句序列,他们被编译和存储在数据库内以求更有效地执行触发器 当一个特定事件发生变化时自动执行的数据库操作。视图 源于现在表内容的虚表,它能够与标准表完全相同的方式执行操作。,27,四、MySQL体系结构,主子系统:MySQL体系结构由5个主子系统组成,他们协同工作,响应MySQL数据库服务器发出的请求。5个主子系统如下:查询引擎存储管理器缓冲管理器事务管理器恢复管理器,28,查询引擎:包括3个相互关联的部件语法分析器查询优化器执行部件存储管理器:存储管理器与操作系统(OS)相互配合,有效地向磁盘存入数据。MySQL能够在内存中存储结果集合本身,因而完全回避了搜索数据库的需要。查询高速缓冲存储器。,29,缓冲管理器:这个子系统负责处理所有在查询引擎和存储管理器数据请求中引起的内存管理问题。当新的记录在等待目标表和索引使用时,也可以存储在缓冲管理器中。如果需要新的数据,要先从存储管理器中取出数据,放置在缓冲管理器中,然后发送到查询引擎。,30,事务管理器:事务管理器的功能是促进数据访问的并发性。这个子系统提供一个加锁工具,保证同时访问的多个用户协调地访问数据,不会以任何方式破坏或者损坏数据。恢复管理器:恢复管理器的工作是防止数据丢失,保存数据副本以备后来提取。它还负责把数据库中修改数据和其他重要事件的指令记入日志文件。到目前为止只有InnoDB和BDB表处理程序系统有恢复管理功能。,31,MySQL体系结构,子系统/部件相互作用和控制流查询引擎要求从缓冲管理器读取数据或者把数据写入缓冲管理器以满足用户的查询。它依赖事务管理器请求锁定数据才能保证并发性。要生成和删除表,查询引擎要直接访问存储管理器以生成或者删除文件系统中的文件,而不用访问缓冲管理器。缓冲管理器高速缓存来自存储管理器中的数据,查询引擎就可以有效地取回数据。在执行任何修改操作之前,检查数据的锁定状态依赖于事务管理器。,32,五、MySQL引擎,连通性:MySQL是在假定它的大部分应用程序都在运行TCP/IP协议的基础上而设计的。SQL:结构化查询语言(SQL)是一个开放标准,自1986年以来,它一直由美国国家标准协会(ANSI)进行维护。虽然这个标准在不同厂商的支持程度不同,但是可以很公正地说,SQL是当今使用最广泛的语言之一。与其他系统的SQL实现一样,比如Oracle的SQL,MySQl也具有自己的SQL标准变体,它添加了强大的性能,超过了在这个标准之内可用的性能。,33,事务:直到最近,MySQL 才以处理事务的能力而出名。事务数据库必须支持以下特性:原子性一致性分离性持久性,34,事务被定义为一个或者一系列可以访问或改变数据库内容的动作。在SQL术语中,当一个或者更多的SQL语句作为一个单元运行时,一个事务就发生了。在这样一个单元中,每一个SQL语句都与其他的SQL语句相互依赖。银行举例,35,一致性:当每一个事务使得系统处于一致状态时,不管事务是成功还是失败,一致性都会存在。在MySQL中,一致性主要由MySQL日志机制来处理,它记录了对数据库所做的所有改变,并且为事务恢复提供检查跟踪依据。如果系统在事务执行中途关机,MySQl恢复程序将使用这些日志来检查事务是否顺利完成,必要时回滚。分离性:分离性意味着每个事务在各自的空间内发生,与系统内可能发生的其他事务相互独立,而且还意味着组成事务的全部事件序列完全被执行后,事务的结果才可见。,36,持久性:持久性意味着即使在系统崩溃时,也要保存已提交的事务所做的改变。默认情况下,InnoDB表对崩溃前最后1秒的数据变化情况有100%的持久性。,37,安全性,访问一个MySQL数据库的过程可以分解成2个任务:连接MySQL服务器和访问个别对象,比如表和列。MySQL有一个内建的安全性来检查两个阶段上用户的可信度。可以用ssh来实现数据传输的安全性。,38,MySQL通过用户表管理用户认证,用户表不仅核查用户是否使用适当的用户名和密码,而且还核查连接是否来自一个授权的TCP/IP地址。一旦用户被连接,系统管理员就会给予用户在对象和MySQL中实施的行为上的用户专有权利。例如:A表只有甲用户能查询,乙用户能来修改。,39,复制,复制是一种数据发布机制,它允许在远距离的地方放置表和数据库的副本,以便用户可以更加方便地访问它们。,40,应用程序的接口,对应用程序开发者来说,MySQL提供了一个用C语言编写的客户端库和一组API(应用程序接口)。当前,MySQL API 对Perl,PHP,C/C+,Java,Visual Basic,Python,Ruby和.NET 都可用。,41,附加工具,MySQL CC 对于MySQL,它是一个极好的前端查询和数据库管理工具。现有Windows,UNIX和Linux版本可用,并且Mac OS X 的版本现在也有DBTOOL专业管理器,来自,是一个用于管理MySQL数据库、表和索引的图形客户,其输入来自其他RDBMS的数据,该管理器提供一个用于查询和报告设计的接口。,42,建立与终止数据库的连接,运行mysql程序mysql-h host_name-u user_name p password 其中:-h:后加主机名-u:后加用户名注意:如果使用的系统为linux并且登陆用户名字与MySQL的用户名相同即可不用加,默认以登陆名登陆但是两个用户名不同.默认是以root登陆,windows默认用户是ODBC.-p:加用户的密码 注意:密码如果写在命令行中时候一定不能有空格 备注:可以将启动命令设成别名,并放在.bash_profile文件中,43,:退出mysql的方法 exit,quit,ctrl+D:在linux中使mysqld自动运行的方法 1):setup 2):chkconfig 3):将K改成S(在几个文件内)4):ntsysv中进行设置,44,MySQL数据类型,数据类型种类数值列类型字符串列类型日期和时间列类型,45,数据类型种类,数值型分为整型和浮点型整型:可以由十进制和十六进制表示整数由数字序列组成,如:1,100。由十六进制表示方法:0 x且后面加19和AF 的任意数字或字母,并且0 x中的X不能大写。浮点型:浮点数由一个数字加一个小数点再加上一个数字组成。两个数字序列不能同时为空。,46,字符串:由单引号或者双引号括起来的字符或者数字。如:”abc”,abc10字符串中要用转义字符才能表示的特殊符号,47,日期和时间值是存储如”2005-1-1”或者”12:00:00”这样的数值的值。在MySQL中日期是按”年-月-日”的顺序。NULL值是一种无类型的值,表示”空,什么也没有”。,48,数值列类型,MySQL为除了NULL值外的所有通用数据类型提供了列类型。列类型是一种手段,通过这种手段可以描述表的列可以包含什么样类型的值。数值列类型 所有数值列类型的类型名及其说明和所占的字节数见下表:,49,50,数值列类型包括整型和浮点型 说明:TINYINT,SAMLLINT,MEDIUMINT,INT,BIGINT每个数据类型的取值范围不同,故分别可以表示不同的数值范围。在定义整型列时,可以指定可选的显示尺寸M(见上表),M是从1到255的值,它表示显示列中值的字符数。,51,例如:MEDIUMINT(4)意思是指定了一个具有4个字符显示宽度的MEDIUMINT列。如果定义了一个没有明确宽度的整数列,则会分配缺省的宽度,缺省值为每种类型的最长值的长度。对于每种浮点型,可指定一个最大的显示尺寸和小数位数D,M的取值应该是0-30,但不应该大于M-2。即M是精度,D是小数点位数,M和D对于DECIMAL是必须的。,52,数值列的列属性AUTO_INCREMENT 在需要产生唯一标志符号或者顺序值时候,可用此属性。值一般从1始,每行增加1,在插入NULL到一个AUTO_INCREMENT列时,MySQL会插入一个比该列中当前最大值大1 的值,一个表中最多能有一个有此属性的列。对于想使用此属性的列应该定义为NOT NULL,并定义为PRIMARY KEY 或者定义为UNIQUE键。举例:create table a(I int auto_increment not null primary key);UNSIGNED 此属性禁用负值,是将数值的取值范围从零开始,即前移了取值范围而已.举例:Create table test(num tinyint,num2 tinyint unsigned);,53,NULL和NOT NULL 缺省为NULL,即插入值时没有在此字段插入值,默认为NULL值,如果指定了NOT NULL,则必须在插入值时在此字段添入值。DEFAULT 可以通过此属性来指定一个缺省值,即如果没有在此列添加值,那么默认添加此值。如果指定了ZEROFILL 属性,则用前导零填充数值类型值以达到列的显示宽度。举例:Create table test2(num int,num2 int default 1,num3 int default null);,54,55,字符串列类型所有字符串列类型的类型名及其说明和所占的字节数见下表:,56,说明:对于可变长的字符串类型,其长度取决于实际存放在列中的值的长度。此长度在上表中用来表示。以外所需要的额外字节为存放该值的长度所需要的字节数。,57,CHAR和VARCHAR类型CHAR类型和VARCHAR类型长度范围都是0255之间的大小。他们之间的差别在于MySQL处理这个指示器的方式:CHAR把这个大小视为值的准确大小(用空格填补比较短的值,所以达到了这个大小),而VARCHAR类型把它视为最大值并且只使用了存储字符串实际上需要的字节数(增加了一个额外的字节记录长度)。因而,较短的值当被插入一个语句为VARCHAR类型的字段时,将不会用空格填补(然而,较长的值仍然被截短)。,58,59,BLOB和TEXT类型BLOB是可以存放任意大数据的数据类型,而TEXT与之相同,只是前者区分大小写,后者不区分大小写。ENUM 和SET类型是特殊的串类型,其列值必须从固定的串集中选择,二者差别为前者必须是只能选择其中的一个值,而后者可以多选。,60,字符串列类型的属性BINARY使用此属性可以使列值作为二进制串处理,即比较和排序时区分大小写。NOT 和NOT NULL同数值型功能相同DEFAULT同数值型功能相同,61,日期和时间列类型所有时间和日期列类型的类型名及其说明和所占的字节数见下表:,62,63,说明:每个时间和日期列类型都有一个零值,当插入非法数值时就用零值来添加表示日期时必须先按:年,月,日的顺序给出DATE,TIME,DATETIME分别是存储日期,时间与日期和时间的组合,其格式为”YYYY-MM-DD”,”hh:mm:ss”和”YYYY-MM-DD hh:mm:ss”,对于DATETIME类型,日期和时间部分都需要TIMESTAMP时间戳列类型以YYYYMMDDhhmmss的格式来表示值,其取值范围是到2037年的某个时间,主要用于记录更改或创建某个记录,64,65,66,67,MySQL运算符,算数运算符 比较运算符 逻辑运算符 位运算符,68,算数运算符,69,用字符串表示的数字在任何可能便于计算的地方都被自动地转换为字符串。当执行转换时,MySQL遵循两个基本规则:如果第一位是数字的字符串被用于一个算数运算中,那么它被转换为这个数字的值。如果一个包含字符和数字混合的字符串不能被正确的转换为数字,那么它被转换成0。,70,71,72,比较运算符 比较运算符允许我们对表达式的左边和右边进行比较。一个比较运算符的结果总是1(真),0(假),或是为NULL(不能确定)。比较运算符可以用于比较数字和字符串。数字作为浮点值比较,而字符串以不区分大小写的方式进行比较(除非使用特殊的BINARY关键字),73,74,对于运算符,如果表达式两边不相等返回真值,相等返回假值。还可以比较字符串,75,BETWEEN运算符 用于检验一个值(或者一个求值表达式)是否存在一个指定的范围内:,76,运算符用于检验一个值(或者一个求值表达式)是否包含在一个指定的值集合中。,77,还可以使用特殊的运算符,MySQL称之为”NULL安全的等于”运算符。这意味着即使当包含在比较运算符中的表达式含有一个NULL值时,在一个正常的偏差下,MySQL也会为比较运算符返回一个真值或假值。,78,如果想执行通配符数据搜索,应该使用LIKE运算符。它通过在表达式中允许使用专门的通配字符,可以找出与指定搜索字符串全部或部分匹配的记录。,79,默认情况下,比较是不区分大小写的方式执行的。然而,以前我们注意到,可以添加BINARY关键字让MySQL执行区分大小写的比较。,80,REGEXP运算符 允许我们执行更复杂的字符串比较运算,在这里使用UNIX正则表达式。,81,82,逻辑运算符,83,84,位运算符,如下表所示:“”表示按位取反。“”表示异或。,85,实例:,86,87,显示世界中的应用处理IP地址,求出其网络段。,88,MySQL数据库中的通配符,“%”(百分号)代表任意长度(长度可以为0)的字符串举例:a%b表示以a开头,以b结尾的任意长度的字符串。如acb,addgb,ab 等都满足该匹配串“_“(下横线)代表任意单个字符举例:a_b表示以a开头,以b结尾的长度为3的任意字符串。如acb,afb等都满足该匹配串,89,SQL语句,SQL概述 SQL语句,90,SQL概述,什么是SQL?SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的 命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。,91,SQL语言的特点:1.综合统一2.高度非过程化3.面向集合的操作方式4.以同一种语法结构提供两种使用方法5.语言简洁,易学易用,92,SQL语法分为两部分:一个是DML(Data Manipulation Language,数据操作语言),用于在一个存在的数据库中检索和修改数据。DML非常紧凑,只包含四个命令:select查询、insert插入、update更新和delete删除。另一个被成为DDL(Data Definition Language,数据定义语言),用于创建和修改数据库的结构。DDL的语法不象DML那样标准化,而是像PHP那样只是将SQL命令发送给数据库,你可以使用该数据库所支持的任何SQL命令。,93,使用SQL语言的几点说明 1):在mysql中输入一个SQL语句时,一定要在末尾加上一个;号,否则mysql认为语句没有输完。2):-符号的含义:意为本语句没有输完,等待继续输入。3):可以用c来取消输入4):mysql中的关键字和函数名不区分大小写,但是如果要是表名或者是数据库的名则区分大小写(分系统,windows不区分)5):在查询中输入一个函数,函数名和后面的括号是不能有空格的.6):可以用mysql file_name.sql输入查询,.sql文件代表mysql文件,94,4.2 SQL语句,1、建表(数据库)操作2、显示表(数据库)操作3、使用数据库操作4、显示表结构操作5、删除表(数据库)操作6、更新表结构7、插入记录操作8、更改记录操作9、删除记录操作10、查询记录操作11、使用集函数12、复 制 表,95,学生-课程数据库,学生表student(sno,sname,ssex,sage,sdept)课程表course(cno,cname,cpno,ccredit)成绩表sc(sno,cno,grade),96,学生-课程数据库(续),97,建立表(数据库)操作,建立数据库操作:语法:create database 数据库名叙述:创建一个具有指定名称的数据库。如果要创建的数据库已经存在,或者没有创建它的适当权限,则此语句失败。实例:建立一个学生-课程数据库。mysql create database st;,98,建立表操作:语法:create table 表名(列名1 列类型,列名2 列类型,.);叙 述:在当前数据库下新创建一个数据表。列类型:表示该列的数据类型。实 例:建立一个表thizlinux,其由两列组成,第一列属性为非空,并做为主键,并自增create table thizlinux(company_name varchar(20)primary key auto_increment,people int(10);,99,常见完整性约束:PRIMARY KEY 主码约束(主键)UNIQUE唯一性约束NOT NULL非空值约束AUTO_INCREMENT用于整数列默认自增1DEFAULT default_value默认值约束PRIMARY KEY 与UNIQUE 指定必须包含唯一值的索引。INDEX 和KEY 意义相同,它们都指定可以包含重复值的索引。,100,例:要建立一个学生表(student)CREATE TABLE student/创建基本表student(sno CHAR(9),/定义列学号,数据类型为9位定长字符串 sname CHAR(20)NOT NULL,/定义列sname姓名,类型为20位定长字符串,非空 ssex CHAR(2),/定义列ssex性别,类型为2位定长字符串 sage SMALLINT,/定义列sage年龄,类型为短整型Sdept char(20),/定义列sdept系别,类型为20位定长字符串PRIMARY KEY(sno);/定义sno学号为主键。,101,例:要建立课程表和成绩表(student)CREATE TABLE course(cno CHAR(4)PRIMARY KEY,cname CHAR(40),cpno CHAR(4),ccredit SMALLINT);CREATE TABLE SC(sno CHAR(9),cno CHAR(4),grade SMALLINT,PRIMARY KEY(sno,cno);,102,显示表(数据库)操作,显示数据库操作语法:show databases;叙述:列出服务器主机上可用的数据库。显示表操作语法:show tables;叙述:显示数据库中表的清单。,103,使用数据库操作,语法:use 数据库名;叙述:选择此数据库成为当前数据库(即不包含明确的数据库名的表引用中的缺省数据库)。如果数据库不存在或没有访问它的权限,则USE语句将失败。,104,显示表结构操作,语法:describe 表名;或desc 表名;叙述:用于显示表的创建结构。,105,删除表(数据库)操作,删除表操作语法:drop table if exists tab_name,tab_name.叙述:从数据库中删除制定的表。如果给出if exists 子句,则删除不存在的表不会出错。删除数据库操作语法:drop database if exists db_name叙述:删除给定的数据库。在删除一个数据库后,它就永远没有了,因此要特别小心。如果要删除的数据库不存在,则此语句将会失败(除给出了ifexists)。,106,更改表结构操作,语法:alter table 表名 action;说明:action 可以是如下语句:add 列名(first|after 列名)可以为表添加一列,如果没指定first或者after,则在列尾添加一列,否则在指定列添加新列add primary key(列名)为表添加一个主键,如果主键已经存在,则出现错误alter 列名 set default 默认值可以更改指定列默认值,107,change(modify)列名(first|after)可以更改列类型,如果原列的名字和新列的名字相同,则change和Modify的作用相同drop 列名/可以删除一列drop primary key/可以删除主键drop index index_name;/可以删除索引rename as 新表名/可以将表名更改,108,举例1:向student表添加字段address,类型varchar,最大长度为100alter table student add address varchar(100);举例2:将student表中的sage列默认值改为18:alter table student alter sage set default 18;举例3:向Student表增加“入学时间”列,其数据类型为日期型。alter table student add scome date;无论基本表中原来是否已有数据,新增加的列一律为空值。举例4:将年龄的数据类型改为半字长整数。alter table student modify sage smallint;注:修改原有的列定义有可能会破坏已有数据,109,插入记录操作,语法:insert into 表名(字段名,字段名,.)values(字段值,字段值,.);叙述:如果表名后面没写字段名,则默认是向所有的字段添加值字符串值应该用引号括起来举例1:向people表中添加一条记录:insert into people(name,age)values(“zhangsan”,20);举例2:向people表中添加三条记录:insert into people values(“zhangsan”,20),(“lisi”,10),(“wangwu”,40);,110,更改记录操作,语法:update 表名 set 列名=数据值 where子句;叙述:where 子句是判断语句,用来设定条件,限制只更新匹配的行。举例:将people表中的所有名称JoHn改为Tom:update people set name=Tom where name=JoHn;,111,删除记录操作,语法:delete from 表名 where子句;叙述:此语句删除表中的行,如果不带where子句,则删除整个表中的记录,但是表不被删除。举例:删除people表中的所有名字与record表中name相同的记录:delete from people where people.name=record.name;说明:表和字段的引用方式有两种:绝对引用和相对引用绝对引用:数据库名.表名(.字段名)相对引用:表名.(字段名),112,查询记录操作,语法:select 字段名,字段名,.(*)from 表名 where 子句 group by子句having子句 order by子句 limit子句 desc(asc)group by子句是对匹配where子句的查询结果进行分组having子句是对分组后的结果进行条件限制order by子句是对查询结果结果进行排序,后面跟desc或asc。limit子句是对查询的显示结果限制数目desc是将最终结果进行降序排列,asc是将最终结果进行升序。,113,举例1:查询全体学生的学号与姓名。select sno,sname from student;举例2:查询全体学生的详细记录。select sno,sname,ssex,sage,sdept from student;或select*from student;举例3:查全体学生的姓名及其出生年份。select sname,2004-sage from student;举例4:查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。select sname,year of birth:,2004-sage,islower(sdept)from student举例5:查询选修了课程的学生学号(去掉重复的记录)select distinct sno from sc;说明:使用distinct可以将查询结果中的重复记录只显示一次.,114,使用列别名:select long_field_name_are_annoying as myfield from thizlinux使用表别名:select myfield from long_table_name_are_my_table as thizlinux查询所有年龄在20岁以下的学生姓名及其年龄。select sname,sage from student where sage=20;,115,在WHERE子句中使用谓词:BETWEEN AND:在两数之间NOT BETWEEN AND:不在两数之间IN:是否在特定的集合里(枚举)NOT IN:与上面相反LIKE:是否匹配于一个模式IS NULL(为空的)或 IS NOT NULL(不为空的REGEXP:检查一个值是否匹配一个常规表达式。,116,查询年龄在2023岁(包括20岁和23岁)之间的学生的姓名、系别和年龄。select sname,sdept,sage from student where sage between 20 and 23;查询年龄不在2023岁之间的学生姓名、系别和年龄。Select sname,sdept,sage from student where sage not between 20 and 23;查询信息系(is)、数学系(ma)和计算机科学系(cs)学生的姓名和性别。select sname,ssex from student where sdept in(is,ma,cs);,117,查询学号为95001的学生的详细情况。select*from student where sno like 95001;等价于:select*from student where sno=95001;查询所有姓刘学生的姓名、学号和性别。select sname,ano,ssex from student where sname like 刘%;某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。Select sno,cno from sc where grade is null;查所有有成绩的学生学号和课程号。select sno,cno from sc where grade is not null;查询计算机系年龄在20岁以下的学生姓名。select sname from student where sdept=cs and sage20;,118,查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别select sname,ssex from student where sdept in(IS,MA,CS);可改写为:Select sname,ssex from student where sdept=IS or sdept=MA or sdept=CS;查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列。select sno,grade from sc where cno=3 orber by grade desc;查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列。select*from student order by sdept,sage desc;,119,连接查询:同时涉及多个表的查询称为连接查询用来连接两个表的条件称为连接条件举例:select name,id from people,record where people.name=record.name外连接。外连接与普通连接的区别普通连接操作只输出满足连接条件的元组外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出:举例:select student.sno,sname,ssex,sage,sdept,cno,grade from student.sc where student.sno=sc.sno;,120,嵌套查询:将一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中的查询称为嵌套查询。一个SELECT-FROM-WHERE语句称为一个查询块例如:select sname 外层查询/父查询 from student where sno in(select sno 内层查询/子查询 from sc where cno=2);,121,带有IN谓词的子查询(并构成嵌套查询)查询选修了课程名为“信息系统”的学生学号和姓名 select sno,sname from student where sno in select sno from sc where cno in(select sno from course where cname=信息系统);,122,使用集函数,SQL提供的统计函数称为集函数.主要的集函数:记数函数:count(列名)计算元素的个数求和函数:sum(列名)对某一列的值求和,但属性必须是整型计算平均值:avg(列名)对某一列的值计算平均值求最大值:max(列名)找出某一列的最大值求最小值:min(列名)找出某一列的最小值,123,举例:1:查