﻿<?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-&lt;font color="red"&gt;中國男人&lt;/font&gt;&lt;font color="lightgreen"&gt;大鹏一曰同风起，扶摇直上九万里&lt;/font&gt;-随笔分类-MySQL</title><link>http://www.blogjava.net/liaojiyong/category/11450.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 04:02:34 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 04:02:34 GMT</pubDate><ttl>60</ttl><item><title>Windows 的命令行来操作 MySQL 的指令(转)</title><link>http://www.blogjava.net/liaojiyong/archive/2006/07/05/56839.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Wed, 05 Jul 2006 10:03:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2006/07/05/56839.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/56839.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2006/07/05/56839.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/56839.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/56839.html</trackback:ping><description><![CDATA[
		<table cellspacing="2" cellpadding="2" width="605" border="0">
				<tbody>
						<tr align="middle">
								<td height="30">
								</td>
						</tr>
						<tr align="middle">
								<td height="30">
								</td>
						</tr>
						<tr>
								<td style="WORD-BREAK: break-all" valign="top">
										<p>记了一些用 Windows 的命令行来操作 MySQL 的指令。</p>
										<p>摘要<br />连结 MySQL<br />-&gt;mysql -u username -p<br />username 是你的帐号名称。</p>
										<p>远程连结<br />-&gt;mysql -h hostname -u username -p<br />hostname 是 MySQL 主机的名称。</p>
										<p>显示全部的数据库<br />SHOW DATABASES;<br />mysql 是 MySQL 用来储存帐号和权限的数据库，不能删除。</p>
										<p>选择数据库<br />USE database_name;</p>
										<p>显示数据库里的资料表<br />SHOW TABLES;</p>
										<p>显示资料表的信息<br />DESCRIBE table_name;</p>
										<p>注销 MySQL 显示器<br />\q</p>
										<p>SQL 的执行指令可以从文本文件内输入。<br />SOURCE file_name<br />如果没有登入 MySQL 的显示器，用：<br />-&gt;mysql -u username -p &lt; file_name</p>
										<p>Primary key - 用来识别字段的 key。<br />Foreign key - 代表连结的资料表。再另一个资料表里的 primary key。</p>
										<p>使用 MySQL<br />建立数据库<br />CREATE DATABASE employee;<br />这会建立一个叫 employee 的数据库。</p>
										<p>建立资料表<br />CREATE TABLE table_name (table definition) [type=table_type];<br />完整格式：</p>
										<p>程序代码:</p>
										<div class="code">
												<p>CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name [(create_definition, ...)]<br />[table_options] [select_statement];<br />or<br />CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name LIKE old_table_name;<br />create_definition:<br />col_name TYPE [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]<br />[PRIMARY KEY] [reference_definition]<br />or PRIMARY KEY (index_col_name,...)<br />or KEY [index_name] (index_col_name,...)<br />or INDEX [index_name] (index_col_name,...)<br />or UNIQUE [INDEX] [index_name] (index_col_name,...)<br />or FULLTEXT [INDEX] [index_name] (index_col_name,...)<br />or [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...)<br />[reference_definition]<br />or CHECK (expression)</p>
										</div>
										<p>TEMPORARY 关键词是用来建立暂时的资料表，当你的连结阶段结束后会自动删除。<br />CREATE TEMPORARY TABLE table_name;<br />IF NOT EXISTS 只有在资料表不存在时才会建立。<br />CREATE TABLE IF NOT EXISTS table_name;<br />LIKE old_table_name 会依照 old_table_name 的构造来建立新的资料表。<br />字段定义 (column definition) 可用的选项：<br />NOT NULL 或 NULL 来定义字段不能包括 NULL (NOT NULL) 或可以包括 NULL (NULL)。<br />默认值是可以包括 NULL。<br />DEFAULT 可用来宣告字段的默认值。<br />AUTO_INCREMENT 会自动产生连续的数字。产生的数字会大于资料表内的最大数值。<br />每个资料表只能有一个 AUTO_INCREMENT 字段。他必须是索引。<br />任何 PRIMARY KEY 的字段会自动建立索引。<br />PRIMARY KEY 可用来宣告 PRIMARY KEY 的字段。<br />REFERENCES 可用来宣告字段是 FOREIGN KEY，只能用在 InnoDB 资料表。<br />下面的关键词可用来宣告字段的资料：<br />PRIMARY KEY 来设定多字段的 PRIMARY KEY，跟着是字段的名称。<br />INDEX 和 KEY 是一样的关键词，用来设定索引。<br />UNIQUE 表示字段是独特的，一样是索引。<br />FULLTEXT 可用来建立 FULLTEXT 索引，可用于 TEXT, CHAR, VARCHAR 类型。<br />FULLTEXT 只能用在 MyISAM 资料表。<br />FOREIGN KEY 可用来宣告 FOREIGN KEY。<br />下面的选项可以不用，通常是用在最佳化：<br />AUTO_INCREMENT = #<br />设定开始的 AUTO_INCREMENT 数值。<br />AVG_ROW_LENGTH = #<br />可用来估计你要的字段长度。<br />CHECKSUM = 1<br />开启资料表的核对值。可用来修复损坏的资料表。只能用在 MyISAM。<br />COMMENT = "字符串"<br />用来输入资料表的批注。<br />MAX_ROWS = #<br />设定资料表允许的字段值 (最大)。<br />MIN_ROWS = #<br />设定资料表允许的字段值 (最小)。<br />PACK_KEYS = {0 | 1 | DEFAULT}<br />MySQL 的预设是会压缩 CHAR, VARCHAR, 和 TEXT 的字符串。<br />如要关闭选 0。<br />DELAY_KEY_WRITE = {0 | 1}<br />延后 key 的更新，直到关闭数据库。只能用在 MyISAM。<br />ROW_FORMAT = {default | dynamic | fixed | compress}<br />用来设定字段的储存方式。只能用在 MyISAM。<br />RAID_TYPE = {1 | STRIPED | RAID0} RAID_CHUNKS = # RAID_CHUNKSIZE = #<br />RAID 的设定。<br />UNION = (table_name, [table_name...])<br />用于 MERGE 资料表。允许你设定 MERGE 使用的资料表。<br />INSERT_METHOD = {NO | FIRST | LAST}<br />用于 MERGE 资料表。设定要插入资料到哪个资料表。<br />DATA_DIRECTORY = "绝对路径"<br />储存资料的目录。<br />INDEX_DIRECTORY = "绝对路径"<br />储存索引的目录。</p>
										<p>字段和数据类型<br />数字类型<br />INT 和 FLOAT<br />范例：salary decimal(10, 2) - 宽度 10 和 2 个小数点。<br />可以用 UNSIGNED 和 ZEROFILL 关键词。<br />UNSIGNED 只能包括零或整数。ZEROFILL 会显示数字前的零数。<br />整数和变化<br />可以缩写成 INT，大小是 4 bytes。<br />TINYINT 是 1 byte，跟 BIT 和 BOOL 相同。<br />SMALLINT 是 2 bytes。<br />MEDIUMINT 是 3 bytes。<br />BIGINT 是 8 bytes。<br />FLOAT 是单精密度的浮点数。<br />DOUBLE 是双精密度的浮点数，跟 REAL 和 DOUBLE PRECISION 相同。<br />字符串和文字类型<br />CHAR 可用来储存固定长度的字符串，如果不设定长度，预设是 CHAR(1)。<br />最大值是 255 个字符。<br />固定长度有时候会比 VARCHAR 来的快。<br />如果跟着的是 BINARY 关键词，比较字符串的时候必须注意大小写。<br />VARCHAR 可用来储存动态的字符串，如果预先不知道字符串的长度，范围是 0 到 255。<br />TEXT 可储存较长的字符串，最大到 65535 个字符或 bytes。<br />BLOB 代表 binary large object，用来储存 binary 资料，最大到 65535 个字符或 bytes。比较字符串时需要注意大小写。<br />TINYTEXT 或 TINYBLOB 可储存小于 255 个字符或 bytes 的字符串。<br />MEDIUMTEXT 或 MEDIUMBLOB 可储存到 16777215 个字符或 bytes 的字符串。<br />LONGTEXT 或 LONGBLOB 可储存到 4294,967,295 个字符或 bytes 的字符串。<br />ENUM 可用来储存自订的值。<br />范例：gender enum('m', 'f')<br />表示储存的直是 m 和 f。也可储存 NULL，所以可能的直是 m, f, NULL, 或 error。<br />SET 跟 ENUM 类似不过可以储存其它的 ENUM 值。<br />日期和时间类型<br />date 可用来储存日期，以 YYYY-MM-DD 显示。<br />time 可用来储存时间，以 HH:MM:SS 显示。<br />datetime 包含了日期和时间，以 YYYY-MM-DD HH:MM:SS 显示。<br />timestamp 储存插入字段或改变的时间。<br />版本 4.0 之前可以用 timestamp(10) 来改变显示的宽度。<br />year 可用来储存年份，可以用 year(2) 或 year(4) 来设定显示格式，预设是 year(4)。<br />year(2) 代表从 1970 到 2069 的年份。</p>
										<p>建立索引<br />任何宣告为 PRIMARY KEY, KEY, UNIQUE, 或 INDEX 的字段都会自动建立索引。<br />要将索引建立到字段用：<br />CREATE INDEX name ON employee(name);<br />这会建立一个叫 name 的索引到 employee 资料表里的 name 字段。</p>
										<p>删除数据库，资料表，和索引<br />删除整个数据库，包括里面的资料：<br />DROP DATABASE employee;<br />可以在 employee 的前面加上 IF EXISTS。<br />删除一个资料表：<br />DROP TABLE assignment;<br />完整格式：</p>
										<p>程序代码:</p>
										<div class="code">
												<p>DROP [TEMPORARY] TABLE [IF EXISTS] table_name [, table_name...]</p>
												<p>删除索引：<br />DROP INDEX index_name ON employee;</p>
										</div>
										<p>改变资料表结构<br />如果要改变资料表的结构，建立 name 的索引在 employee 里面的 name 字段：<br />ALTER TABLE employee;<br />ADD INDEX name (name);<br />完整格式：</p>
										<p>程序代码:</p>
										<div class="code">
												<p>ALTER [IGNORE] TABLE table_name alter_spec [, alter_spec ...]<br />alter_spec:<br />ADD [COLUMN] create_definition [FIRST | AFTER col_name]<br />or ADD [COLUMN] (create_definition, create_definition,...)<br />or ADD INDEX [index_name] (index_col_name,...)<br />or ADD PRIMARY KEY (index_col_name,...)<br />or ADD UNIQUE [index_name] (index_col_name,...)<br />or ADD FULLTEXT [index_name] (index_col_name,...)<br />or ADD [CONSTRAINT symbol] FOREIGN KYE [index_name] (index_col_name,...)<br />[reference_definition]<br />or ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}<br />or CHANGE [COLUMN] old_col_name create_definition<br />[FIRST | AFTER column_name]<br />or MODIFY [COLUMN] create_definition [FIRST | AFTER col_name]<br />or DROP [COLUMN] col_name<br />or DROP PRIMARY KEY<br />or DROP INDEX index_name<br />or DISABLE KEYS<br />or ENABLE KEYS<br />or RENAME [TO] new_table_name<br />or ORDER BY col_name<br />or table_options</p>
										</div>
										<p>因为 ALTER 非常有弹性所以有很多的查询子句。<br />CHANGE 和 MODIFY 相同，可以让你改变字段的定义或位置。<br />DROP COLUMN 会删除资料表里的字段。<br />DROP PRIMARY KEY 和 DROP INDEX 会删除相连的字段索引。<br />DISABLE KEYS 会告诉 MySQL 停止更新索引，只能用在 MyISAM。<br />ENABLE KEYS 会继续更新索引。<br />RENAME 可以让你改变资料表的名称。<br />ORDER BY 会重新排序字段。</p>
										<p>使用 INSERT<br />INSERT 可以让你输入字段到资料表里。<br />完整格式：</p>
										<p>程序代码:</p>
										<div class="code">
												<p>INSERT [LOW_PRIORITY | DELAYED] [IGNORE]<br />[INTO] table_name [(col_name,...)]<br />VALUES ((expression | DEFAULT),...),(...),...<br />[ON DUPLICATE KEY UPDATE col_name=expression, ...]<br />or<br />INSERT [LOW_PRIORITY | DELAYED] [IGNORE]<br />[INTO] table_name [(col_name,...)]<br />SELECT ...<br />or<br />INSERT [LOW_PRIORITY | DELAYED] [IGNORE]<br />[INTO] table_name<br />SET col_name=(expression | DEFAULT), ...<br />[ON DUPLICATE KEY UPDATE col_name=expression, ...]</p>
										</div>
										<p>范例：</p>
										<p>程序代码:</p>
										<div class="code">
												<p>INSERT INTO department VALUES<br />(42, 'Finance'),<br />(128, 'Research and Development'),<br />(NULL, 'Human Resources');</p>
										</div>
										<p>INTO 可以不用。<br />INSERT INTO department<br />SELECT ...<br />可以从其它的资料表里取得资料，存到 department 这个资料表。<br />INSERT INTO department<br />SET name = 'Asset Management';<br />这会输入一个字段的资料，只提供 name 的字段。其它没有资料的字段会是 NULL。<br />其它查询子句：<br />LOW PRIORITY 或 DELAYED 会等其它用户读取完资料后再输入资料。<br />LOW PRIORITY 会阻止要输入资料的用户，所以在跑完查询后需要等待一段时间。<br />DELAYED 不会阻止用户，但是输入资料要等没人使用资料表后才会完成。<br />范例：INSERT DELAYED INTO ...<br />IGNORE 会忽略输入跟字段的 PRIMARY KEY 或 UNIQUE 值的冲突所产生的错误讯息。<br />DEFAULT 会用默认值建立字段。<br />范例：INSERT INTO department VALUES(DEFAULT)<br />ON DUPLICATE KEY UPDATE 会解决跟 PRIMARY KEY 或 UNIQUE 的冲突。<br />范例：<br />INSERT INTO warning (employeeID) <br />VALUES(6651)<br />ON DUPLICATE KEY UPDATE count = count+1;</p>
										<p>使用 REPLACE<br />使用方法跟 INSERT 相同。<br />REPLACE 可以解决有冲突的输入。如果有冲突字段会被更新。</p>
										<p>使用 DELETE<br />用来删除字段。<br />范例：DELETE FROM department;<br />会删除 department 里面所有的字段。<br />如果要选择哪个字段，用 WHERE。<br />范例：DELETE FROM department WHERE name='Asset Management';<br />如果有开启 --safe-updates 或 --i-am-a-dummy 选项可以避免一次删除全部的字段。<br />所以必须选择要删除的字段。<br />完整格式：</p>
										<p>程序代码:</p>
										<div class="code">
												<p>DELETE [LOW_PRIORITY] [QUICK] FROM table_name<br />[WHERE where_definition]<br />[ORDER BY ...]<br />[LIMIT rows]<br />or<br />DELETE [LOW_PRIORITY] [QUICK] table_name[.*] [, table_name[.*] ...]<br />FROM table-references<br />[WHERE where_definition]</p>
												<p>or<br />DELETE [LOW_PRIORITY] [QUICK]<br />FROM table_name[.*] [, table_name[.*] ...]<br />USING table-references<br />[WHERE where_definition]</p>
										</div>
										<p>后两个格式可以用来删除其它资料表里的字段。<br />范例：</p>
										<p>程序代码:</p>
										<div class="code">
												<p>DELETE employee, employeeSkills<br />FROM employee, employeeSkills, department<br />WHERE employee.employeeID = employeeSkills.employeeID<br />AND employee.departmentID = department.departmentID<br />AND department.name='Finance';</p>
										</div>
										<p>上面的会删除全部的有在 Finance department 里面工作的 employees，然后删除他们的 employeeSkills。<br />FROM 里面的字段不会被删除，他们只是用来搜寻。只有在 employee 和 employeeSkills 里面的字段会被删除。<br />AND 是包含的条件。employee.employeeID 表示 employee 资料表里的 employeeID 字段。<br />第三个格式跟第二个差不多，但是删除 FROM 里面的资料表，用 USING 来表示被搜寻的资料表。<br />范例：</p>
										<p>程序代码:</p>
										<p>DELETE FROM employee, employeeSkills<br />USING employee, employeeSkills, department<br />WHERE employee.employeeID = employeeSkills.employeeID<br />AND employee.departmentID = department.departmentID<br />AND department.name='Finance';</p>
										<p>跟上面一样，不同的表示方法。<br />额外的查询子句：<br />LOW_PRIORITY 跟 INSERT 里的意思相同。<br />QUICK 可用来加快 DELETE 的速度。<br />ORDER BY 是用来删除字段的顺序。<br />LIMIT 可用来限制被删除的字段数量。</p>
										<p>使用 TRUNCATE<br />可用来删除全部的字段。<br />TRUNCATE TABLE employee;<br />速度比 DELETE 还快。</p>
										<p>使用 UPDATE<br />可以用来更新字段。</p>
										<p>程序代码:</p>
										<p class="code">UPDATE employee<br />SET job='DBA'<br />WHERE employeeID='6651';</p>
										<p>完整格式：</p>
										<p>程序代码:</p>
										<div class="code">
												<p>UDPATE [LOW_PRIORITY] [IGNORE] table_name<br />SET col_name1=expr1 [, col_name2=expr2 ...]<br />[WHERE where_definition]<br />[ORDER BY ...]<br />[LIMIT rows]<br />or<br />UPDATE [LOW_PRIORITY] [IGNORE] table_name [, table_name ...]<br />SET col_name=expr1 [, col_name2=expr2 ...]<br />[WHERE where_definition]</p>
										</div>
										<p>WHERE 可以用来选择要更新哪个字段。<br />第二个格式可以用来更新多个资料表。<br />LOW_PRIORITY 和 IGNORE 跟在 INSERT 里的相同，ORDER BY 和 LIMIT 跟在 DELETE 的相同。</p>
										<p>用 LOAD DATA INFILE 上传资料文件<br />可以让你用档案来输入资料到一个资料表。<br />数据文件范例：</p>
										<p>程序代码:</p>
										<div class="code">
												<p>42 Finance<br />128 Research and Development<br />NULL Human Resources<br />NULL Marketing</p>
										</div>
										<p>加载资料文件：</p>
										<p>程序代码:</p>
										<div class="code">
												<p>LOAD DATA LOCAL INFILE 'department_infile.txt'<br />INTO TABLE department;</p>
										</div>
										<p>LOAD DATA INFILE 需要 FILE 的权限。</p>
										<p>完整格式：</p>
										<p>程序代码:</p>
										<div class="code">
												<p>LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'fileName.txt'<br />[REPLACE | IGNORE]<br />INTO TABLE table_name<br />[FIELDS<br />[TERMINATED BY '\t']<br />[[OPTIONALLY] ENCLOSED BY '']<br />[ESCAPED BY '\\']<br />]<br />[LINES TERMINATED BY '\n']<br />[IGNORE number LINES]<br />[(col_name, ...)]</p>
										</div>
										<p>额外的查询子句：<br />LOW_PRIORITY 跟 INSERT 里的类似，会等用户读取完资料表后在继续。<br />CONCURRENT 允许其它用户读资料表里的资料。<br />LOCAL 表示资料文件在用户的计算机里，如果不用 MySQL 会在主机内读取资料文件。<br />REPLACE 会覆盖旧的字段，IGNORE 会留旧的字段，如果有冲突。<br />FIELDS 和 LINES 可以用来规定资料表的格式，预设的格式是<br />每行一个字段，字段资料用 tabs 来分开，要或不要用单引号，和用 \ 来跳脱字符。<br />IGNORE number LINES 会忽略档案内行数，number 表示行数。<br />最后一个子句可以用来设定只输入资料到某些字段。</p>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/liaojiyong/aggbug/56839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2006-07-05 18:03 <a href="http://www.blogjava.net/liaojiyong/archive/2006/07/05/56839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速上手 MySQL －－图形化操作详解</title><link>http://www.blogjava.net/liaojiyong/archive/2006/05/23/47654.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Tue, 23 May 2006 07:33:00 GMT</pubDate><guid>http://www.blogjava.net/liaojiyong/archive/2006/05/23/47654.html</guid><wfw:comment>http://www.blogjava.net/liaojiyong/comments/47654.html</wfw:comment><comments>http://www.blogjava.net/liaojiyong/archive/2006/05/23/47654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liaojiyong/comments/commentRss/47654.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liaojiyong/services/trackbacks/47654.html</trackback:ping><description><![CDATA[
		<a href="http://www.netbei.com/Article/db/db2/200504/3352.html">http://www.netbei.com/Article/db/db2/200504/3352.html</a>
<img src ="http://www.blogjava.net/liaojiyong/aggbug/47654.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liaojiyong/" target="_blank">liaojiyong</a> 2006-05-23 15:33 <a href="http://www.blogjava.net/liaojiyong/archive/2006/05/23/47654.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>