【网学网提醒】:网学会员为您提供sql语法-语句教程案例参考,解决您在sql语法-语句教程案例学习中工作中的难题,参考学习。
一)连接MYSQL:格式:mysql-h主机地址-u用户名-p用户密码
1、例1:连接到本机上的MYSQL首先在打开DOS窗口,然后进入mysql安装目录下的bin目录下,例如:D:\mysql\bin,再键入命令mysql-uroot-p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>2、例2:连接到远程主机上的MYSQL假设远程主机的IP为:10.0.0.1,用户名为root,密码为123。则键入以下命令:mysql-h10.0.0.1-uroot-p123(注:u与root可以不用加空格,其它也一样)3、退出MYSQL命令exit(回车)
(二)修改密码:格式:mysqladmin-u用户名-p旧密码password新密码1、例1:给root加个密码123。首先在DOS下进入目录C:\mysql\bin,然后键入以下命令:mysqladmin-uroot-password123注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。2、例2:再将root的密码改为456mysqladmin-uroot-pab12password456(三)增加新用户:(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符)格式:grantselecton数据库.*to用户名@登录主机identifiedby"密码"例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,
然后键入以下命令:grantselect,insert,update,deleteon*.*totest1@"%"Identifiedby"abc";但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。grantselect,insert,update,deleteonmydb.*totest2@localhostidentifiedby"abc";如果你不想test2有密码,可以再打一个命令将密码消掉。grantselect,insert,update,deleteonmydb.*totest2@localhostidentifiedby"";(四)显示命令1、显示数据库列表:showdatabases;刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。2、显示库中的数据表:usemysql;//打开库3、显示数据表的结构:describe表名;4、建库:createdatabase库名;5、建表:use库名;6、删库和删表:drop
database库名;7、将表中记录清空:deletefrom表名;droptable表名;createtable表名(字段设定列表);showtables;
8、显示表中的记录:select*from表名;
Mysql命令>Mysql命令use
[LIKEwild];showtables;showdatabases;?/help;exit/quit;mysqladminversion;mysqlmysqladminversion;netstartmysql;mysqladminvariables;mysqladmin-hhostname--port=port_numbervariables;缺省的情况下,端口是3306,套接字的名字是MySQLmysqladminshutdown;mysqladminreload;mysqladmin–help;mysqladmin-uroot-pshutdown;如果完全省略了-p选项,mysql就认为您不需要口令,不作提示shell>mysql–hmysql.domain.net–utom-p;CREATEDATABASEdb_name;DROPDATABASE[IFEXISTS]db_name;SHOW/DESCRIBE;sourceE:\Tomcat\webapps\2richshop1.1\doc\sql.txt;GRANTprivileges(columns)ONwhatTOuserIDENTIFIEDBY"password"WITHGRANTOPTION修改root用户口令:mysql>UPDATEuserSETpassword=PASSWORD("newpassword")WHEREuser=hunte;mysql>FLUSHPRIVILEGES;mysql>QUIT
SELECT语句的语法如下:SELECTselection_listFROMtable_list选择哪些列
从何处选择行行必须满足什么条件怎样对结果分组行必须满足的第二条件
WHEREprimary_constraintGROUPBYgrouping_columnsHAVINGsecondary_constraint
ORDERBYsorting_columns怎样对结果排序LIMITcount结果限定
注意:所有使用的关键词必须精确地以上面的顺序给出。例如,一个HAVING子句必须跟在GROUPBY子句之后和ORDERBY子句之前。
COUNT()函数计数非NULL结果的数目
TIMESTAMP列类型提供一种类型,TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示。你可以使用它自动地用当前的日期和时间标记INSERT或UPDATE的操作。如果你有多个TIMESTAMP列,只有第一个自动更新。自动更新第一个TIMESTAMP列在下列任何条件下发生:l列没有明确地在一个INSERT或LOADDATAINFILE语句中指定。
l列没有明确地在一个UPDATE语句中指定且一些另外的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列为它当前的值,MySQL为了效率而忽略更改。)l你明确地设定TIMESTAMP列为NULL.
除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。例如,创建如下的表:mysql>CREATETABLEstudent
->(->idint,->namechar(16),->englishtinyint,->chinesetinyint,->historytinyint,->timetimestamp->);向表中插入记录,可以查看效果:mysql>INSERTstudent(id,name,englisht,Chinese,history)VALUES(11,”Tom”,66,93,67);查看记录的存储情况:mysql>SELECT*FROMstudent;
+------+---------+---------+---------+---------+----------------+|id|name|english|chines
e|history|time|+------+---------+---------+---------+---------+----------------+|11|Tom|66|93|67|20010220123335|+------+---------+---------+---------+---------+----------------+
你可以看到time列纪录下了数据录入时的时间值。如果你更新改记录,在查看操作的结果:mysql>UPDATEstudentSETenglish=76WHEREid=11;mysql>SELECT*FROMstudent;+------+------+---------+---------+---------+----------------+|id|name|english|chinese|history|time|+------+------+---------+---------+---------+----------------+|11|Tom|76|93|67|20010220125736|
+------+------+---------+---------+---------+----------------+可以清楚的看到,time列的时间被自动更改为修改记录的时间。有时候你希望不更改任何值,也能打到修改TIMESTAMP列的值,这时只要设置该列的值为NULL,MySQL就可以自动更新TIMESTAMP列的值:mysql>UPDATEstudentSETtime=NULLWHEREid=11;mysql>select*fromstudentwhereid=11;+------+------+---------+---------+---------+----------------+|id|name|english|chinese|history|time|+------+------+---------+---------+---------+----------------+|11|Tom|76|93|67|20010220130517|+------+------+---------+---------+---------+----------------+通过明确地设置希望的值,你可以设置任何TIMESTAMP列为不同于当前日期和时间的值,即使对第一个TIMESTAMP列也是这样。例如,如果,当你创建一个行时,你想要一个TIMESTAMP被设置到当前的日期和时间,但在以后无论何时行被更新时都不改变,你可以使用这样使用:l让MySQL在行被创建时设置列,这将初始化它为当前的日期和时间。
l当你执行随后的对该行中其他列的更改时,明确设定TIMESTAMP列为它的当前值。例如,当你在修改列时,可以把原有的值付给TIMESTAMP列:mysql>UPDATEstudentSETenglish=66,time=timeWHEREid=11;mysql>select*fromstudentwhereid=11;+------+------+---------+---------+---------+----------------+|id|name|english|chinese|history|time|+------+------+---------+---------+---------+----------------+|11|Tom|66|93|67|20010220130517|+------+------+---------+---------+---------+----------------+另一方面,你可能发现,当你想要实现上面这个效果时,很容易用一个你用NOW()初始化的DATETIME列然后不再改变它,这样也许直接些。但是,TIMESTAMP列的以后好处是存储要求比较小,节省空间。TIMESTAMP的存储需求是4字节,而DATETIME列的存储需求是8字节。
在MySQL中,SQL的模式缺省是忽略大小写的。
在MySQL中,数据库和表对应于在那些目录下的目录和文件,因而,内在的操作系统的敏感性决定数据库和表命名的大小写敏感性。这意味着数据库和表名在Unix上是区分大小写的,
而在Win32上忽略大小写。
注意:在Win32上,尽管数据库和表名是忽略大小写的,你不应该在同一个查询中使用不同的大小写来引用一个给定的数据库和表。下列查询将不工作,因为它作为my_table和作为MY_TABLE引用一个表:mysql>SELECT*FROMmy_tableWHEREMY_TABLE.col=1;2、列名列名在所有情况下都是忽略大小写的。3、表的别名表的别名是区分大小写的。下列查询将不工作,:因为它用a和A引用别名:mysql>SELECTcol_nameFROMtbl_nameASaWHEREa.col_name=1ORA.col_name=2;4、列的别名列的别名是忽略大小写的。5、字符串比较和模式匹配缺省地,MySQL搜索是大小写不敏感的(尽管有一些字符集从来不是忽略大小写的,例如捷克语)。这意味着,如果你用col_nameLIKEa%搜寻,你将得到所有以A或a开始的列值。如果你想要使这个搜索大小写敏感,使用象INDEX(col_name,"A")=0检查一个前缀。或如果列值必须确切是"A",使用STRCMP(col_name,"A")=0。简单的比较操作(>=、=、、排序和聚合)是基于每个字符的“排序值”。>、<<=、有同样排序值的字符(象E,e)被视为相同的字符!LIKE比较在每个字符的大写值上进行(“E”=”e”)。如果你想要一个列总是被当作大小写敏感的方式,声明它为BINARY。例如:mysql>SELECT"E"="e","E"=BINARY"e";+---------+----------------+|"E"="e"|"E"=BINARY"e"|+---------+----------------+
|1|0|+---------+----------------+
由MySQL提供的模式匹配的其他类型是使用扩展正则表达式。当你对这类模式进行匹配测试时,使用REGEXP和NOTREGEXP操作符(或RLIKE和NOTRLIKE,它们是同义词)。扩展正则表达式的一些字符是:“.”匹配任何单个的字符。一个字符类“[...]”匹配在方括号内的任何字符。例如,“[abc]”匹配“a”、“b”或“c”。为了命名字符的一个范围,使用一个“-”。“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。“*”匹配零个或多个在它前面的东西。例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的任何数量的数字,而“.*”匹配任何数量的任何东西。正则表达式是区分大小写的,但是如果你希望,你能使用一个字符类匹配两种写法。例如,“[aA]”匹配小写或大写的“a”而“[a-zA-Z]”匹配两种写法的任何字母。如果它出现在被测试值的任何地方,模式就匹配(只要他们匹配整个值,SQL模式匹配)。为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用“^”或在模式的结尾用“$”。为了说明扩展正则表达式如何工作,上面所示的LIKE查询在下面使用REGEXP重写:为了找出以“b”开头的名字,
使用“^”匹配名字的开始并且“[bB]”匹配小写或大写的“b”:
mysql>SELECT*FROMpetWHEREnameREGEXP"^[bB]";+--------+--------+---------+------+------------+------------+|name|owner|species|sex|birth|death|+--------+--------+---------+------+------------+------------+|Buffy|Harold|dog|f|1989-05-13|NULL||Bowser|Diane|dog|m|1989-08-31|1995-07-29|
+--------+--------+---------+------+------------+------------+
为了找出以“fy”结尾的名字,使用“$”匹配名字的结尾:
mysql>SELECT*FROMpetWHEREnameREGEXP"fy$";+--------+--------+---------+------+------------+-------+|name|owner|species|sex|birth|death|+--------+--------+---------+------+------------+-------+|Fluffy|Harold|cat|f|1993-02-04|NULL||Buffy|Harold|dog|f|1989-05-13|NULL|+--------+--------+---------+------+------------+-------+
为了找出包含一个“w”的名字,使用“[wW]”匹配小写或大写的“w”:
mysql>SELECT*FROMpetWHEREnameREGEXP"[wW]";+----------+-------+---------+------+------------+------------+|name|owner|species|sex|birth|death|+----------+-------+---------+------+------------+------------+|Claws|Gwen|cat|m|1994-03-17|NULL||Bowser|Diane|dog|m|1989-08-31|1995-07-29||Whistler|Gwen|bird|NULL|1997-12-09|NULL|+----------+-------+---------+------+------------+------------+
既然如果一个正规表达式出现在值的任何地方,其模式匹配了,就不必再先前的查询中在模式的两方面放置一个通配符以使得它匹配整个值,就像如果你使用了一个SQL模式那样。为了找出包含正好5个字符的名字,使用“^”和“$”匹配名字的开始和结尾,和5个“.”实例在两者之间:mysql>SELECT*FROMpetWHEREnameREGEXP"^.....$";+-------+--------+---------+------+------------+-------+|name|owner|species|sex|birth|death|+-------+--------+---------+------+------------+-------+|Claws|Gwen|cat|m|1994-03-17|NULL|
|Buffy|Harold|dog|f|1989-05-13|NULL|+-------+--------+---------+------+------------+-------+
你也可以使用“{n}”“重复n次”操作符重写先前的查询:
mysql>SELECT*FROMpetWHEREnameREGEXP"^.{5}$";+-------+--------+---------+------+------------+-------+|name|owner|species|sex|birth|death|+-------+--------+---------+------+------------+-------+|Claws|Gwen|cat|m|1994-03-17|NULL||Buffy|Harold|dog|f|1989-05-13|NULL|+-------+--------+---------+------+------------+-------+
语法:SELECTFROMtable_referenceLEFTJOINtable_referenceONconditional_expr