《MySQL数据库学习笔记说课讲解.doc》由会员分享,可在线阅读,更多相关《MySQL数据库学习笔记说课讲解.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。MySQL数据库学习笔记-MySQL数据库学习笔记关系数据库的查询语言SQL(StructuredQueryLanguage),是一种非常口语化、既易学又易懂的语法。此一语言几乎是每个资料库系统都必须提供的,用以表示关连式的操作,包含了资料的定义(DDL)以及资料的处理(DML)。SQL原来拼成SEQUEL,这语言的原型以“系统R“的名字在IBM圣荷西实验室完成,经过IBM内部及其他的许多使用性及效率测试,其结果相当令人满意,并决定在系统R的技术基础发展出来IBM的产品。而且美国国家标准学会(ANSI)
2、及国际标准化组织(ISO)在1987遵循一个几乎是以IBMSQL为基础的标准关连式资料语言定义。第一章、了解概念,并理解它一、资料定义DDL(DataDefinitionLanguage)资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什麽栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。数据库第二章MySQL数据库数据类型第一节、数据类型MySQL数据库目前支持以下几种下列代码字母用于描述中:M指出最大的显示尺寸。最大的显示尺寸长度为255。D适用于浮点类型。指出跟随在十进制小数点后的数字数量。
3、最大可能值为30,但不应大于M-2。方括号(and)指定可选的类型修饰部份。1、数值型(包括整数与浮点数,浮点型支持科学表示法)浮点类型:numericnju:merikdecimal(5,2),数字位:5,小数位:2numeric等价于decimal并且是作为字符串存储的.而不是作为二进制浮点数.说明:salaryDECIMAL(3,2)在这个例子中,3(精度(precision)代表重要的十进制数字的数目,2(数据范围(scale)代表在小数点后的数字位数。在这种情况下,因此,salary列可以存储的值范围是从-99.99到99.99。(实际上MySQL在这个列中可以存储的数值可以一直到9
4、99.99,因为它没有存储正数的符号)。整型:integer类型占用字节从到TINYINT1-128127SMALLINT2-3276832767MEDIUMINT3-83886088388607INT4-21474836482147483647BIGINT8-922337203685477580892233720368547758072、字符串(字符)类型3、日期和时间类型4、Null类型不同于例如数字类型的0或字符串的5、布尔类型TUREFALSE标识符约定标识符最大长度允许的字符数据库64一个目录名中允许的任何字符,除了/,和.表64一个目录名中允许的任何字符,除了/和.列64所有的字符
5、索引64所有的字符加名255所有的字符定界符,反引号ANSISQL中双引号为定界符注意:在MYSQL中,数据库和表对应操作系统下的目录与文件,因而,操作系统的敏感性决定数据库和表命名的大小敏感,所以在LINUX下数据库与表名的大小写敏感.提示:USE,HELP是Mysql中为少数几个不需要终结符的语句之一.用户变量表示为:var_name;setx=99;等同于x:=99;系统变量用两个表示,它分为2种,全局系统变量和会话系统变量.下面详细说明各种类型MySQL支持所有的ANSI/ISOSQL92数字类型.1、数值型一个整数可以在浮点语境中使用;它被解释为等值的浮点数;同样,一个浮点数可以被转
6、化为整数,但损失精度,如100.1-100,100.5-101;2.Mysql支持16进制数值,在数字的语境中,它们表现类似于一个整数(64位精度);如select0xa+0;在字符串的语境中,它们表现类似于一个二进制的字符串,每一对16进制ASCII码被转为一个字符:select0x787868;=selectx787868;selecthex(xxh);select0xa+5;selecttrue,true,flase,FALSE;其中浮点型用于域,表示方法解释一下,如:FLOAT(M,D)UNSIGNEDZEROFILL如果UNSIGNED被指定,负值是不允许的。M是显示宽度,D是小数位
7、数。并且如果负号“”也占一个宽度。2、字符串类型字符串是多个字符组成的一个字符序列,由单引号,或双引号字符包围,但在ANSI模式中运行时只能用单引号,也就是说在SQLSERVER数据库,使用应该使用单引号,保证兼容性应该使用单引号.字符串类型有CHAR、VARCHAR、BLOB、TEXT、ENUM和SET;ENUM是一个字符串对象,其值通常选自一个允许值列表中,该列表在表创建时的列规格说明中被明确地列举。每个枚举值均有一个索引值:在列说明中列表值所允许的成员值被从1开始编号。空字符串错误值的索引值为0。这就意味着,你可以使用下面所示的SELECT语句找出被赋于无效ENUM值的记录行。mysql
8、SELECT*FROMtbl_nameWHEREenum_col=0;NULL值的索引值为NULL。总结:ENUM用于互相排斥的值,而SET列可以从一个值的列表中选择多个值。常用技巧:1.在命令提示符下:mysql-h-urootdb_namex.sql在串的环境中,可用十六进制常数来指定串值。其语法与前面描述的数值值相同,但是每对十六进制的数字都被看作ASCII代码并转换为字符,其结果用于串。例如,0x616263作为串时为“abc”。在一个字符串中,如果某个序列具有特殊的含义,每个序列以反斜线符号(“”)开头,称为转义字符。MySQL识别下列转义字符:0一个ASCII0(NUL)字符。一个
9、ASCII39单引号(“”)字符。一个ASCII34双引号(“”)字符。b一个ASCII8退格符。n一个ASCII10换行符。r一个ASCII13回车符。t一个ASCII9制表符(TAB)。zASCII(26)(Control-Z)。这个字符可以处理在Windows系统中ASCII(26)代表一个文件的结束的问题。(当使用mysqldatabasefilename时ASCII(26)可能会引起问题产生。)一个ASCII92反斜线(“”)字符。%一个ASCII37“%”字符。它用于在正文中搜索“%”的文字实例,否则这里“%”将解释为一个通配符。查看章节6.3.2.1字符串比较函数。_一个ASCI
10、I95“_”字符。它用于在正文中搜索“_”的文字实例,否则这里“_”将解释为一个通配符。查看章节6.3.2.1字符串比较函数.3、日期和时间类型4、Null类型Null是ANSI中值的空。查找NUll类型用ISNull和ISNotNull测试;并且不能对NULL类型进行算术运算。其结果为NULL。5.mysql的注释为两种:/*/和#(单行注释,类似UNIX的脚本注释;)第07章MySQL函数mysql运算符A.比较运算符=,!=(),=,=Null安全等于比较isnull,isnotnullisnull(express)如果expr大于或等于min,并且expr小于或等于max,betwee
11、n返回1,否则返回0.它等价于表达式(min=exprandexpr=max)exprin(v1,v2,.);如果expr是in列表中的一值,它将返回1,否则返回0.B.逻辑运算符在mysql中,所有的逻辑运算符返回的值均为true,false,或null(未知),在mysql中,它们由1(true),0(false)和null实现.select!1等同于selectnot1;C.流程控制函数ifnull(expr1,value)当expr1的值是null时,返回value,不是null时,返回expr1casevaluewhencompare-valuethenresult.seta=2;s
12、electcaseawhen1thenonewhen2thentwoelsemoreend;if(expr1,expre2,expr3)如果expr1为真,(expr10以及expr1null),那么if()返回expr2,否则返回expr3nullif(expr1,expr2)如果expr1=expr2为真,返回null,否则返回expr1;mysqlselectnullif(1,1);-nullmysqlselectnullif(1,2)-1D.mysql字符串函数返回字符串str最左边的那个字符的ASCII码值.mysqlselectascii(2);-50返回N的字符串表示的2进制值形
13、式.mysqlselectbin(12);-1100返回N的字符串表示的八进制值形式mysqlselectoct(12);-14如果x是一个数字,返回n的字符串表示的16进制值形式,这里n是一个长长的(bigint)数字.如果x是一个字符串,x中的每个字符均被转换为2位16进制数字,并以16进制的字符串形式返回.这是0xff形式的字符串反转操作.mysqlselecthex(255);-ffmysqlselecthex(abc);/selectascii(a);-97selecthex(97);-61-616263mysql0x616263;-abcchar()以整数类型解释参数,返回这个整数
14、所代表的Ascii码值给出的字符组成的字符串,null值将被忽略mysqlselectchar(120,120,104);-xxhconcat(str1,str2,.)将参数连接成字符串返回,如果有任何一个参数为null,返回值也为null.locate(子串substr,母串str)返回子串substr在字符吕中第一次出现的位置.如果子串substr在str中不存在,返回值为0:ltrim(str)返回移除了领头的空格字符后的str;第08章MySQL数据操纵语言DMLselect语法select列1,列2,列3,from表1,表2,表3where条件groupby.having.第二节域/
15、列类型属性域/列的类型属性,有以下特性:其中可以存放什么类型的值。值要占据多少空间,以及该值是否是定长的(所有值占相同数量的空间)或(所占空间量依赖于所存储的值)。该类型的值怎样比较和存储。此类型是否允许NULL值。此类型是否可以索引。数字日期和时间字符串(字符)列类型的属性有以下四种:DefaultNotNull或NullPrimaryKey即主键Auto_increment(只有1个只能被索引)一、数据库的操作操作系统下的操作mysql-h-u-pmysql-hlocalhost-uroot创建数据库删除数据库显示数据库使用数据库数据库其他相关操作1、创建数据库CREATEDATABASE
16、db_Name;说明:2、删除数据库DROPDATABASEdb_Name;说明:可以简写为:dropdb_name;3、显示数据库SHOWdatabases;说明:显示当前有哪些数据库。4、使用数据库USEdatabase;说明:5、显示数据库中有哪些表首先USEdatabase;然后SHOWtables;参见:show的用法二、表格、索引的操作创建表格更改表格建立索引删除表格、索引表格其他相关操作以下操作都是以表格table_name或索引为操作单位。DESCRIBE或DESC命令除外。文件用途tbl_name.frm表定义(form)文件tbl_name.MYD数据文件tbl_name.
17、MYI索引文件1、创建表格:CREATETABLEtable_name(column1DATATYPENOTNULLNOTNULLPRIMARYKEY,column2DATATYPENOTNULL,.)说明:DATATYPE-是资料的格式,也就是字段的数据类型NotNull-不允许资料有空的PRIMARYKEY-是本表的主键。可以通过一个表的内容来拷贝一个表,如CREATETEMPORARYTABLEnew_tbl_nameSELECT*FROMold_tbl_name;CREATETEMPORARYTABLEnew_tbl_nameSELECT*FROMold_tbl_namewhere1=
18、0;(只是拷贝空表)2、更改表格ALTERTABLEtbl_nameADDCOLUMNcol_nameDATATYPE说明:增加一个栏位即(字段)(没有删除某个栏位的语法)。ALTERTABLEtbl_nameRENAMEASnew_name;说明:对表重命名。ALTERTABLEtable_namedropcolumn_name说明:删除指定的列名。ALTERTABLEtbl_nameCHANGEold_column_namenew_column_nameDATATYPE说明:更改列名及列属性。例:ALTERTABLEtbl_nameCHANGEold_column_namenew_colu
19、mn_nameint(2)notnullprimarykey;ALTERTABLEtable_nameADDPRIMARYKEY(column_name)说明:更改表得的定义把某个栏位设为主键。ALTERTABLEtable_nameDROPPRIMARYKEY(column_name)说明:把主键的定义删除。ALTERTABLEmy_tblTYPE=ISAM或MYISAM,HELP,InnoDB等等说明:更改表的类型3、建立索引CREATEINDEXindex_nameONtable_name(column_name);CREATEUNIQUEindex_nameONtable_name(c
20、olumn_name);ALTERTABLEtbl_nameADDINDEXindex_name(column_list);ALTERTABLEtbl_nameADDUNIQUEindex_name(column_list);ALTERTABLEtbl_nameADDPRIMARYKEY(column_list);说明:对某个表格的栏位建立索引以增加查询时的速度。4、删除表格、索引DROPtbl_name1,tbl_name2,tbl_name3.;DROPINDEXindex_nameONtbl_name;ALTERTABLEtbl_nameDROPINDEXindex_name;ALTER
21、TABLEtbl_nameDROPPrimaryKey;5、显示表格中列的信息语法:DESCRIBE|DESCtbl_namecol_name|wildDESCRIBEtbl_name;说明:DESCRIBE是SHOWCOLUMNSFROM的缩写。用于显示表格中列的信息。DESCRIBEtbl_name;等于SHOWCOLUMNSFROMtbl_name;也可以简写为:desctal_name;describevt.描写,记述,形容,形容三、记录的操作记录的添加记录的更改记录的删除首先来大概了解一下INSERT的语法,有以下几种方式:INSERTINTOtbl_name(col_name,.)
22、VALUES(expression|DEFAULT),.),(.),.ONDUPLICATEKEYUPDATEcol_name=expression,.或者INSERTINTOtbl_name(col_name,.)SELECT.或者INSERTINTOtbl_nameSETcol_name=(expression|DEFAULT),.ONDUPLICATEKEYUPDATEcol_name=expression,.说明:我们只关心记录添加的方式啦。注意啦,现在我们开始啦。1、记录的添加最简单的一种:直接添加一行记录就是:INSERTINTOtbl_name(col_name,.)VALUES
23、(expression|DEFAULT),.),(.),.);例:INSERTINTOtbl_name(col1,col2)VALUES(15,col1*2);inserttbl_name(col1,col2)values(007,xxh5fd)第二种:2、记录的更改还是先来看一看UPDATE的语法UPDATEtbl_name,tbl_name.SETcol_name1=expr1,col_name2=expr2.WHEREwhere_definition说明:UPDATE以新的值更新现存表中行的列。SET子句指出要修改哪个列和他们应该给定的值。WHERE子句如果被给出,指定哪个记录行应该被更
24、新。否则,所有的记录行被更新。如果ORDERBY子句被指定,记录行将被以指定的次序更新。例子:UPDATEybcsetid=8whereid=0;3.记录的删除简单的语法:DELETEFROMtable_nameWHEREconditions说明:删除符合条件的资料。数据语法:SHOW语句可用来获取数据库和表的几个方面的信息,它有如下用法:SHOWDATABASES列出服务器上的数据库SHOWTABLES列出当前数据库中的表SHOWTABLESFROMdb_name列出指定数据库中的表SHOWFULLCOLUMNSFROMtbl_name显示指定表中列的信息,等同于desctbl_name;S
25、HOWINDEXFROMtbl_name显示指定表中索引的信息SHOWTABLESTATUS显示缺省数据库中表的说明信息SHOWTABLESTATUSFROMdb_name显示指定数据库中表的说明信息DESCRIBEtbl_name和EXPLAINtbl_name语句与SHOWCOLUMNSFROMtbl_name功能相同。SELECT的使用及语法详解作用说明:SELECT用于检索从一个或多个表中选取出的行。select_expression表示你希望检索的列。SELECT也可以被用于检索没有引用任何表的计算列。要讲的内容是:第一个查询选择特定的列,对列进行排序查找不重复的数据创建虚拟列,及列
26、的别名的使用按条件检索好,现在开始我们的第一个查询啦!SELECT*Fromtbl_name;组合查询组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的表格才能够得到结果的。SELECT*FROMtable1,table2WHEREtable1.colum1=table2.column1说明:1.查询两个表格中其中column1值相同的资料。2.当然两个表格相互比较的栏位,其资料形态必须相同。3.一个复杂的查询其动用到的表格可能会很多个。整合性的查询:SELECTCOUNT(*)FROMtable_nameWHEREcolumn_name=xxx说明:查询符合条件的资料共有几笔
27、。SELECTSUM(column1)FROMtable_name说明:1.计算出总和,所选的栏位必须是可数的数字形态。2.除此以外还有AVG()是计算平均、MAX()、MIN()计算最大最小值的整合性查询。SELECTcolumn1,AVG(column2)FROMtable_nameGROUPBYcolumn1HAVINGAVG(column2)xxx说明:1.GROUPBY:以column1为一组计算column2的平均值必须和AVG、SUM等整合性查询的关键字一起使用。2.HAVING:必须和GROUPBY一起使用作为整合性的限制。复合性的查询SELECT*FROMtable_name
28、1WHEREEXISTS(SELECT*FROMtable_name2WHEREconditions)说明:1.WHERE的conditions可以是另外一个的query。2.EXISTS在此是指存在与否。SELECT*FROMtable_name1WHEREcolumn1IN(SELECTcolumn1FROMtable_name2WHEREconditions)说明:1.IN後面接的是一个集合,表示column1存在集合里面。2.SELECT出来的资料形态必须符合column1。其他查询SELECT*FROMtable_name1WHEREcolumn1LIKEx%;说明:LIKE必须和後
29、面的x%相呼应表示以x为开头的字串。SELECT*FROMtable_name1WHEREcolumn1IN(xxx,yyy,.)说明:IN後面接的是一个集合,表示column1存在集合里面。SELECT*FROMtable_name1WHEREcolumn1BETWEENxxANDyy说明:BETWEEN表示column1的值介於xx和yy之间。其它重要概念:SQL允许你创建一个虚拟列或对已有的列进组合和修改后产生的派生列。SQL允许可以创建一个新的虚拟列,而且还可以对它安自己的需要进行重命名,你可以按语法列名别名来对任何一个列进行重命名(注意在列名与别名之间有空格)或用()括起来。词语解释
30、:numericnju:merikadj.(=mumerical)数字的,数值的decimaldesimEladj.以十作基础的,十进位的SQL查询语句精华使用简要一、简单查询简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。例如,下面的语句查询testtable表中姓名为张三的nickname字段和email字段。SELECTnickname,emailFROMtesttableWHEREname=张三(一)选择列表选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括
31、局部变量和全局变量)等构成。1、选择所有列例如,下面语句显示testtable表中所有列的数据:SELECT*FROMtesttable2、选择部分列并指定它们的显示次序查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。例如:SELECTnickname,emailFROMtesttable3、更改列标题在选择列表中,可重新指定列标题。定义格式为:列标题=列名列名列标题如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:SELECT昵称=nickname,电子邮件=emailFROMtesttable4、删除重复行SELECT语句中使用A
32、LL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。5、限制返回的行数使用TOPnPERCENT选项限制返回的数据行数,TOPn说明返回n行,而TOPnPERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。例如:SELECTTOP2*FROMtesttableSELECTTOP20PERCENT*FROMtesttable(二)FROM子句FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们
33、之间用逗号分隔。在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:SELECTusername,citytable.cityidFROMusertable,citytableWHEREusertable.cityid=citytable.cityid在FROM子句中可用以下两种格式为表或视图指定别名:表名as别名表名别名(二)FROM子句FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句
34、中最多可指定256个表或视图,它们之间用逗号分隔。在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:SELECTusername,citytable.cityidFROMusertable,citytableWHEREusertable.cityid=citytable.cityid在FROM子句中可用以下两种格式为表或视图指定别名:表名as别名表名别名例如上面语句可用表的别名格式表示为:SELECTusern
35、ame,b.cityidFROMusertablea,citytablebWHEREa.cityid=b.cityidSELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。例如:SELECTa.au_fname+a.au_lnameFROMauthorsa,titleauthorta(SELECTtitle_id,titleFROMtitlesWHEREytd_sales10000)AStWHEREa.au_id=ta.au_idANDta.title_id=t.title_id此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。(三)使用
36、WHERE子句设置查询条件WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据:SELECT*FROMusertableWHEREage20WHERE子句可包括各种条件运算符:比较运算符(大小比较):、=、=、=、!、!=10ANDage、=、=、!和。3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:SELECT*FROMauthorsASaINNERJOINpublishersASpONa.city=p.city又如使用自然连接,在选择列表中删除authors和publishers表中重复列(city和state):SELECTa.*,p.pub_id,p.pub_name,p.coun