MySQL(发音为"MyEssQueEll")是Tcx公司(http://www.tcx.se)开发的一个多人使用、多执行绪的SQL资料库Server。MySQL主要的目标在快速、稳定和容易使用。
一、MySQL的下载
MySQL可在此http://www.mysql.con/取得。
二、MySQL的安装
本文所使用的MySQL版本为mysql-3.22.27.tar.gz(原始码档),作业环境为RedHat6.0+CLE0.8。
MySQL预设情况下会安装至/usr/local目录下,不过为了日后移除方便,建议将mysql独立安装在/usr/local/mysql目录。底下为安装MySQL的步骤:
取得mysql-3.22.27.tar.gz后,于/usr/local目录下解开:
#cd/usr/local
#tarzxvfmysql-3.22.27.tar.gz
#cdmysql-3.22.27
设定configure安装选项,选择安装目录(prefix)以及支持中文Big5码(with-charset=big5):
#./configure--prefix=/usr/local/mysql\
#--with-charset=big5
开始编译并安装:
#make
#makeinstall
#scripts/mysql_install_db
最后一个步骤是用来产生MySQLgranttables(会建立一个mysql资料库和一些tables,用来管理使用MySQL的授权资讯,也就是使用者有哪些使用资料库的权限)。
三、启动、停止MySQL
要启动MySQL的方法:(以本文将MySQL安装在/usr/local/mysql为例)
#/usr/local/mysql/share/mysql.serverstart
注意在第一次执行前,须将mysql.server设成可执行(chmod744mysql.server),另外可将这行指令加在/etc/rc.d/rc.local档中,让MySQL在开机时自动启动。
要停止MySQL的方法:
#/usr/local/mysql/bin/mysqladminshutdown
如果你为MySQLAdministratorroot帐号(非作业系统的root)设了密码,要停止MySQL则必须像下列这样做,MySQL会询问你root的密码后才会执行shutdown的工作:
#/usr/local/mysql/bin/mysqladmin-uroot-pshutdown
四、管理与使用MySQL简介
在你开始前MySQL提供了许多工具(ClientTools)来与MySQL资料库Server连线,其中最主要的为mysql交谈式连线工具与mysqladmin公用程序,大部份时候使用者会用mysql来和资料库Server交谈。底下就以mysql连线工具来介绍如何维护与使用MySQL。(以本文安装为例,mysql工具位于/usr/local/mysql/bin/mysql)。
mysql的使用语法如下:
mysql[-uusername][-hhost][-p[password]][dbname]
MySQL资料库有自己一套使用者帐号与权限管控方法,所以这边所指定的username与password是MySQL的使用者与密码,而不是作业系统的使用者与密码(当然任何使用者都能执行mysql,然后以MySQL的任何帐号进入使用)。
在你第一次安装好MySQL时,MySQL的管理帐号为root,没有设定密码(非作业系统的root)。所以在开始前,请先照下列步骤为root设好密码:
使用mysql与MySQL资料库Server连线:
#/usr/local/mysql/bin/mysql-urootmysql
Readingtableinformationforcompletionoftableandcolumnnames
Youcanturnoffthisfeaturetogetaquickerstartupwith-A
WelcometotheMySQLmonitor.Commandsendwith;or\g.
YourMySQLconnectionidis201toserverversion:3.22.27
Type'help'forhelp.
mysql>
在下了mysql-urootmysql指令,指定以root帐号并开启mysql系统资料库,连线至MySQL后,会看到一些提示讯息与mysql工具的提示符号,以后大部份的工作皆在此提示符号下完成。
(1)更改MySQL系统管理者root密码:
mysql>updateusersetpassword=password('新密码')whereuser='root';
QueryOK,0rowsaffected(0.00sec)
Rowsmatched:2Changed:0Warnings:0
mysql>FLUSHPRIVILEGES;
QueryOK,0rowsaffected(0.00sec)
mysql>quit
Bye
注意每个指令后要加上一个分号";"才会让mysql开始执行。而第二道指令会让已载入记忆体的mysql系统资料库更新,最后离开mysql工具程序。
在更新root密码后,日后要与MySQL连线的方法为:
mysql-uroot-p新密码
或者是这样,让mysql询问root的密码:
mysql-uroot-p
(2)资料库维护
接下来,我们以简单的通讯录资料库作为例子,来介绍如何用mysql工具程序来做资料库的维护(新增、授权、资料表维护等)。
首先,以MySQLroot帐号连线后建立一addbook资料库:
#/usr/local/mysql/bin/mysql-uroot-p
Enterpassword:
WelcometotheMySQLmonitor.Commandsendwith;or\g.
YourMySQLconnectionidis207toserverversion:3.22.27
Type'help'forhelp.
mysql>createdatabaeaddbook;
QueryOK,1rowaffected(0.00sec)
指定使用addbook资料库,并建立一个friends资料表:
mysql>useaddbook;
Databasechanged
mysql>createtablefriends(
->nameChar(15),
->telphoneVarChar(20),
->icqChar(10),
->addressVarChar(30)
->);
QueryOK,0rowsaffected(0.00sec)
新增几笔资料,并查询看看:
mysql>insertintofriendsvalues(
->"maa","29016710","46243046","台北县新庄市"
->);
QueryOK,1rowaffected(0.00sec)
mysql>insertintofriends(name,icq,telphone,address)Values(
->"cxlin","39425893","7654321","台北县"
->);
QueryOK,1rowaffected(0.01sec)
mysql>select*fromfriends;
+-------+----------+----------+--------------+
|name|telphone|icq|address|
+-------+----------+----------+--------------+
|maa|29016710|46243046|台北县新庄市|
|cxlin|7654321|39425893|台北县|
+-------+----------+----------+--------------+
2rowsinset(0.00sec)
第二个insert指令指定了资料栏位的插入顺序,用法较第一个为弹性,而第一个指令必须依资料表建立结构时的顺序插入资料。
更新、删除资料表记录:
mysql>updatefriendssetaddress="桃园县"wherename="cxlin";
QueryOK,1rowaffected(0.00sec)
Rowsmatched:1Changed:1Warnings:0
mysql>select*fromfriendswherename="cxlin";
+-------+----------+----------+---------+
|name|telphone|icq|address|
+-------+----------+----------+---------+
|cxlin|7654321|39425893|桃园县|
+-------+----------+----------+---------+
1rowinset(0.00sec)
mysql>deletefromfriendswherename="maa";
QueryOK,1rowaffected(0.01sec)
mysql>select*fromfriends;
+-------+----------+----------+---------+
|name|telphone|icq|address|
+-------+----------+----------+---------+
|cxlin|7654321|39425893|桃园县|
+-------+----------+----------+---------+
1rowinset(0.00sec)
最后,建好资料库与资料表后,把addbook资料库中所有资料表的使用权限(select、insert、update、delete)授权给maa@localhost(再次提醒,此处的maa为MySQL的使用者帐号,而非作业系统的maa帐号):
mysql>grantselect,insert,update,delete
->onaddbook.*
->tomaa@localhostidentifiedby'1234567';
QueryOK,0rowsaffected(0.00sec)
之后,可用maa的身份进入MySQL存取addbook资料库:
#/usr/local/mysql/bin/mysql-umaa-paddbook
Enterpassword:
Readingtableinformationforcompletionoftableandcolumnnames
Youcanturnoffthisfeaturetogetaquickerstartupwith-A
WelcometotheMySQLmonitor.Commandsendwith;or\g.
YourMySQLconnectionidis211toserverversion:3.22.27
Type'help'forhelp.
mysql>status
--------------
./mysqlVer9.36Distrib3.22.27,forpc-linux-gnu(i686)
Connectionid:26
Currentdatabase:addbook
Currentuser:maa@localhost
Serverversion3.22.27
Protocolversion10
ConnectionLocalhostviaUNIXsocket
UNIXsocket/tmp/mysql.sock
Uptime:2hours29min33sec
Threads:11Questions:107Slowqueries:0Opens:11Flushtables:1
Open7
--------------
收回资料库使用权限的方法如下(以MySQLroot进入):
mysql>revokedeleteonaddbook.*frommaa@localhost;
QueryOK,0rowsaffected(0.00sec)
mysql>revokeallprivilegesonaddbook.*frommaa@localhost;
QueryOK,0rowsaffected(0.00sec)
第二个指令用来收回全部的权限。
五、mysqladmin公用程序的使用
mysqladmin公用程序可用来维护MySQL比较一般性的工作(新增、删除资料库、设定使用者密码及停止MySQL等等),详细的说明可以使用mysqladmin--help来查看。(以本文的安装为例mysqladmin位于/usr/local/mysql/bin/mysqladmin)。
新增资料库dbtest
#/usr/local/mysql/bin/mysqladmin-uroot-pcreatedbtest
Enterpassword:
Database"dbtest"created.
删除资料库
#/usr/local/mysql/bin/mysqladmin-uroot-pdropdbtest
Enterpassword:
Droppingthedatabaseispotentiallyaverybadthingtodo.
Anydatastoredinthedatabasewillbedestroyed.
Doyoureallywanttodropthe'dbtest'database[y/N]
y
Database"dbtest"dropped
设定使用者密码(将maa的密码改为7654321,mysqladmin会先询问maa的原密码)
#/usr/local/mysql/bin/mysqladmin-umaa-ppassword7654321
Enterpassword:
#
停止MySQL服务
#./mysqladmin-uroot-pshutdown
Enterpassword:
注意,shutdownMySQL后,必须由作业系统的root帐号执行下列指令才能启动MySQL:
/usr/local/mysql/share/mysql/mysql.serverstart
六、结语:
MySQL资料库的确是值得推广的一个产品,它的稳定性已经稳得大家的赞同,只要你曾经学习过SQLLanguage(结构化查询语言),相信要摸熟MySQL的使用只消一两个小时的时间。如果搭配PHP(PersonalHomePageProgram)和ApacheWebServer,更可很轻松建构一个与资料库结合的动态WebSite。如果再配合phpMyAdmin这个Web化的MySQL管理工具,建立MySQL的资料库和MySQL的管理将会更加方便。
MySQL数据类型
*数值类型
*字符串类型
*日期和时间类型
*复合类型
下面几节详细分析这些分类中的每一种类型。
数值类型
MySQL的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且MySQL允许我们指定数值字段中的值是否有正负之分或者用零填补。
表列出了各种数值类型以及它们的允许范围和占用的内存空间。
类型大小范围(有符号)范围(无符号)用途
TINYINT1字节(-128,127)(0,255)小整数值
SMALLINT2字节(-32768,32767)(0,65535)大整数值
MEDIUMINT3字节(-8388608,8388607)(0,16777215)大整数值
INT或INTEGER4字节(-2147483648,2147483647)(0,4294967295)大整数值
BIGINT8字节(-9233372036854775808,9223372036854775807)(0,18446744073709551615)极大整数值
FLOAT4字节(-3.402823466E+38,1.175494351E-38),0,(1.175494351E-38,3.402823466351E+38)0,(1.175494351E-38,3.402823466E+38)单精度
浮点数值
DOUBLE8字节(1.7976931348623157E+308,2.2250738585072014E-308),0,(2.2250738585072014E-308,1.7976931348623157E+308)0,(2.2250738585072014E-308,1.7976931348623157E+308)双精度
浮点数值
DECIMAL对DECIMAL(M,D),如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值
INT类型
在MySQL中支持的5个主要整数类型是TINYINT,SMALLINT,MEDIUMINT,INT和BIGINT。这些类型在很大程度上是相同的,只有它们存储的值的大小是不相同的。
MySQL以一个可选的显示宽度指示器的形式对SQL标准进行扩展,这样当从数据库检索一个值时,可以把这个值加长到指定的长度。例如,指定一个字段的类型为INT(6),就可以保证所包含数字少于6个的值从数据库中检索出来时能够自动地用空格填充。需要注意的是,使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。
万一我们需要对一个字段存储一个超出许可范围的数字,MySQL会根据允许范围最接近它的一端截短后再进行存储。还有一个比较特别的地方是,MySQL会在不合规定的值插入表前自动修改为0。
UNSIGNED修饰符规定字段只保存正值。因为不需要保存数字的正、负符号,可以在储时节约一个“位”的空间。从而增大这个字段可以存储的值的范围。
ZEROFILL修饰符规定0(不是空格)可以用来真补输出的值。使用这个修饰符可以阻止MySQL数据库存储负值。
FLOAT、DOUBLE和DECIMAL类型
MySQL支持的三个浮点类型是FLOAT、DOUBLE和DECIMAL类型。FLOAT数值类型用于表示单精度浮点数值,而DOUBLE数值类型用于表示双精度浮点数值。
与整数一样,这些类型也带有附加参数:一个显示宽度指示器和一个小数点指示器。比如语句FLOAT(7,3)规定显示的值不会超过7位数字,小数点后面带有3位数字。
对于小数点后面的位数超过允许范围的值,MySQL会自动将它四舍五入为最接近它的值,再插入它。
DECIMAL数据类型用于精度要求非常高的计算中,这种类型允许指定数值的精度和计数方法作为选择参数。精度在这里指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的位数。比如语句DECIMAL(7,3)规定了存储的值不会超过7位数字,并且小数点后不超过3位。
忽略DECIMAL数据类型的精度和计数方法修饰符将会使MySQL数据库把所有标识为这个数据类型的字段精度设置为10,计算方法设置为0。
UNSIGNED和ZEROFILL修饰符也可以被FLOAT、DOUBLE和DECIMAL数据类型使用。并且效果与INT数据类型相同。
字符串类型
MySQL提供了8个基本的字符串类型,可以存储的范围从简单的一个字符到巨大的文本块或二进制字符串数据。
类型大小用途
CHAR0-255字节定长字符串
VARCHAR0-255字节变长字符串
TINYBLOB0-255字节不超过255个字符的二进制字符串
TINYTEXT0-255字节短文本字符串
BLOB0-65535字节二进制形式的长文本数据
TEXT0-65535字节长文本数据
MEDIUMBLOB0-16777215字节二进制形式的中等长度文本数据
MEDIUMTEXT0-16777215字节中等长度文本数据
LOGNGBLOB0-4294967295字节二进制形式的极大文本数据
LONGTEXT0-4294967295字节极大文本数据
CHAR和VARCHAR类型
CHAR类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围从0-255。比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补。
CHAR类型可以使用BINARY修饰符。当用于比较运算时,这个修饰符使CHAR以二进制方式参于运算,而不是以传统的区分大小写的方式。
CHAR类型的一个变体是VARCHAR类型。它是一种可变长度的字符串类型,并且也必须带有一个范围在0-255之间的指示器。CHAR和VARCHGAR不同之处在于MuSQL数据库处理这个指示器的方式:CHAR把这个大小视为值的大小,不长度不足的情况下就用空格补足。而VARCHAR类型把它视为最大值并且只使用存储字符串实际需要的长度(增加一个额外字节来存储字符串本身的长度)来存储值。所以短于指示器长度的VARCHAR类型不会被空格填补,但长于指示器的值仍然会被截短。
因为VARCHAR类型可以根据实际内容动态改变存储值的长度,所以在不能确定字段需要多少字符时使用VARCHAR类型可以大大地节约磁盘空间、提高存储效率。
VARCHAR类型在使用BINARY修饰符时与CHAR类型完全相同。
TEXT和BLOB类型
对于字段长度要求超过255个的情况下,MySQL提供了TEXT和BLOB两种类型。根据存储数据的大小,它们都有不同的子类型。这些大型的数据用于存储文本块或图像、声音文件等二进制数据类型。
TEXT和BLOB类型在分类和比较上存在区别。BLOB类型区分大小写,而TEXT不区分大小写。大小修饰符不用于各种BLOB和TEXT子类型。比指定类型支持的最大范围大的值将被自动截短。
日期和时间类型
在处理日期和时间类型的值时,MySQL带有5个不同的数据类型可供选择。它们可以被分成简单的日期、时间类型,和混合日期、时间类型。根据要求的精度,子类型在每个分类型中都可以使用,并且MySQL带有内置功能可以把多样化的输入格式变为一个标准格式。
类型大小
(字节)范围格式用途
DATE31000-01-01/9999-12-31YYYY-MM-DD日期值
TIME3'-838:59:59'/'838:59:59'HH:MM:SS时间值或持续时间
YEAR11901/2155YYYY年份值
DATETIME81000-01-0100:00:00/9999-12-3123:59:59YYYY-MM-DDHH:MM:SS混合日期和时间值
TIMESTAMP81970-01-0100:00:00/2037年某时YYYYMMDDHHMMSS混合日期和时间值,时间戳
DATE、TIME和TEAR类型
MySQL用DATE和TEAR类型存储简单的日期值,使用TIME类型存储时间值。这些类型可以描述为字符串或不带分隔符的整数序列。如果描述为字符串,DATE类型的值应该使用连字号作为分隔符分开,而TIME类型的值应该使用冒号作为分隔符分开。
需要注意的是,没有冒号分隔符的TIME类型值,将会被MySQL理解为持续的时间,而不是时间戳。
MySQL还对日期的年份中的两个数字的值,或是SQL语句中为TEAR类型输入的两个数字进行最大限度的通译。因为所有TEAR类型的值必须用4个数字存储。MySQL试图将2个数字的年份转换为4个数字的值。把在00-69范围内的值转换到2000-2069范围内。把70-99范围内的值转换到1970-1979之内。如果MySQL自动转换后的值并不符合我们的需要,请输入4个数字表示的年份。
DATEYIME和TIMESTAMP类型
除了日期和时间数据类型,MySQL还支持DATEYIME和TIMESTAMP这两种混合类型。它们可以把日期和时间作为单个的值进行存储。这两种类型通常用于自动存储包含当前日期和时间的时间戳,并可在需要执行大量数据库事务和需要建立一个调试和审查用途的审计跟踪的应用程序中发挥良好作用。
如果我们对TIMESTAMP类型的字段没有明确赋值,或是被赋与了null值。MySQL会自动使用系统当前的日期和时间来填充它。
复合类型
MySQL还支持两种复合数据类型ENUM和SET,它们扩展了SQL规范。虽然这些类型在技术上是字符串类型,但是可以被视为不同的数据类型。一个ENUM类型只允许从一个集合中取得一个值;而SET类型允许从一个集合中取得任意多个值。
ENUM类型
ENUM类型因为只允许在集合中取得一个值,有点类似于单选项。在处理相互排拆的数据时容易让人理解,比如人类的性别。ENUM类型字段可以从集合中取得一个值或使用null值,除此之外的输入将会使MySQL在这个字段中插入一个空字符串。另外如果插入值的大小写与集合中值的大小写不匹配,MySQL会自动使用插入值的大小写转换成与集合中大小写一致的值。
ENUM类型在系统内部可以存储为数字,并且从1开始用数字做索引。一个ENUM类型最多可以包含65536个元素,其中一个元素被MySQL保留,用来存储错误信息,这个错误值用索引0或者一个空字符串表示。
MySQL认为ENUM类型集合中出现的值是合法输入,除此之外其它任何输入都将失败。这说明通过搜索包含空字符串或对应数字索引为0的行就可以很容易地找到错误记录的位置。
SET类型
SET类型与ENUM类型相似但不相同。SET类型可以从预定义的集合中取得任意数量的值。并且与ENUM类型相同的是任何试图在SET类型字段中插入非预定义的值都会使MySQL插入一个空字符串。如果插入一个即有合法的元素又有非法的元素的记录,MySQL将会保留合法的元素,除去非法的元素。
一个SET类型最多可以包含64项元素。在SET元素中值被存储为一个分离的“位”序列,这些“位”表示与它相对应的元素。“位”是创建有序元素集合的一种简单而有效的方式。并且它还去除了重复的元素,所以SET类型中不可能包含两个相同的元素。
希望从SET类型字段中找出非法的记录只需查找包含空字符串或二进制值为0的行。
MySQL常用命令
一、连接MYSQL。
格式:mysql-h主机地址-u用户名-p用户密码
1、例1:连接到本机上的MYSQL。
首先在打开DOS窗口,然后进入目录mysqlbin,再键入命令mysql-uroot-p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是
mysql>
2、例2:连接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入以下命令:
mysql-h110.110.110.110-uroot-pabcd123
(注:u与root可以不用加空格,其它也一样)
3、退出MYSQL命令:exit(回车)
二、修改密码。
格式:mysqladmin-u用户名-p旧密码password新密码
1、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,然后键入以下命令
mysqladmin-uroot-passwordab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
2、例2:再将root的密码改为djg345。
mysqladmin-uroot-pab12passworddjg345
三、增加新用户。(注意:和上面不同,下面的因为是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\"\";
在上篇我们讲了登录、增加用户、密码更改等问题。下篇我们来看看MYSQL中有关数据库方面的操作。注意:你必须首先登录到MYSQL中,以下操作都是在MYSQL的提示符下进行的,而且每个命令以分号结束。
一、操作技巧
1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就OK。
2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MYSQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。
二、显示命令
1、显示数据库列表。
showdatabases;
刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
2、显示库中的数据表:
usemysql;//打开库,学过FOXBASE的一定不会陌生吧
showtables;
3、显示数据表的结构:
describe表名;
4、建库:
createdatabase库名;
5、建表:
use库名;
createtable表名(字段设定列表);
6、删库和删表:
dropdatabase库名;
droptable表名;
7、将表中记录清空:
deletefrom表名;
8、显示表中的记录:
select*from表名;
三、一个建库和建表以及插入数据的实例
dropdatabaseifexistsschool;//如果存在SCHOOL则删除
createdatabaseschool;//建立库SCHOOL
useschool;//打开库SCHOOL
createtableteacher//建立表TEACHER
(idint(3)auto_incrementnotnullprimarykey,
namechar(10)notnull,
addressvarchar(50)default'深圳',
yeardate);//建表结束
//以下为插入字段
insertintoteachervalues('','glchengang','深圳一中','1976-10-10');
insertintoteachervalues('','jack','深圳一中','1975-12-23');
注:在建表中(1)将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:notnull而且让他成为主字段primarykey(2)将NAME设为长度为10的字符字段(3)将ADDRESS设为长度50的字符字段,而且缺省值为深圳。(4)将YEAR设为日期字段。
如果你在mysql提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql,然后复制到c:\\下,并在DOS状态进入目录\\mysql\\bin,然后键入以下命令:
mysql-uroot-p密码<c:\\school.sql
如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将//的注释去掉即可使用)。
四、将文本数据转到数据库中
1、文本数据应符合的格式:字段数据之间用tab键隔开,null值用\\n来代替.
例:
3rose深圳二中1976-10-10
4mike深圳一中1975-12-23
2、数据传入命令loaddatalocalinfile\"文件名\"intotable表名;
注意:你最好将文件复制到\\mysql\\bin目录下,并且要先用use命令打表所在的库。
五、备份数据库:(命令在DOS的\\mysql\\bin目录下执行)
mysqldump--optschool>school.bbb
注释:将数据库school备份到school.bbb文件,school.bbb是一个文本文件,文件名任取,打开看看你会有新发现。
后记:其实MYSQL的对数据库的操作与其它的SQL类数据库大同小异,您最好找本将SQL的书看看。我在这里只介绍一些基本的,其实我也就只懂这些了,呵呵。最好的MYSQL教程还是"晏子"译的"MYSQL中文参考手册"不仅免费每个相关网站都有下载,而且它是最权威的。可惜不是象\"PHP4中文手册\"那样是chm的格式,在查找函数命令的时候不太方便。
Mysql语法参考
一、资料定义DDL(datadefinitionlanguage)
资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什么栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。
[1]、建表格:
createtabletable_name(
column1datatype[notnull][notnullprimarykey],
column2datatype[notnull],...)
说明:
datatype--是资料的格式,详见表。
nutnull--可不可以允许资料有空的(尚未有资料填入)。
primarykey--是本表的主键。
[2]、更改表格
altertabletable_name
addcolumncolumn_namedatatype
说明:增加一个栏位(没有删除某个栏位的语法。
altertabletable_name
addprimarykey(column_name)
说明:更改表得的定义把某个栏位设为主键。
altertabletable_name
dropprimarykey(column_name)
说明:把主键的定义删除。
[3]、建立索引
createindexindex_nameontable_name(column_name)
说明:对某个表格的栏位建立索引以增加查询时的速度。
[4]、删除
droptable_name
dropindex_name
二、的资料形态datatypes
smallint16位的整数。
interger32位的整数。
decimal(p,s)p精确值和s大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点后有几位数。如果没有特别指定,则系统会设为p=5;s=0。
float32位的实数。
double64位的实数。
char(n)n长度的字符串,n不能超过254。
varchar(n) 长度不固定且其最大长度为n的字符串,n不能超过4000。
graphic(n) 和char(n)一样,不过其单位是两个字符double-bytes,n不能超过127。这个形态是为
了支持两个字符长度的字体,例如中文字。
vargraphic(n) 可变长度且其最大长度为n的双字符字符串,n不能超过2000。
date 包含了年份、月份、日期。
time 包含了小时、分钟、秒。
timestamp 包含了年、月、日、时、分、秒、千分之一秒。
三、资料操作dml(datamanipulationlanguage)
资料定义好之后接下来的就是资料的操作。资料的操作不外乎增加资料(insert)、查询资料(query)、更改资料(update)、删除资料(delete)四种模式,以下分别介绍他们的语法:
[1]、增加资料:
insertintotable_name(column1,column2,...)values(value1,value2,...)
说明:
1.若没有指定column系统则会按表格内的栏位顺序填入资料。
2.栏位的资料形态和所填入的资料必须吻合。
3.table_name也可以是景观view_name。
insertintotable_name(column1,column2,...)
selectcolumnx,columny,...fromanother_table
说明:也可以经过一个子查询(subquery)把别的表格的资料填入。
[2]、查询资料:
基本查询
selectcolumn1,columns2,...
fromtable_name
说明:把table_name的特定栏位资料全部列出来
select*fromtable_namewherecolumn1=xxx[andcolumn2>yyy][orcolumn3<>zzz]
说明:
1.'*'表示全部的栏位都列出来。
2.where之后是接条件式,把符合条件的资料列出来。
selectcolumn1,column2fromtable_nameorderbycolumn2[desc]
说明:orderby是指定以某个栏位做排序,[desc]是指从大到小排列,若没有指明,则是从小到大排列
组合查询
组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的
表格才能够得到结果的。
select*
fromtable1,table2wheretable1.colum1=table2.column1
说明:
1.查询两个表格中其中column1值相同的资料。
2.当然两个表格相互比较的栏位,其资料形态必须相同。
3.一个复杂的查询其动用到的表格可能会很多个。
整合性的查询:
selectcount(*)fromtable_namewherecolumn_name=xxx
说明:
查询符合条件的资料共有几笔。
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_name1whereexists(select*fromtable_name2whereconditions)
说明:
1.where的conditions可以是另外一个的query。
2.exists在此是指存在与否。
select*fromtable_name1wherecolumn1in(selectcolumn1fromtable_name2whereconditions)
说明:
1.in后面接的是一个集合,表示column1存在集合里面。
2.select出来的资料形态必须符合column1。
其它查询
select*fromtable_name1wherecolumn1like'x%'
说明:like必须和后面的'x%'相呼应表示以x为开头的字符串。
MySQL创建、删除和选择数据库
MySQL提供了三条数据库级的语句,它们分别是:CREATEDATABASE用于创建数据库,DROPDATABASE用于删除数据库,USE用于选择缺省数据库。
1.CREATEDATABASE语句
创建一个数据库很容易;只要在CREATEDATABASE语句中给出其名称即可。其中限制条件是该数据库的名称必须是合法的,该数据库必须不存在,并且您必须有足够的权限来创建它。
2.DROPDATABASE语句
删除数据库就像创建它一样容易,假如有权限,执行下列语句即可。请注意,不要乱用DROPDATABASE语句,它将会删除数据库及其所有的表。在删除了一个数据库后,该数据库就永远没有了。换句话说,不要仅为了看看这条语句如何工作就试着执行该语句。如果管理员已经正常完成了数据库备份,那么删除的数据库可能还可以恢复。
请注意,数据库是由数据目录中的一个目录表示的。如果在该目录中放置了一些非表的数据文件,它们是不会被DROPDATABASE语句删除的。此时,该数据库目录自身也不被删除。
3.USE语句
USE语句选择一个数据库,使其成为服务器的给定连接的缺省(当前)数据库。必须对数据库具有某种访问权限,否则不能使用它。为了使用数据库中的表而选择该数据库实际上不是必须的,因为可以利用db_name.tbl_name形式来引用它的表。但是,不必指定数据库限定词引用表要方便得多。选择一个缺省数据库并不代表在连接的持续时间内它都必须是缺省的。可发布任意数目的USE语句在数据库之间进行任意地切换,只要具有使用它们的权限即可。选择一个数据库也不限制您只使用该数据库中的表。您仍然可以通过用数据库名限定表名的方法,引用其它数据库中的表。
在服务器的连接终止时,服务器关于缺省数据库的所有记忆都消失了。即,如果您再次连接到该服务器,它不会记住以前您所选择的数据库。事实上,假定MySQL是多线程的,可通过一个用户处理多个连接,用户可以按任何顺序连接或断开,让服务器对缺省数据库进行记忆的想法也是没有意义的。在这个环境中,“以前选择的数据库”这句话指什么并不清楚。
Driver:com.mysql.jdbc.Driver
URL:jdbc:mysql://192.168.2.43:3306/mysql
<?xmlversion='1.0'encoding='UTF-8'?>
<!DOCTYPEhibernate-configurationPUBLIC
"-//Hibernate/HibernateConfigurationDTD3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!--GeneratedbyMyEclipseHibernateTools.-->
<hibernate-configuration>
<session-factory>
<propertyname="connection.username">root</property>
<propertyname="connection.url">
jdbc:mysql://localhost:3306/test
</property>
<propertyname="dialect">
org.hibernate.dialect.MySQLDialect
</property>
<propertyname="connection.useUnicode">true</property>
<propertyname="connection.characterEncoding">utf-8</property>
<propertyname="myeclipse.connection.profile">mysql</property>
<propertyname="connection.password"></property>
<propertyname="connection.driver_class">
com.mysql.jdbc.Driver
</property>
<mappingresource="crm/pojo/Customer.hbm.xml"/>
</session-factory>
</hibernate-configuration>
名称 | 长度 | 用法 |
TINYINT(M) BIT,BOOL,BOOLEAN | 1 | 如果为无符号数,可以存储从0到255的数; 否则可以存储从-128到127的数。 |
SMALLINT(M) | 2 | 如果为无符号数,可以存储从0到65535的数;否则可以存储从-32768到32767的数。 |
MEDIUMINT(M) | 3 | 如果为无符号数,可以存储从0到16777215的数;否则可以存储从-8388608到8388607的数 |
INT(M) INTEGER(M) | 4 | 如果为无符号数,可以存储从0到4294967295的数,否则可以存储从-2147483648到2147483647的数。 |
BIGINT(M) | 8 | 如果为无符号数,可以存储从0到18446744073709551615的数,否则可以存储从-9223372036854775808到9223372036854775807的数。 |
FLOAT(precision) | 4或8 | 这里的precision是可以直达53的整数。如果precision<=24则转换为FLOAT,如果precision>24并且precision<=53则转换为DOUBLE。 |
FLOAT(M,D) | 4 | 单精度浮点数。 |
DOUBLE(M,D), DOUBLEPRECISION, REAL | 8 | 双精度浮点。 |
DECIMAL(M,D), DEC,NUMERIC,FIXED | M+1或M+2 | 未打包的浮点数。 |
DATE | 3 | 以YYYY-MM-DD的格式显示。 |
DATETIME HH:MM:SS | 8 | 以YYYY-MM-DD的格式显示。 |
TIMESTAMP | 4 | 以YYYY-MM-DD的格式显示。 |
TIME | 3 | 以HH:MM:SS的格式显示。 |
YEAR | 1 | 以YYYY的格式显示。 |
CHAR(M) | M | 定长字符串。 |
VARCHAR(M) | 最大M | 变长字符串。M<=255. |
TINYBLOB, TINYTEXT | 最大255 | TINYBLOB为大小写敏感,而TINYTEXT不是大小写敏感的。 |
BLOB, TEXT | 最大64K | BLOB为大小敏感的,而TEXT不是大小写敏感的。 |
MEDIUMBLOB, MEDIUMTEXT | 最大16M | MEDIUMBLOB为大小写敏感的,而MEDIUMTEXT不是大小敏感的。 |
LONGBLOB, LONGTEXT | 最大4G | LONGBLOB为大小敏感的,而LONGTEXT不是大小敏感的。 |
ENUM(VALUE1,….) | 1或2 | 最大可达65535个不同的值。 |
SET(VALUE1,….) | 可达8 | 最大可达64个不同的值。 |