﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Asktalk-随笔分类-DB</title><link>http://www.blogjava.net/asktalk/category/2813.html</link><description>&lt;span class="STYLE3"&gt;天行健，君子以自强不息！&lt;/span&gt;</description><language>zh-cn</language><lastBuildDate>Fri, 21 Dec 2007 17:37:52 GMT</lastBuildDate><pubDate>Fri, 21 Dec 2007 17:37:52 GMT</pubDate><ttl>60</ttl><item><title>MySQL常用命令</title><link>http://www.blogjava.net/asktalk/archive/2007/12/21/169201.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Thu, 20 Dec 2007 17:50:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2007/12/21/169201.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/169201.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2007/12/21/169201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/169201.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/169201.html</trackback:ping><description><![CDATA[<p style="text-indent: 2em">有很多朋友虽然安装好了mysql但却不知如何使用它。在这篇文章中我们就从连接MYSQL、修改密码、增加用户等方面来学习一些MYSQL的常用命令。 <br />
<br />
<strong>一、连接MYSQL。</strong> </p>
<p style="color: red; text-indent: 2em">格式： mysql -h主机地址 -u用户名 －p用户密码 </p>
<p style="text-indent: 2em">1、例1：连接到本机上的MYSQL。 </p>
<p style="text-indent: 2em">首先在打开DOS窗口，然后进入目录 mysqlbin，再键入命令mysql -uroot -p，回车后提示你输密码，如果刚安装好MYSQL，超级用户root是没有密码的，故直接回车即可进入到MYSQL中了，MYSQL的提示符是：mysql&gt; </p>
<p style="text-indent: 2em">2、例2：连接到远程主机上的MYSQL。假设远程主机的IP为：110.110.110.110，用户名为root,密码为abcd123。则键入以下命令： </p>
<p style="text-indent: 2em">mysql -h110.110.110.110 -uroot -pabcd123 </p>
<p style="text-indent: 2em">（注:u与root可以不用加空格，其它也一样） </p>
<p style="text-indent: 2em">3、退出MYSQL命令： exit （回车） <br />
<br />
<strong>二、修改密码。</strong> </p>
<p style="color: red; text-indent: 2em">格式：mysqladmin -u用户名 -p旧密码 password 新密码 </p>
<p style="text-indent: 2em">1、例1：给root加个密码ab12。首先在DOS下进入目录mysqlbin，然后键入以下命令 </p>
<p style="text-indent: 2em">mysqladmin -uroot -password ab12 </p>
<p style="text-indent: 2em">注：因为开始时root没有密码，所以-p旧密码一项就可以省略了。 </p>
<p style="text-indent: 2em">2、例2：再将root的密码改为djg345。 </p>
<p style="text-indent: 2em">mysqladmin -uroot -pab12 password djg345<br />
<br />
<strong>三、增加新用户。<br />
</strong>（注意：和上面不同，下面的因为是MYSQL环境中的命令，所以后面都带一个分号作为命令结束符） </p>
<p style="color: red; text-indent: 2em">格式：grant select on 数据库.* &nbsp;to&nbsp; 用户名@登录主机 &nbsp;identified by&nbsp; \"密码\" </p>
<p style="text-indent: 2em">例1、增加一个用户test1密码为abc，让他可以在任何主机上登录，并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL，然后键入以下命令： </p>
<p style="text-indent: 2em">grant select,insert,update,delete on *.* to test1@\"%\" Identified by \"abc\"; </p>
<p style="text-indent: 2em">但例1增加的用户是十分危险的，你想如某个人知道test1的密码，那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了，解决办法见例2。 </p>
<p style="text-indent: 2em">例2、增加一个用户test2密码为abc,让他只可以在localhost上登录，并可以对数据库mydb进行查询、插入、修改、删除的操作（localhost指本地主机，即MYSQL数据库所在的那台主机），这样用户即使用知道test2的密码，他也无法从internet上直接访问数据库，只能通过MYSQL主机上的web页来访问了。 </p>
<p style="text-indent: 2em">grant select,insert,update,delete on mydb.* to test2@localhost identified by \"abc\"; </p>
<p style="text-indent: 2em">如果你不想test2有密码，可以再打一个命令将密码消掉。 </p>
<p style="text-indent: 2em">grant select,insert,update,delete on mydb.* to test2@localhost identified by \"\"; <br />
</p>
<p style="text-indent: 2em"><br />
<br />
在上篇我们讲了登录、增加用户、密码更改等问题。下篇我们来看看MYSQL中有关数据库方面的操作。注意：你必须首先登录到MYSQL中，以下操作都是在MYSQL的提示符下进行的，而且每个命令以分号结束。 <br />
<br />
<strong>一、操作技巧</strong> </p>
<p style="text-indent: 2em">1、如果你打命令时，回车后发现忘记加分号，你无须重打一遍命令，只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打，完后用分号作结束标志就OK。 </p>
<p style="text-indent: 2em">2、你可以使用光标上下键调出以前的命令。但以前我用过的一个MYSQL旧版本不支持。我现在用的是mysql-3.23.27-beta-win。<br />
<br />
<strong>二、显示命令</strong> </p>
<p style="text-indent: 2em">1、显示数据库列表。 </p>
<p style="color: red; text-indent: 2em">show databases; </p>
<p style="text-indent: 2em">刚开始时才两个数据库：mysql和test。mysql库很重要它里面有MYSQL的系统信息，我们改密码和新增用户，实际上就是用这个库进行操作。 </p>
<p style="text-indent: 2em">2、显示库中的数据表： </p>
<p style="text-indent: 2em"><span style="color: red">use mysql；</span> ／／打开库，学过FOXBASE的一定不会陌生吧 </p>
<p style="text-indent: 2em"><span style="color: red">show tables; </span></p>
<p style="text-indent: 2em">3、显示数据表的结构： </p>
<p style="text-indent: 2em"><span style="color: red">describe 表名; </span></p>
<p style="text-indent: 2em">4、建库： </p>
<p style="text-indent: 2em"><span style="color: red">create database 库名; </span></p>
<p style="text-indent: 2em">5、建表： </p>
<p style="text-indent: 2em"><span style="color: red">use 库名； </span></p>
<p style="text-indent: 2em"><span style="color: red">create table 表名 (字段设定列表)；</span> </p>
<p style="text-indent: 2em">6、删库和删表: </p>
<p style="text-indent: 2em"><span style="color: red">drop database 库名; </span></p>
<p style="text-indent: 2em"><span style="color: red">drop table 表名；</span> </p>
<p style="text-indent: 2em">7、将表中记录清空： </p>
<p style="text-indent: 2em"><span style="color: red">delete from 表名; </span></p>
<p style="text-indent: 2em">8、显示表中的记录： </p>
<p style="text-indent: 2em"><span style="color: red">select * from 表名; <br />
<br />
从文本文件执行SQL语句<br />
</span></p>
<p style="text-indent: 2em">三、一个建库和建表以及插入数据的实例 </p>
<p style="text-indent: 2em"></p>
<center><ccid_nobr></ccid_nobr>
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" style="font-size: 9pt" bgcolor="#e6e6e6">
            <pre><ccid_code>drop database if exists school; //如果存在SCHOOL则删除 <br />
            create database school; //建立库SCHOOL <br />
            use school; //打开库SCHOOL <br />
            create table teacher //建立表TEACHER <br />
            ( <br />
            id int(3) auto_increment not null primary key, <br />
            name char(10) not null, <br />
            address varchar(50) default '深圳', <br />
            year date <br />
            ); //建表结束 <br />
            //以下为插入字段 <br />
            insert into teacher values('','glchengang','深圳一中','1976-10-10'); <br />
            insert into teacher values('','jack','深圳一中','1975-12-23');</ccid_code></pre>
            </td>
        </tr>
    </tbody>
</table>
</center>
<p style="text-indent: 2em">注：在建表中（1）将ID设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key（2）将NAME设为长度为10的字符字段（3）将ADDRESS设为长度50的字符字段，而且缺省值为深圳。varchar和char有什么区别呢，只有等以后的文章再说了。（4）将YEAR设为日期字段。 </p>
<p style="text-indent: 2em">如果你在mysql提示符键入上面的命令也可以，但不方便调试。你可以将以上命令原样写入一个文本文件中假设为school.sql，然后复制到c:\\下，并在DOS状态进入目录\\mysql\\bin，然后键入以下命令： </p>
<p style="text-indent: 2em">mysql -uroot -p密码 &lt; c:\\school.sql </p>
<p style="text-indent: 2em">如果成功，空出一行无任何显示；如有错误，会有提示。（以上命令已经调试，你只要将//的注释去掉即可使用）。<br />
<br />
<strong>四、将文本数据转到数据库中</strong> </p>
<p style="text-indent: 2em">1、文本数据应符合的格式：字段数据之间用tab键隔开，null值用\\n来代替. </p>
<p style="text-indent: 2em">例： </p>
<p style="text-indent: 2em">3 rose 深圳二中 1976-10-10 </p>
<p style="text-indent: 2em">4 mike 深圳一中 1975-12-23 </p>
<p style="text-indent: 2em">2、数据传入命令 load data local infile \"文件名\" into table 表名; </p>
<p style="text-indent: 2em">注意：你最好将文件复制到\\mysql\\bin目录下，并且要先用use命令打表所在的库。 </p>
<p style="text-indent: 2em">五、备份数据库：（命令在DOS的\\mysql\\bin目录下执行） </p>
<p style="text-indent: 2em">mysqldump --opt school&gt;school.bbb </p>
<p style="text-indent: 2em">注释:将数据库school备份到school.bbb文件，school.bbb是一个文本文件，文件名任取，打开看看你会有新发现。 </p>
<p style="text-indent: 2em">后记：其实MYSQL的对数据库的操作与其它的SQL类数据库大同小异，您最好找本将SQL的书看看。我在这里只介绍一些基本的，其实我也就只懂这些了，呵呵。最好的MYSQL教程还是"晏子"译的"MYSQL中文参考手册"不仅免费每个相关网站都有下载，而且它是最权威的。可惜不是象\"PHP4中文手册\"那样是chm的格式，在查找函数命令的时候不太方便。 </p>
<img src ="http://www.blogjava.net/asktalk/aggbug/169201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2007-12-21 01:50 <a href="http://www.blogjava.net/asktalk/archive/2007/12/21/169201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL:InnoDB和MyISAM的差别</title><link>http://www.blogjava.net/asktalk/archive/2007/12/21/169200.html</link><dc:creator>Asktalk</dc:creator><author>Asktalk</author><pubDate>Thu, 20 Dec 2007 17:09:00 GMT</pubDate><guid>http://www.blogjava.net/asktalk/archive/2007/12/21/169200.html</guid><wfw:comment>http://www.blogjava.net/asktalk/comments/169200.html</wfw:comment><comments>http://www.blogjava.net/asktalk/archive/2007/12/21/169200.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/asktalk/comments/commentRss/169200.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/asktalk/services/trackbacks/169200.html</trackback:ping><description><![CDATA[<p>InnoDB和MyISAM是在使用MySQL最常用的两个表类型，各有优缺点，视具体应用而定。下面是已知的两者之间的差别，仅供参考。</p>
<p><strong>innodb</strong><br />
InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行锁(locking on row level)，提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs)。这些特性均提高了多用户并发操作的性能表现。在InnoDB表中不需要扩大锁定(lock escalation)，因为 InnoDB 的列锁定(row level locks)适宜非常小的空间。InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。</p>
<p>InnoDB 的设计目标是处理大容量数据库系统，它的 CPU 利用率是其它基于磁盘的关系数据库引擎所不能比的。在技术上，InnoDB 是一套放在 MySQL 后台的完整数据库系统，InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。 InnoDB 把数据和索引存放在表空间里，可能包含多个文件，这与其它的不一样，举例来说，在 MyISAM 中，表被存放在单独的文件中。InnoDB 表的大小只受限于操作系统的文件大小，一般为 2 GB。</p>
<p>在 http://www.innodb.com/ 上可以找到 InnoDB 最新的信息。InnoDB 手册的最新版本总是被放置在那里，并且在那里可以得到 InnoDB 的商业许可(order commercial licenses)以及支持。</p>
<p>InnoDB 现在(2001年十月)在一些大的需高性能的数据库站点上被使用。著名的 Internet 新闻站点 Slashdot.org 就是使用的 InnoDB。 Mytrix, Inc. 在 InnoDB 表上存储了超过 1 TB 的数据，而且另外的一个站点在 InnoDB 表上处理着平均每秒 800 次的插入/更新的负载。 <br />
<br />
<strong>
MyISAM </strong><br />
MyISAM 是MySQL缺省存贮引擎 .<br />
<br />
每张MyISAM 桌被存放在盘在三个文件 。frm 文件存放表格定义。 数据文件是MYD (MYData) 。 索引文件是MYI (MYIndex) 引伸。</p>
<p><strong>以下是一些细节和具体实现的差别：</strong></p>
<p>1.InnoDB不支持FULLTEXT类型的索引。<br />
2.InnoDB 中不保存表的具体行数，也就是说，执行select count(*) from
table时，InnoDB要扫描一遍整个表来计算有多少行，但是MyISAM只要简单的读出保存好的行数即可。注意的是，当count(*)语句包含
where条件时，两种表的操作是一样的。<br />
3.对于AUTO_INCREMENT类型的字段，InnoDB中必须包含只有该字段的索引，但是在MyISAM表中，可以和其他字段一起建立联合索引。<br />
4.DELETE
FROM table时，InnoDB不会重新建立表，而是一行一行的删除。<br />
5.LOAD TABLE FROM
MASTER操作对InnoDB是不起作用的，解决方法是首先把InnoDB表改成MyISAM表，导入数据后再改成InnoDB表，但是对于使用的额外的InnoDB特性（例如外键）的表不适用。</p>
<p>另外，InnoDB表的行锁也不是绝对的，如果在执行一个SQL语句时MySQL不能确定要扫描的范围，InnoDB表同样会锁全表，例如update table
set num=1 where name like &#8220;%aaa%&#8221;</p>
<p>任何一种表都不是万能的，只用恰当的针对业务类型来选择合适的表类型，才能最大的发挥MySQL的性能优势。</p>
<p>&nbsp;
</p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/asktalk/aggbug/169200.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/asktalk/" target="_blank">Asktalk</a> 2007-12-21 01:09 <a href="http://www.blogjava.net/asktalk/archive/2007/12/21/169200.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>