MySQL数据库的操作.docx
- 文档编号:27024931
- 上传时间:2023-06-25
- 格式:DOCX
- 页数:15
- 大小:76.47KB
MySQL数据库的操作.docx
《MySQL数据库的操作.docx》由会员分享,可在线阅读,更多相关《MySQL数据库的操作.docx(15页珍藏版)》请在冰豆网上搜索。
MySQL数据库的操作
MySQL数据库的操作
在MySQL数据库出现以前,互联网上人们广泛使用的小型数据库是mSQL。
这种数据库由于比较简单,在进行简单的SQL查询时比较快。
但是正因为比较简单,所以对SQL语句的支持并不是特别的好,基本上不支持嵌套的SQL语句。
在安全性方面,也不是很可靠。
很快,由瑞典的T.c.X公司开发的MySQL诞生了。
这是一个强大、快速而价钱低廉的数据库。
MySQL通过使用命令进行各种操作。
1连接与断开服务器
为了连接服务器,通常需要提供一个MySQL用户名,有时还需提供一个口令。
如果服务器运行在不是你登录的同一台机器上,你还需要指定主机名。
有了这些正确的参数,就可以这样连接:
shell>mysql-hhost-uuser-p
Enterpassword:
********
********代表你的口令。
“-h”后面是主机名,“-u”后面是用户名,“-p”后面是用户口令。
要注意的是“-p”和用户口令之间不能有空格。
缺省情况下,这些参数都可以没有。
如果连接成功,MySQL就显示版本信息、帮助提示和MySQL提示符“mysql>”,如图1所示。
图1连接服务器
提示符告诉你MySQL正准备接受你的命令。
我们在安装MySQL时已经设置Windows启动时自动启动。
所以Windows启动后,MySQL也已经自动启动了。
这时如果要进入MySQL命令行界面,同样可以用上面的命令。
更简单的方法可以从“开始”/“程序”/“MySQL”/“MySQLServer5.0”选择“MySQLCommandLineClient”(如图2所示),进入MySQL命令行界面。
图2进入MySQL命令行
进入MySQL命令行界面后要求输入密码。
因为我们的密码设置为空,所以回车即可。
接着MySQL同样显示版本信息、帮助提示和MySQL提示符(如图3)。
图3MySQL命令行
从图3中可以看到在MySQL提示符下打入“help”或“\h”可以获得帮助。
打入help和要求帮助的内容可以获得相关的帮助信息。
还可以通过“开始”/“程序”/“MySQL”/“MySQLServer5.0”/“MySQLManul”打开MySQL参考手册,这里有关于MySQL的全部使用说明。
成功地连接后,可以在“mysql>”提示符下键入QUIT断开:
mysql>QUIT
Bye(MySQL返回信息)
用户也可以键入“exit”或按
在下面章节的大多数例子中,都假设你已连接到了服务器,由“mysql>”提示符指明。
2创建并使用一个数据库
知道怎样输入命令以后,就可以创建和存取数据库了。
本节叙述怎样创建一个数据库、怎样创建一个数据库表和怎样装载数据到数据库表中。
使用SHOW命令找出在服务器上当前存在哪些数据库:
mysql>SHOWDATABASES;
+-------------------------+
|Database|
+-------------------------+
|information_schema|
|mysql|
|test|
+-------------------------+
3rowsinset(0.02sec)(MySQL返回的本次操作的时间和操作结果的行数)
数据库列表在你的机器上可能不完全相同,但是mysql和test数据库很可能在其间。
mysql是必需的,因为它描述用户存取权限,test数据库经常作为一个工作区提供给用户试试身手。
如果test数据库存在,尝试存取它:
mysql>USEtest
Databasechanged(MySQL返回的提示)
注意,USE命令,类似于QUIT命令,不需要分号结束(如果你喜欢,也可以用一个分号终止这样的语句)。
USE语句在使用上还有另外一个特殊的地方,它必须在一个单行上给出(其他语句只要没有碰到分号,按“Enter”键后,可以在后续行继续写)。
你可以在后面的例子中使用test数据库,但是你在该数据库创建的任何东西可以被访问它的其他人删除。
为了这个原因,你应该询问你的MySQL管理员,许可你使用自己的一个数据库。
假定你想要调用你的testdb数据库,管理员需要执行一个这样的命令:
mysql>GRANTALLONtestdb.*TOyour_mysql_name;
这里,your_mysql_name是分配给你的MySQL用户名。
1.创建并打开数据库
如果在设置你的权限时,管理员为你创建了数据库,你可以开始使用它。
否则,你需要自己创建它:
mysql>CREATEDATABASEtestdb;
QueryOK,1rowaffected(0.03sec)(MySQL返回信息)
在Unix下,数据库名字是区分大小写的(不像SQL关键词),因此你必须总是以testdb引用你的数据库。
对表名也是这样。
在Windows下,没有这种限制。
创建了一个数据库后,并没有打开和使用它。
你必须明确地将它打开。
为了使testdb成为当前的数据库,使用如下命令:
mysql>USEtestdb;
Databasechanged(MySQL返回信息)
数据库的创建只要一次,但是在每次启动一个MySQL会话时,为了使用数据库,必须打开它。
可以用上面的USE语句打开数据库。
也可以在调用MySQL时,在命令行上选择数据库,在提供的连接参数之后指定其名字。
例如:
shell>mysql-hhost-uuser-ptestdb
Enterpassword:
********
注意,这里的testdb不是用户的口令。
前面已经提到过,如果要在命令行上“-p”后面提供口令,则必须做到在“-p”和口令之间没有任何空格(例如,-pmypassword,而不是-p<空格>mypassword)。
然而,不建议把口令放在命令行上,因为这样会暴露用户口令,能被其他用户窥探到。
2.创建数据表
创建一个数据库只是构建了一个容器,但这时它里面还是空的,使用SHOWTABLES命令会告诉你这是一个空数据库:
mysql>SHOWTABLES;
Emptyset(0.02sec)
在创建了数据库后要决定数据库的结构是什么:
需要什么数据表,和在他们中有什么样的列。
如果需要建立一个包含同事姓名、地址和电话号码的数据表。
可称其为person表。
也有一些情况,存储一个固定的值不是一件好事,比如年龄。
在这种情况下可以用生日会比较好一些。
这样,无论何时你需要年龄,就可以以当前日期和出生日期之间的差来计算年龄。
MySQL为日期运算提供了函数,因此这并不困难。
另外,存储出生日期还可以适时地提醒你给同事送去生日贺卡。
要建立数据库表可以用CREATETABLE命令,并指定数据表的结构:
mysql>CREATETABLEperson(nameVARCHAR(10),addrVARCHAR(40),
->telVARCHAR(12));
MySQL响应后显示:
“QueryOK,0rowsaffected(0.14sec)”。
VARCHAR对name、addr和tel列是个好的选择,因为列值将会是变长的。
这些列的长度都不必是相同的。
可以挑选从1到255的任何长度。
如果做了不恰当的选择,以后会变成所需的更长的字段(MySQL提供一个ALTERTABLE语句)。
创建了表后,可以用SHOWTABLES来显示它:
mysql>SHOWTABLES;
+------------------+
|Tablesintestdb|
+------------------+
|person|
+------------------+
为了验证表是否按你的期望创建,可以使用DESCRIBE语句:
mysql>DESCRIBEperson;
+---------+-------------+------+-----+---------+-------+
|Field|Type|Null|Key|Default|Extra|
+---------+-------------+------+-----+---------+-------+
|name|varchar(10)|YES||NULL||
|addr|varchar(40)|YES||NULL||
|tel|varchar(12)|YES||NULL||
+---------+-------------+------+-----+---------+-------+
显然,创建的表没有错。
如果忘记了表中列的名字或它们的类型,可以随时用DESCRIBE查看。
3.将数据装入数据表
在创建表后,需要把数据添加到表中。
LOADDATA和INSERT语句具有这种功能。
1)LOADDATA语句
假如我们要添加如下记录:
nameaddrtel
阮家栋古美八村45号301室87654321
章丽萍虹桥路28弄36号12345678
李立本南京路1234号1215室11223344
现在是从一张空表开始的,添加记录的一个比较容易的方法是创建一个包含上述记录的文本文件,然后用一个MySQL语句LOADDATA装载文件的内容到表中。
可以创建一个名为“person.txt”的文本文件,每行包含一个记录,用定位符(tab)把值分开,并且以在CREATETABLE语句中列出的列次序给出。
对于空值,可以使用NULL值(用\N表示)。
为了装载文本文件“person.txt”到person表中,使用如下命令:
mysql>LOADDATALOCALINFILE"G:
/web3/temp/person.txt"INTOTABLEperson;
2)INSERT语句
如果想一次增加一个新记录,可以使用INSERT语句。
最简单的形式,是为每一列提供值,以列在CREATETABLE语句中顺序列出。
假定要添加一个记录“王得利、北京路18弄18号、55667788”到person表中,可以使用如下的INSERT语句:
mysql>INSERTINTOperson
->VALUES(’王得利’,’北京路18弄18号’,’55667788’);
在用INSERT语句时,字符串和日期值被指定为引号括起来的字符串。
另外,可直接插入NULL,代表不存在的值。
不能像用LOADDATA时那样,使用\N。
3从一个数据表检索信息
SELECT语句可以用来从一张表中检索信息。
语句的一般格式如下:
SELECTwhat_to_select
FROMwhich_table
WHEREconditions_to_satisfy
what_to_select指出你想要看到的内容,这可以是一张表的列,或用星号“*”表示“所有的列”。
which_table指出你想要从其检索数据的表。
WHERE子句是可选的,如果存在,则conditions_to_satisfy指定检索条件。
1.选择所有数据
SELECT最简单的形式是从一张表中检索所有的信息:
mysql>SELECT*FROMperson;
+--------+---------------------------+----------+
|name|addr|tel|
+--------+---------------------------+----------+
|阮家栋|古美八村45号301室|87654321|
|章丽萍|虹桥路28弄36号|12345678|
|李立本|南京路1234号1215室|11223344|
|王得利|北京路18弄18号|55667788|
+--------+---------------------------+----------+
如果你想要查看整个表,这种形式的SELECT最方便。
例如,在你刚刚装载了初始数据,检查所有的输入是否正确,就可以用这种形式的SELECT语句。
如果发现错误,而且是文本文件的错误,可以编辑“person.txt”改正错误,然后使用DELETE清空表,并用LOADDATA且再次装载:
mysql>DELETEFROMperson;
mysql>LOADDATALOCALINFILE"person.txt"INTOTABLEperson;
如果仅是个别记录的个别字段有错,可用UPDATE语句修正错误记录,如:
mysql>UPDATEpersonSETtel="44332211"WHEREname="李立本";
如上所示,检索整个表是容易的,但是一般不想那样做,特别是当表很大时。
相反,通常对回答一个特定的问题更感兴趣,这种情况下在想要的信息上指定一些限制。
2.选择特定行
我们可以从表中只选择特定的行。
例如,如果想要验证对李立本的电话号码所做的改变,可以用如下语句:
mysql>SELECT*FROMpersonWHEREname="李立本";
+--------+---------------------------+----------+
|name|addr|tel|
+--------+---------------------------+----------+
|李立本|南京路1234号1215室|44332211|
+--------+---------------------------+----------+
输出证实电话号码现在正确记录为44332211,而不是11223344。
3.选择特定列
如果不想看表的整个行,而列出所需要的列,在SELECT后面加列名,列名之间用逗号分开。
例如,如果想知道所有同事的电话号码,可以只选name和tel列:
mysql>SELECTname,telFROMperson;
+--------+------------+
|name|tel|
+--------+------------+
|阮家栋|87654321|
|章丽萍|12345678|
|李立本|44332211|
|王得利|55667788|
+--------+------------+
4.排序行
你可能已经注意到前面的例子中结果行没有以特定的次序被显示。
为了排序结果,可以使用ORDERBY子句。
如果按照姓名排序:
mysql>SELECT*FROMpersonORDERBYname;
+--------+----------------------------+----------+
|name|addr|tel|
+--------+----------------------------+----------+
|李立本|南京路1234号1215室|44332211|
|阮家栋|古美八村45号301室|87654321|
|王得利|北京路18弄18号|55667788|
|章丽萍|虹桥路28弄36号|12345678|
+--------+----------------------------+----------+
为了以逆序排序,增加DESC(下降)关键字,如:
mysql>SELECT*FROMpersonORDERBYnameDESC;
+--------+----------------------------+----------+
|name|addr|tel|
+--------+----------------------------+----------+
|章丽萍|虹桥路28弄36号|12345678|
|王得利|北京路18弄18号|55667788|
|阮家栋|古美八村45号301室|87654321|
|李立本|南京路1234号1215室|44332211|
+--------+----------------------------+----------+
也可以在多个列上排序,把要求排序的列名写在ORDERBY后面,各列名之间用逗号分隔。
5.日期计算
MySQL提供几个函数,用来执行日期的计算,例如,计算年龄或提取日期的部分。
假如person表中有表示生日的birth字段,为了计算某人的年龄,可以用出生日期和当前日期之间的差来计算。
通过变换两个日期到天数,取差值,并且用365(一年的天数)去除。
如:
mysql>SELECTname,(TO_DAYS(NOW())-TO_DAYS(birth))/365FROMperson;
6.NULL值操作
从概念上讲,NULL意味着“没有值”或“未知值”,且它被看作有点与众不同的值。
为了测试NULL,不能使用算术比较运算符,例如=、<或!
=。
为了说明,试试下列查询:
mysql>SELECT1=NULL,1!
=NULL,1
+----------+-----------+----------+----------+
|1=NULL|1!
=NULL|1
+----------+-----------+----------+----------+
|NULL|NULL|NULL|NULL|
+----------+-----------+----------+----------+
显然,从这些比较中得到毫无意义的结果。
如果使用ISNULL或ISNOTNULL操作符,情况就不同了:
mysql>SELECT1ISNULL,1ISNOTNULL;
+-----------+---------------+
|1ISNULL|1ISNOTNULL|
+-----------+---------------+
|0|1|
+-----------+---------------+
在MySQL中,0意味着“假”,而1意味着“真”。
7.模式匹配
MySQL提供标准的SQL模式匹配,以及一种基于像Unix的实用程序,如vi、grep和sed的扩展正则表达式模式匹配的格式。
SQL的模式匹配允许使用“.”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。
在MySQL中,SQL的模式,缺省是忽略大小写的。
在使用SQL模式时,不能使用=或!
=;而使用LIKE或NOT,如:
mysql>SELECT*FROMpersonWHEREnameLIKE"李%";
将列出所有姓李同事的记录。
扩展正则表达式可用如下一些字符:
1)“.”
匹配任何单个字符。
2)一个字符类“[...]”
匹配在方括号内的任何字符。
例如,“[abc]”匹配“a”、“b”或“c”。
为了命名字符的一个范围,可使用“-”。
如“[a-z]”匹配任何小写字母,而“[0-9]”匹配任何数字。
3)“*”
匹配零个或多个在它前面的东西。
例如,“x*”匹配任何数量的“x”字符,“[0-9]*”匹配的任何数量的数字,而“.*”匹配任何数量的任何东西。
正则表达式是区分大小写的,但是如果希望能使用大小字符进行匹配。
可以使用,“[aA]”或“[a-zA-Z]”之类的匹配方法。
8.行计数
数据库经常用于回答这样的问题,“某个类型的数据在一张表中出现的频度”。
COUNT()函数计数非NULL结果的数目,如果计算person表中记录的个数,可以用如下语句:
mysql>SELECTCOUNT(*)FROMperson;
+----------+
|COUNT(*)|
+----------+
|4|
+----------+
如果person表中有sex(性别)字段,而你想分别统计男、女同事的人数,也可以使用COUNT()函数:
mysql>SELECTsex,COUNT(*)FROMpersonGROUPBYsex;
+--------+----------+
|sex|COUNT(*)|
+--------+----------+
|男|3|
|女|1|
+--------+----------+
4使用多个数据表
person表只记录了同事的姓名、地址和电话。
如果想要记录他们的其他信息,可能需要另外一个表。
这时的查询可能涉及两张表(如person1、person2):
mysql>SELECTperson1.name,person2.dept
->FROMperson1,person2
->WHEREperson1.name=person2.name;
+--------+-------+
|name|dept|
+--------+-------+
|阮家栋|计算机|
|章丽萍|自动化|
|李立本|计算机|
|王得利|自动化|
+--------+-------+
关于此类查询要注意几件事情:
1)FROM子句列出两个表,因为查询需要从两个表中取出信息。
2)当组合(联结-join)来自多个表的信息时,需要指定在一个表中的记录怎样匹配其他表的记录。
这很简单,因为它们都有一个name列。
查询使用WHERE子句基于name值来匹配两个表中的记录。
3)因为name列出现在两个表中,当引用列时,一定要指定哪个表。
这通过把表名附在列名前做到。
5以批处理模式使用MySQL
前面我们交互式地使用MySQL输入查询并且查看结果。
我们也可以以批模式运行mysql。
为此,把你想要运行的命令放在一个文件中,然后告诉MySQL从文件读取它的输入:
shell>mysql 如果你需要在命令行上指定连接参数,命令可以这样写: shell>mysql-hhost-uuser-p Enterpassword: ******** 当你这样使用MySQL时,先要创建了一个脚本文件,然后执行脚本文件。 如果你有一个产生很多输出的查询,可以通过分页器输出: shell>mysql 也可以把查询结果输出到一个文件中作进一步处理: shell>mysql
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MySQL 数据库 操作