mysql命令检查Mysql服务器是否在运行sudonetstat-tap_第1页
mysql命令检查Mysql服务器是否在运行sudonetstat-tap_第2页
mysql命令检查Mysql服务器是否在运行sudonetstat-tap_第3页
mysql命令检查Mysql服务器是否在运行sudonetstat-tap_第4页
mysql命令检查Mysql服务器是否在运行sudonetstat-tap_第5页
免费预览已结束,剩余32页可下载查看

付费下载

下载本文档

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

文档简介

安装Mysql:sudoapt-getinstallmysql-servermysql-检查Mysql服务器是否在运行:sudonetstattap|grep出现tcp 0localhost.localdo:mysql*:* 否则:启动他:sudo/etc/init.d/mysqlrestart终端进入mysql第一次需要设置:mysql-uroot-p后输入进入mysql后:输入quit或者\q可以退出mysql正确令:mysql-uroot-ppasswordmysql(或者mysql-uroot-pmysql)后面的mysql是所选一、连接MYSQLmysqlh-up1、连接到本机上的MYSQLDOS窗口,然后进入mysql\binmysql-uroot-p,回车后提示你输.注意用户名前可以有空格也可以没有空格,但是前必须没有空格,否则让你重新输入.MYSQL为abcd123。则键入以下命令:mysqlh10urootp123;(注:uroot之间可以不用加空格,其它也一样3、退出MYSQLexit(回车)二、修改。格式:mysqladmin-u用户名-p旧password1、给root加个ab12。首先在DOS下进入 mysqladmin-uroot-passwordab12注:因为开始时root没有,所以-p旧一项就可以省略了2、再将root的改为djg345。mysqladminurootpab12passworddjg345(注意:和上面不同,下面的因为是MYSQL环境中令,所以后面都带一个分号作为令结束符格式:grantselecton数据库.*to用户名@登录主机identifiedby“插入、修改、删除的权限。首先用root用户连入MYSQL,然后键入以下命令:grantselect,insert,update,deleteon*.*to[=test1@”%]test1@”%[/ ]”Identifiedby但增加的用户是十分的,你想如某个人知道test1的,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以了,解决办法见2。2、增加一个用户test2为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本机,即MYSQL数据库所在的那台主,主机上的web页来了grantselect,insert,update,deleteonmydb.*to[=test2@localhost]test2@localhost[/]identifiedby“abc”;如果你不想test2有,可以再打一个命令将消掉grantselect,insert,update,deleteonmydb.*to[=test2@localhost]test2@localhost[/]identifiedby“”;作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。也就是说你可以把一个完整令分成几行来打,完后用分号作结束标志就OKmysql>SHOWDATABASES;mysql>USE库名;mysql>SHOWnetstopmysqlnetstart第二招、登陆mysqlu-p中了,mysqlmysql>本章通过演示如何使用mysql客户程序创造和使用一个简单的数据库,提供一个MySQL的入门。mysql(有时称为“终端监视器”或只是“监视”)是一个交互式程序,允许你连接一个MySQL服务器,运行查询并察看结果。mysql可以用于批模式:你预先把要想查看由mysql提供的选择项目表,可以用--help选项来调用: >mysql--本章假定mysql已经被安装在你的机器上,并且有一个MySQL服务器可以连接。否则,请本章描述建立和使用一个数据库的全过程。如果你仅仅对一个已经存在的数据库感兴s>mysql-hhost-uuser-pEnterpassword:********host和userMySQLMySQL账户用户名。设置时替换为正确的值。********代表你的;当mysql显示Enterpassword:提示时输入它。如果有效,你应该看见mysql>s>mysql-hhost-uuser-pEnterpassword:********etotheMySQL Commandsendwith;orYourMySQLconnectionidis25338toserverversion:5.1.2-alpha-standardType'help;'or'\h'forhelp.Type'\c'toclearthebuffer.一些MySQL安装允许用户以(未命名)用户连接到本机上运行的服务器。如果你的机器是这种情况,你应该能不带任何选项地调用mysql与该服务器连接:s>成功地连接后,可以在mysql>提示下输入QUIT(或\q)随时退出:mysql>QUIT在Unix中,也可以按control-D在下列章节的大多数例子都假设你连接到了服务器。由mysql>mysql>SELECTVERSION(), | |5.1.2-alpha-log|2005-10- 1rowinset(0.01sec)这询问说明mysql的几个方面早先提到的QUIT是一个例子。后面看到其它的例子。)mysql>显示它准备好接受其它命令mysql用表格(行和列)方式显示查询输出。第一行包含列的,随后的行是查的值(如刚才的例子),mysql用表达式本身标记列。mysql显示返回了多少行,以及查询花了多长时间,它给你提供服务器性能的一个大致概念。因为他们表示时钟时间(CPU或机器时间),并且因为他们受到诸如服务mysql>SELECTVERSION(),mysql>selectversion(),current_date;mysql>SeLeCtvErSiOn(),current_DATE;这是另外一个查询,它说明你能将mysqlmysql>SELECTSIN(PI()/4), | |(4+1)*5 |0.70710678118655 25 1rowinset(0.02mysql>SELECTVERSION();SELECT+|+|++|5.1.2-alpha-log 1rowinset(0.00 | |2005-10-1115:15:00 1rowinset(0.00不必全在一个行内给出一个命令,较长命令可以输入到多个行中。mysql通过寻找终止分号mysql>->->-> | |jon@localhost|2005-10- 在这个例子中,在输入多行查询的第一行后,要注意提示符如何从mysql>变为->,这正是mysql如何它没见到完整的语句并且正在等待剩余的部分。提示符是你的朋友,因为它提供有价值的反馈,如果使用该反馈,将总是知道mysql正在等待什么。mysql>->->\c下表显示出可以看见的各个提示符并简述它们所表示的mysql的状态:提示符含义mysql> 等待多行命令的下一行 等待下一行,等待以单引号(“'”)开始的字符串的结">等待下一行,等待以双引号(“"”) 等待下一行,等待以反斜点(‘`’)开始的识别符的结束/*>等待下一行,等待以/*在这种情况中,mysql等待进一步输入:mysql>SELECT如果出现这种情况(你认为输完了语句,但是只有一个->提示符响应)mysql正在等儿。输入一个分号完成语句,mysql将执行:mysql>SELECT-> | |jon@localhost 提示符(MySQL正等待字符串的结束MySQL中,可以写由‘'’或‘"’字符括起来的字符串(例如,'o'或"goodbye")mysql允mysql>SELECT*FROMmy_tableWHEREname='SmithANDage<30;SELECTEnter(回车)键并等待结果,什么都没有出现。不要惊c,因为ql这样ql知道你完成了字符串),然后输入\:mysql>SELECT*FROMmy_tableWHEREname='SmithANDage<30;'>'\c提示符回到mysql>,显示mysql`>提示符类'>和">提示符,但表示你已经开始但没有结束以`>mysql忽略--QUIT的行!这可能令人相当困惑,特别是如果取消当假定在你的家(你的“动物园”)中有很多宠物,并且你想关于它们各种类型的信息。你例如,农夫可以使用这样的一个数据库来追踪家畜,或者兽医可以用它病畜记录。从MySQL上可以获得后面章节中将用到的含有部分查询和样例数据的动物园分发。有tar压缩格式(http://d /docs/menagerie-db.tar.gz)和Zip压缩格式 使用SHOWmysql>SHOW |Database | | | 的,因为它描述用户权限,test数据库经常作为用户试身手的工作区。请注意如果没有SHOWDATABASES权限,则不能看见所有数据库。参见节,“GRANT和REVOKE语法”。如果test数据库存在,尝试它mysql>USEDatabase句;这无碍)USE语句在使用上也有另外一个特殊的地方:它必须在一个单行上给出。你可列在后面的例子中使用test数据库(如果你能它),但是你在该数据库创建的任何东西可以被它的其它人删除,因此,你应该询问MySQL管理员你使用自己的一个数mysql>GRANTALLONmenagerie.*TOUnix下,数据库名称是区分大小写的(SQL关键字)menagerie数据库,而不能用Menagerie、MENAGERIE或其它一些变量。对表名也是这样的(在Windows下,该限制不适用,尽管你必须在一个给定的查询中使用同样的大小写来数据menagerie成为当前的数据mysql>USEmenagerieDatabasechanged数据库只需要创建一次,但是必须在每次启动mysql会话时在使用前先选择它。你可以根据USEmysql时,通过命令行选择数据库,s>mysql-hhost-uuser-pmenagerieEnterpassword:********命令行输入,因为这样会,能被在机器上登录的其它用户窥探到。创建数据库是很容易的部分,但是在这时它是空的,正如SHOWTABLES将告诉你的mysql>SHOWEmptyset(0.00pet表,并且它应该包含,最少,每个意味着你将要不断地更新你的记录。相反,一个固定值例如生日比较好,那么,无论何时你需要,可以以当前日期和出生日期之间的差来计算它。MySQL提供了日期运算函数,因此这并不。出生日期而非还有其它优点:人、种类,、出生和日期。使用一个CREATETABLEVARCHARname、ownerspecies列,因为列值是变长的。这些列的长度不必都相很显然,birth和death列应选用DATEmysql>SHOW |Tablesinmenagerie | 为了验证你的表是按你期望的方式创建,使用一个DESCRIBEmysql>DESCRIBE | | |Null|Key|Default|Extra | |varchar(20)| | | |varchar(20)| | |species|varchar(20)| | | | | | | | | | | | | | 你可以随时使用DESCRIBE,例如,如果你忘记表中的列的名称或类型时创建表后,需要填入内容。通过LOADDATA和INSERT语句可以完成该任务sex catcatdogdogdog1979-08-311995-07-ChirpyGwen birdf CREATETABLE语句中列出的列次序给出。对于丢失的值(例如未知的,或仍然活着的斜线,字母。例如,Whistler鸟的记录应为(这里值之间的空白是一个定位符): speciessexbirth bird\N1997-12-09\N要想将文本文件“pet.txt”装载到pet请注意如果用Windows中的编辑器(使用\r\n做为行的结束符)->LINESTERMINATEDBY(在运行OSXApple机上,应使用行结束符'\r'如果该语句失败,可能是你安装的MySQL不与使用默认值的本地文件兼容。关于如何更改5.6.4节,“LOADDATALOCAL安全问题”。如果想要一次增加一个新记录,可以使用INSERT语句。最简单的形式是,提供每一列的值,其顺序CREATETABLE语句中列的顺序相同。假定Diane把一只新仓鼠命名为Puffball,你可以使用下面的INSERT语句添加一条新记录:mysql>INSERTINTO注意,这里字符串和日期值均为引号扩起来的字符串。另外,可以直接用INSERT语句插FROMwhich_tableWHEREmysql>SELECT*FROM | | |species| | | ||Harold|||1993-02-04|||Harold|||1993-02-04|||| |||1994-03-17||||Harold||f|1989-05-13||| | | | |1990-08-27| | | | | |1979-08-31|1995-07-29| | | | |1998-09-11| |Whistler| | |NULL|1997-12-09| | | | | |1996-04-29| |Puffball| |hamster| |1999-03-30| 如果你想要浏览整个表,可以使用这种形式的SELECT,例如,刚刚装载了初始数据集以后。也有可能你想到Bowser的生日看起来不很对。查阅你原来的家谱,你发现正确的出生年是1989,而不是1979。mysql>DELETEFROMmysql>LOADDATALOCALINFILE'pet.txt'INTOTABLE,用一个UPDATE语句仅修正错误记录mysql>UPDATEpetSETbirth'1989-08-31'WHEREnameBowser';UPDATE只更改有问题的记录,不需要重新装载数据库表。SETEE地当表变得很大时。相反,你通常对回答一个具体的问题更感,的选择查询。Bowser的生日所做的更改,按下述方法选择Bowser的记录:mysql>SELECT*FROMpetWHEREname= | |owner|species| | | |Bowser|Diane| | |1989-08-31|1995-07-29 后出生的,测试birth列:mysql>SELECT*FROMpetWHEREbirth>'1998-1- | |owner|species| | |death | | | | |1998-09-11| |Puffball|Diane|hamster| |1999-03-30| mysql>SELECT*FROMpetWHEREspecies='dog'ANDsex= | | |species| | |death |Buffy|Harold| | |1989-05-13| 上面的查询使用AND逻辑操作符,也有一个ORmysql>SELECT*FROMpetWHEREspecies='snake'ORspecies= | |owner|species| | |death | | | | |1998-09-11| |Whistler| | |NULL|1997-12-09| | |Benny| | |1996-04-29| ANDOR可以混用,但ANDOR具有更高的优先级。如果你使用两个操作符,使用圆mysql>SELECT*FROMpetWHERE(species='cat'ANDsex=->OR(species='dog'ANDsex= | | |species| | |death |Claws| | | |1994-03-17| |Buffy|Harold| | |1989-05-13| 你的动物什么时候出生的,选择name和birth列:mysql>SELECTname,birthFROM | | | |1993-02-04| |1994-03-17| |1989-05-13| |1990-08-27| |1989-08-31| |1998-09-11|Whistler|1997-12-09| |1996-04-29|Puffball|1999-03-30 mysql>SELECTownerFROM | |Harold| |Harold| | | | | | 出减到最少,增加关键字DISTINCT检索出每个唯一的输出记录:mysql>SELECTDISTINCTownerFROM | | | | |Harold mysql>SELECTname,species,birthFROM->WHEREspecies='dog'ORspecies= | |species| |Fluffy| |1993-02-04| | |1994-03-17| | |1989-05-13| | |1990-08-27|Bowser| |1989-08-31 时,检查查询输出通常更容易。为了排序结果,使用ORDERBY子句。mysql>SELECTname,birthFROMpetORDERBY | | ||1989-05-13||1989-05-13||1989-08-31||1990-08-27||1993-02-04|||1994-03-17|1996-04-29|Whistler|1997-12-09| |1998-09-11|Puffball|1999-03-30 BINARY强制执行区分大小写的分类功能,如:ORDERBYBINARYcol_name.mysql>SELECTname,birthFROMpetORDERBYbirth | | |Puffball|1999-03-30| |1998-09-11|Whistler|1997-12-09| |1996-04-29| |1994-03-17| |1993-02-04| |1990-08-27| |1989-08-31| |1989-05-13 的种类进行排序,然后按降序根据生日对各动物种类进行排序(mysql>SELECTname,species,birthFROM->ORDERBYspecies,birth | |species| | | |1998-09-11|Whistler| |1997-12-09| | |1994-03-17| | |1993-02-04| | |1990-08-27| | |1989-08-31| | |1989-05-13|Puffball|hamster|1999-03-30| | |1996-04-29 DESC关键字仅适用于在它前面的列名(birth);不species列的排MySQL提供了几个函数,可以用来计算日期,例如,计算或提取日期部分mysql>SELECTname,birth,->(YEAR(CURDATE())-->-->AS->FROM | | | | | |1993-02-04|2003-08-19 10| |1994-03-17|2003-08-19 9| |1989-05-13|2003-08-19 14| |1990-08-27|2003-08-19 12| |1989-08-31|2003-08-19 13| |1998-09-11|2003-08-19 4|Whistler|1997-12-09|2003-08-19 5| |1996-04-29|2003-08-19 7|Puffball|1999-03-30|2003-08-19 4 此处,YEAR()提取日期的年部分,RIGHT()提取日期的MM-DD(日)部分的最右面5个字符。比MM-DD值的表达式部分的值一般为10,如CURDATE()的年birth的年早,则年份应减去1。整个表达式有些难懂,使用alias(age)来使输出的列标记更有意义。尽管查询可行,如果以某个顺序排列行,则能更容易地浏览结果。添加ORDERBYname子mysql>SELECTname,birth,->(YEAR(CURDATE())-->-->AS->FROMpetORDERBY | | | | | |1989-08-31|2003-08-19 13| |1989-05-13|2003-08-19 14| |1998-09-11|2003-08-19 4| |1994-03-17|2003-08-19 9| |1990-08-27|2003-08-19 12| |1993-02-04|2003-08-19 10|Puffball|1999-03-30|2003-08-19 4| |1996-04-29|2003-08-19 7|Whistler|1997-12-09|2003-08-19 5 为了按agenameORDERBYmysql>SELECTname,birth,->(YEAR(CURDATE())-->-->AS->FROMpetORDERBY | | | | | |1998-09-11|2003-08-19 4|Puffball|1999-03-30|2003-08-19 4|Whistler|1997-12-09|2003-08-19 5| |1996-04-29|2003-08-19 7| |1994-03-17|2003-08-19 9| |1993-02-04|2003-08-19 10| |1990-08-27|2003-08-19 12| |1989-08-31|2003-08-19 13| |1989-05-13|2003-08-19 14 来确定是哪些动物,然后,对于那些非NULL值的动物,需要计算出deathbirth值之间的mysql>SELECTname,birth,->(YEAR(death)-YEAR(birth))-->AS->FROMpetWHEREdeathISNOTNULLORDERBY | | | | |Bowser|1989-08-31|1995-07-29 5 deathISNOTNULLdeathNULLNULL是特殊的值,不能使用普通节,“NULL值操作”。和DAYOFMONTHMONTH()是适合的函数。为了看它怎样工作,运行一个简单的查询,显示birth和MONTH(birth)的值:mysql>SELECTname,birth,MONTH(birth)FROM | | |MONTH(birth)||1993-02-042||1993-02-042||1994-03-173||1989-05-135||1990-08-278||1989-08-318||1998-09-119|Whistler1997-12-0912||1996-04-294|Puffball|1999-03-30 3 (5月)mysql>SELECTname,birthFROMpetWHEREMONTH(birth)= | | |Buffy|1989-05-13 如果当前月份是12月,就有点复杂了。你不能只把1加到月份数(12)上并寻找在13月出生的动物,因为没有这样的月份。相反,你应寻找在1月出生的动物(1月)。个特定的月份,DATE_ADD(允许在一个给定的日期上加上时间间隔。如果NOW值上mysql>SELECTname,birthFROM->WHEREMONTH(birth)=MONTH(DATE_ADD(CURDATE(),INTERVAL11以得出当前月份的下一个月(在使用取模函数(MOD)后,如果月份当前值是12,则“回滚”到值0):mysql>SELECTname,birthFROM->WHEREMONTH(birth)=MOD(MONTH(CURDATE()),12)+注意,MONTH返回112之间的一个数字MOD(something,12)返回011之间的一个数字,因此必须在MOD()以后加1,否则从11月(11)跳到1月(1)。NULL值可能令人感到奇怪直到你习惯它。概念上,NULL意味着“没有值”或“未知值”,NULL,你不能使用算术比较操作符例如=、<或!=。mysql>SELECT1=NULL,1<>NULL,1<NULL,1> |1=NULL|1<>NULL|1<NULL|1>NULL NULL NULL NULL NULL mysql>SELECT1ISNULL,1ISNOT |1ISNULL|1ISNOTNULL 0 1 请注意在MySQL中,0NULL1。对NULL的特殊处理即是面的章节中,为了决定哪个动物不再是活着的,使用deathISNOTNULL而不使用death!=NULL的原因。在GROUPBYNULLORDERBY时,如果运行ORDERBY...ASCNULLNULLNOTNULL0或空字符串,但事实并非NULL表示"没有数值"IS[NOTNULL则可以很容易地进mysql>SELECT0ISNULL,0ISNOTNULL,''ISNULL,''ISNOT |0ISNULL|0ISNOTNULL|''ISNULL|''ISNOTNULL 0 1 0 1 MySQLSQLUnixvi、grepsed的扩SQL模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)。在MySQL中,SQL的模式默认是忽略大小写的。下面给出一些例子。注意使用SQL模式时,不能使用=或!=;而应使用LIKE或NOTLIKE比较操作符。mysql>SELECT*FROMpetWHEREnameLIKE | | |species| | | | |Harold| | |1989-05-13| |Bowser| | | |1989-08-31|1995-07-29 mysql>SELECT*FROMpetWHEREnameLIKE | | |species| | |death |Fluffy|Harold| | |1993-02-04| | |Harold| | |1989-05-13| 要想找出包含“w”的名字mysql>SELECT*FROMpetWHEREnameLIKE | |owner|species| | | | | | | |1994-03-17| | |Diane| | |1989-08-31|1995-07-29|Whistler| | |NULL|1997-12-09| mysql>SELECT*FROMpetWHEREnameLIKE | | |species| | |death |Claws| | | |1994-03-17| |Buffy|Harold| | |1989-05-13| 试时,使用REGEXPNOTREGEXP操作符(RLIKENOTRLIKE,它们是同义词)。字符类“[...]”匹配在方括号内的任何字符。例如,“[abc”匹配“ab”或“c符,“09]*”匹配任何数量的数字,而“.*”匹配任何数量的任何字符。如果REGEXP模式与被测试值的任何地方匹配,模式就匹配(这不同于LIKE模式匹配,模式的结尾用“$”。为了说明扩展正则表达式如何工作,下面使用REGEXP重写上面所示的LIKE查询:mysql>SELECT*FROMpetWHEREnameREGEXP | | |species| | | | |Harold| | |1989-05-13| |Bowser| | | |1989-08-31|1995-07-29 进制字符串。该查询只匹配名称首字母的小写‘b’。mysql>SELECT*FROMpetWHEREnameREGEXPBINARY^b';mysql>SELECT*FROMpetWHEREnameREGEXP'fy$'; | | |species| | |death |Fluffy|Harold| | |1993-02-04| | |Harold| | |1989-05-13| 为了找出包含一个“w”的名字,使用以下查mysql>SELECT*FROMpetWHEREnameREGEXP | |owner|species| | | | | | | |1994-03-17| | |Diane| | |1989-08-31|1995-07-29|Whistler| | |NULL|1997-12-09| 式的两侧放置一个通配符以使得它匹配整个值,就像你使用了一个SQL模式那样。为了找出包含正好5个字符的名字,使用“^”和“$”匹配名字的开始和结尾,和5个“.”mysql>SELECT*FROMpetWHEREnameREGEXP | | |species| | |death |Claws| | | |1994-03-17| |Buffy|Harold| | |1989-05-13| mysql>SELECT*FROMpetWHEREnameREGEXP | | |species| | |death |Claws| | | |1994-03-17| |Buffy|Harold| | |1989-05-13| 附录G:MySQL.录。COUNT(*)函数计算行数,所以计算动物数目的查询应为mysql>SELECTCOUNT(*)FROM |COUNT(*) 9 mysql>SELECTowner,COUNT(*)FROMpetGROUPBY | |COUNT(*) | 2| 2| 3|Harold 2 注意,使用GROUPBYownermysql>SELECTowner,COUNT(*)FROMERROR1140(42000):MixingofGROUPcolumnswithnoGROUPcolumnsisillegalifthereisnoGROUPBYCOUNT和GROUPBY以各种方式分类你的数据。下列例子显示出进行动物普查操作的不mysql>SELECTspecies,COUNT(*)FROMpetGROUPBY |species|COUNT(*) | 2| 2| 3|hamster 1| 1 每种的动物数量mysql>SELECTsex,COUNT(*)FROMpetGROUPBY | |COUNT(*) |NULL 1| 4| 4 mysql>SELECTspecies,sex,COUNT(*)FROMpetGROUPBYspecies, |species| |COUNT(*) | |NULL 1| | 1| | 1| | 1| | 1| | 2|hamster| 1| | 1 若使用COUNT(),你不必检索整个表。例如,前面的查询,当只对狗和猫进行时,应为mysql>SELECTspecies,sex,COUNT(*)FROM->WHEREspecies='dog'ORspecies=->GROUPBYspecies, |species| |COUNT(*) | | 1| | 1| | 1| | 2 mysql>SELECTspecies,sex,COUNT(*)FROM->WHEREsexISNOT->GROUPBYspecies, |species| |COUNT(*) | | 1| | 1| | 1| | 1| | 2|hamster| 1| | 1 .1pet表追踪你有哪个宠物。如果你想要记录其它相关信息,例如在他们一生中看兽医或何时综合上述因素,event表的CREATETABLE语句应为:mysql>CREATETABLEevent(nameVARCHAR(20),date->typeVARCHAR(15),remark对于pet 4kittens,3female,15puppies,2female,33puppies,3vetneededbeakvetbrokenbirthdayGavehimanewchewbirthdayGavehimanewfleabirthdayFirstmysql>LOADDATALOCALINFILE'event.txt'INTOTABLEpetevent表中记录的检索;原理是一样的。但是什么时候event表本身不能回答你可能问的问题呢?日期计算。event表中有母亲的生产日期,但是为了计算母亲的,你需要出生日期,在pet表中。说明查询需要两个表:mysql>SELECT->(YEAR(date)-YEAR(birth))-(RIGHT(date,5)<RIGHT(birth,5))AS->->FROMpet,->WHERE=ANDevent.type= | | | |Fluffy 2|4kittens,3female,1male| 4|5puppies,2female,3male| 5|3puppies,3 这很简单,因为它们都有一个name列。查询使用WHERE子句基于name值来匹配2个表因为name列出现在两个表中,当列时,你一定要指定哪个表。把表名附在列名前pet联结mysql>SELECT,p1.sex,,p2.sex,->FROMpetASp1,petAS->WHEREp1.species=p2.speciesANDp1.sex='f'ANDp2.sex= | | | | |species |Fluffy| | | | | | | | | | | |Bowser| | 个数据库,使用DATABASE()函数:mysql>SELECT | 如果你还没选择任何数据库,结果是NULLmysql>SHOW |Tablesinmenagerie++|||++|如果你想要知道一个表的结构,可以使用DESCRIBEmysql>DESCRIBE | | |Null|Key|Default|Extra| |varchar(20)|||||| |varchar(20)|| |varchar(20)|||||| |varchar(20)||||||species|varchar(20)| | | ||||||||| | | | | | | | Field显示列名字,Type是列的数据类型,NullNULL值,Key显示列是否被索引而Default指定列的默认值。如果表有索引,SHOWINDEXFROMtbl_name在批处理模式下使用面的章节中,你交互式地使用mysql输入查询并且查看结果。你也可以以批模式运行mysql。为了做到这些,想要运行令放在一个文件中,然后告诉mysql从文件s>mysql<batch-C:\>mysql-e"sourcebatch-file"s>mysql-hhost-uuser-p<batch-fileEnterpassword:********当这样操作mysql时,则创建一个文件,然后执行如果你想在语句出现错误的时候仍想继续执行,则应使用--force命令行选项。如果你需要重复运行查询(比如说,每天或每周),可以把它编成一个,则每次执行你犯了一个错误,你不必重新输入所有内容,只需要编辑来改正错误,然后告诉mysql再次执行。s>mysql<batch-file|s>mysql<batch-file> 当你从一个cron任务中运行查询时。在这种情况下,你当你以批模式运行mysql时,比起你交互地使用它时,其默认输出格式是不同的(更简明些)。例如,当交互式运行SELECTDISTINCTspeciesFROMpet时,输出应为: |species | | | |hamster| 使用mysql-vvv。你还可以使用源代码或\.命令从mysql提示符运行mysql>sourcefilename;\.下面是一些学习如何用MySQL在一些例子中,使用数据库表“shop”来某个商人(经销商)的每件物品(物品号)的价启动命令行工具mysql并选择数据库:s>mysqlyour-database-(在大多数MySQLtest数据库。->articleINT(4)UNSIGNEDZEROFILLDEFAULT'0000'NOT-> DEFAULT NOT-> mysql>INSERTINTOshopVALUES->->mysql>SELECT*FROM |article|dealer|price 0001| 3.45 0001| 3.99 0002| |10.99|0003||1.45|0003||1.69|0003||1.25 0004| |19.95 SELECTMAX(article)ASarticleFROM |article 4 price=(SELECTMAX(price)FROM另一个解决方案是按价格降序排序所有行并用MySQL特定LIMIT子句只得到FROMshopORDERBYpriceDESCLIMIT1;(SELECTarticle,MAX(price)ASprice |article|price 0001 3.99 0002|10.99 0003 1.69 0004|19.95 shops1 price=(SELECTFROMshopWHEREs1.article=参见mysql>SELECT@min_price:=MIN(price),@max_price:=MAX(price)FROMshop;mysql>SELECT*FROMshopWHEREprice=@min_priceOR |article|dealer|price 0003| 1.25 0004| |19.95 只是联接两个表时,不需要外部关键字。对于除InnoDB类型的表,当使用REFERENCESMySQLtbl_name中的动作,例如作为你正定义的表中的行的动作的响应而删除行;换句话说,该句法不会致使ONDELETEONUPDATE行为(如果你在REFERENCES子句中写入ONDELETE或ONUPDATE子句,将被忽略。该句法可以创建一个column如果用该句法定义InnoDB表,将会导致错误。CREATE nameCHAR(60)NOTNULL,PRIMARYKEYstyleENUM('t-shirt','polo','dress')NOTcolorENUM('red','blue','orange','white','black')NOTownerSMALLINTUNSIGNEDNOTNULLREFERENCES PRIMARYKEY(id)INSERTINTO SELECT@last:=LAST_INSERT_ID();INSERTINTOshirt(NULL,'polo','blue',(NULL,'dress','white',(NULL,'t-shirt','blue',INSERTINTO SELECT@last:=LAST_INSERT_ID();INSERTINTOshirt(NULL,'dress','orange',(NULL,'polo','red',(NULL,'dress','blue',(NULL,'t-shirt','white',SELECT*FROM |id| 1|Antonio 2|LillianaAngelovska SELECT*FROM |id| | |owner 1| | 1 2| | 1 3|t-shirt| 1 4| |orange 2 5| | 2 6| | 2 7|t-shirt| 2 SELECTs.*FROM p,shirtsWHERELIKE'Lilliana%'ANDs.owner=p.idANDs.color<>'white'; |id|style| |owner 4|dress|orange 2 5| | 2 6|dress| 2 按照这种方式使用,REFERENCESSHOWCREATETABLE的输出中SHOWCREATETABLE***************************1.row***************************Table:shirt`id`smallint(5)unsignedNOTNULL`color`enum('red','blue','orange','white','black')NOT`owner`smallint(5)unsignedNOTNULL,PRIMARYKEY 在列定义中,按这种方式使用REFERENCES作为注释或“提示”适用于表MyISAM可以充分利用使用单关键字的OR子句,如同AND的处理。一个比较灵活的例子是寻找两个通过OR组合到一起的关键字:SELECTfield1_index,field2_indexFROMtest_tableWHEREfield1_index='1' field2_index=还可以使用UNIONSELECT语句的输出合成到一起来更有效地解决该问题。参见节,“UNION语法每个SELECTSELECTfield1_index,FROMtest_tableWHEREfield1_index='1'SELECTfield1_index,FROMtest_tableWHEREfield2_index=CREATETABLEt1(yearYEAR(4),monthINT(2)UNSIGNEDZEROFILL,dayINT(2)UNSIGNEDZEROFILL);SELECTyear,month,BIT_COUNT(BIT_OR(1<<day))ASdaysFROMt1GROUPBYyear,month; |year|month|days |2000 01 3|2000 02 2 可以通过AUTO_INCREMENT属性为新的行产生唯一的标识nameCHAR(30)NOTNULL,PRIMARYKEYSELECT*FROM |id| 1| 2| 3|penguin 4| 5| 6|ostrich 你可以使用LAST_INSERT_ID()SQL函数或mysql_insert_id()CAPI函数来查询的AUTO_INCREMENT值。这些函数与具体连接有关,因此其返回值不会被其它执行插入功注释:对于多行插入,LAST_INSERT_ID和mysql_insert_id()从插入的第一行实际返回AUTO_INCREMENT关键字。在设置中,通过该函数可以在其它服务器上正确多对于MyISAMBDB表,你可以在第二栏指AUTO_INCREMENT以及多列索引。此时,AUTO_INCREMENT列生成的值的计算方法为:MAX(auto_increment_column)+1WHEREgrpENUM('fish','mammal','bird')NOTnameCHAR(30)NOTNULL,PRIMARYKEYINSERTINTOanimals(grp,name)VALUESSELECT*FROManimalsORDERBY | |id| | 1| |mammal 1| |mammal 2| |mammal 3| | 1|penguin| 2|ostrich 请注意在这种情况下(AUTO_INCREMENT列是多列索引的一部分,如果你在任何组中删表也如此,对于该表一般不重复使用AUTO_INCREMENT值。AUTO_INCREMENTMySQL成以(id)INDEX(id),MySQLPRIMARYKEY。结果是,该表包含一个单个的序列,而不是符合grp值的序列。要想以AUTO_INCREMENT值开始而不是1,你可以通过CREATETABLE或ALTER来设置该值,如下所示关于AUTO_INCREMENT的详AUTO_INCREMENTServer-system(auto_increment_increment和auto_increment_offset):5.3.3节,“服务器系统变量这个项目是InstituteofEnvironmentalMedicineatKarolinskaInstitutetStockholm和theSectiononClinicalResearchinAgingandPsychologyattheUniversityofSouthernCalifornia的该项目包括筛选部分,即通过回访在瑞典超过65岁的所有孪生。满足某种标准的孪可从以下找到孪生研究的信息用一个用PerlMySQL编写的web接口来管理项目的后面部分。每天晚上所有会谈的数据被移入一个MySQL数据库。CONCAT(p1.id,p1.tvab)+0AStvid,CONCAT(p1.christian_name,'',p1.surname)ASName,p1.postal_codeASCode,p1.cityASCity,IF(td.participation='Aborted','A','')ASA,p1.deadASdead1,l.eventAStd.AStid.ASi1,td.severeAStsevere1,id.severeASisevere1,p2.deadASdead2,l2.eventASevent2,h2.nurseASnurse2,h2.doctorASdoctor2,td2.AStid2.ASi2,td2.severeAStsevere2,id2.severeASisevere2,twin_projectAS/*ForTwin1LEFTJOINtwin_dataAStdONtp.id=td.idANDtp.tvab=td.tvabLEFTJOINinformant_dataASidONtp.id=id.idANDtp.tvab=id.tvabLEFTJOINharmonyAShONtp.id=h.idANDtp.tvab=h.tvabLEFTJOINlentusASlONtp.id=ANDtp.tvab=/*ForTwin2LEFTJOINtwin_dataAStd2ONp2.id=td2.idANDp2.tvab=td2.tvabLEFTJOINinformant_dataASid2ONp2.id=id2.idANDp2.tvab=id2.tvabLEFTJOINharmonyASh2ONp2.id=h2.idANDp2.tvab=h2.tvabLEFTJOINlentusASl2ONp2.id=l2.idANDp2.tvab=l2.tvab,_dataAS_dataASp2,postal_groupsAS/*p1getsmaintwinandp2getshis/hertwin./*ptvabisafieldinvertedfromtvab*/p1.id=tp.idANDp1.tvab=tp.tvabANDp2.id=p1.idANDp2.ptvab=p1.tvabAND/*Justthescreeningsurvey*/tp.survey_no=5AND/*Skipifpartnerdiedbefore65butallowemigration(dead=9)*/(p2.dead=0ORp2.dead=9OR(p2.dead=1AND(p2.death_date=0OR(/*Twinis(td.future_contact='Yes'ANDtd.=2)/*Twinis-InformantisB

温馨提示

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

评论

0/150

提交评论