mysql入门之1小时学会MySQL基础
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">MySQL入门</a></li><li><a href="#_label1">MySQL管理</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_0">6. 启动及关闭 MySQL服务器:</a></li><li><a href="#_lab2_1_1">7. MySQL 用户设置</a></li><li><a href="#_lab2_1_2">8. 管理MySQL的命令</a></li></ul><li><a href="#_label2">MySQL 连接</a></li><ul class="second_class_ul"><li><a href="#_lab2_2_3">10.使用MySQL二进制方式连接</a></li><li><a href="#_lab2_2_4">11.使用 PHP脚本连接 MySQL</a></li></ul><li><a href="#_label3">MySQL 创建/删除数据库</a></li><ul class="second_class_ul"><li><a href="#_lab2_3_5">12.使用 mysqladmin创建数据库</a></li><li><a href="#_lab2_3_6">13.使用 PHP脚本创建数据库</a></li></ul><li><a href="#_label4">MySQL 选择数据库</a></li><ul class="second_class_ul"><li><a href="#_lab2_4_7">14.使用PHP脚本选择MySQL数据库</a></li></ul><li><a href="#_label5">MySQL 创建/删除数据表</a></li><ul class="second_class_ul"><li><a href="#_lab2_5_8">15.MySQL 创建数据表</a></li><li><a href="#_lab2_5_9">16.通过命令提示符创建表</a></li><li><a href="#_lab2_5_10">17.使用PHP脚本创建/删除数据表或插入数据</a></li></ul><li><a href="#_label6">MySQL 插入数据</a></li><ul class="second_class_ul"><li><a href="#_lab2_6_11">MySQL 查询数据</a></li><li><a href="#_lab2_6_12">MySQL 选择数据</a></li><li><a href="#_lab2_6_13"> MySQL UPDATE</a></li><li><a href="#_lab2_6_14">MySQL DELETE</a></li><li><a href="#_lab2_6_15">MySQL 分组</a></li></ul><li><a href="#_label7"> MySQL 多表查询</a></li><ul class="second_class_ul"></ul><li><a href="#_label8">MySQL 正则表达式</a></li><ul class="second_class_ul"></ul><li><a href="#_label9"> MySQL 事务</a></li><ul class="second_class_ul"></ul><li><a href="#_label10"> 在MySQL控制台使用事务来操作:</a></li><ul class="second_class_ul"></ul><li><a href="#_label11">MySQL 索引</a></li><ul class="second_class_ul"></ul><li><a href="#_label12"> MySQL 元数据</a></li><ul class="second_class_ul"></ul><li><a href="#_label13"> 数据库和数据表列表</a></li><ul class="second_class_ul"></ul><li><a href="#_label14"> MySQL 处理重复数据</a></li><ul class="second_class_ul"></ul><li><a href="#_label15"> 过滤重复数据</a></li><ul class="second_class_ul"></ul><li><a href="#_label16"> 删除重复数据</a></li><ul class="second_class_ul"></ul><li><a href="#_label17">Like语句中的注入</a></li><ul class="second_class_ul"></ul><li><a href="#_label18">MySQL 导出数据</a></li><ul class="second_class_ul"></ul><li><a href="#_label19"> 导出表作为原始数据</a></li><ul class="second_class_ul"></ul><li><a href="#_label20"> MySQL 导入数据</a></li><ul class="second_class_ul"></ul><li><a href="#_label21">使用mysqlimport 导入数据</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>MySQL入门</h2><p>mySQL (关系型数据库管理系统)</p>
<p>MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。</p>
<p>MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。</p>
<p>MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。<br />
由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。</p>
<p>1. 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。</p>
<p>2. 使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。关系型数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。</p>
<p>3. RDBMS特点:</p>
<p>1.数据以表格的形式出现</p>
<p>2.每行为各种记录名称</p>
<p>3.每列为记录名称所对应的数据域</p>
<p>4.许多的行和列组成一张表单</p>
<p>5.若干的表单组成database</p>
<p>4. RDBMS 术语</p>
<p>冗余:存储两倍数据,冗余可以使系统速度更快。</p>
<p>主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。</p>
<p>外键:外键用于关联两个表。</p>
<p>复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。</p>
<p>索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。</p>
<p>参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性</p>
<p>5. MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。</p>
<p class="maodian"><a name="_label1"></a></p><h2>MySQL管理</h2>
<p class="maodian"><a name="_lab2_1_0"></a></p><h3>6. 启动及关闭 MySQL服务器:</h3>
<p>(1) 检查MySQL服务器是否启动:</p>
<p>ps -ef | grepmysqld</p>
<p>(2) 启动MySQL服务器:</p>
<p>root@host# cd/usr/bin</p>
<p>./safe_mysqld&</p>
<p>(3) 关闭目前运行的 MySQL 服务器:</p>
<p>root@host# cd/usr/bin</p>
<p>./mysqladmin-u root -p shutdown</p>
<p>Enterpassword: ******</p>
<p></p>
<p class="maodian"><a name="_lab2_1_1"></a></p><h3>7. MySQL 用户设置</h3>
<p>在 MySQL 数据库中的 user 表添加新用户:</p>
<div class="jb51code">
<pre class="brush:sql;">
root@host# mysql -u root –p //选择数据库
Enter password:*******
mysql> use mysql;
Database changed
mysql> INSERT INTO user
(host, user, password,
select_priv, insert_priv,update_priv) //设置权限Y
VALUES ('localhost', 'guest',
PASSWORD('guest123'), 'Y', 'Y','Y');
Query OK, 1 row affected (0.20 sec)
mysql> FLUSH PRIVILEGES;</pre>
</div>
<p>注意需要执行 FLUSH PRIVILEGES 语句。这个命令执行后会重新载入授权表。</p>
<p>另外一种添加用户的方法为通过SQL的 GRANT命令</p>
<div class="jb51code">
<pre class="brush:sql;">
mysql> GRANTSELECT,INSERT,UPDATE,DELETE,CREATE,DROP
-> ON TUTORIALS.*
-> TO 'zara'@'localhost'
-> IDENTIFIED BY'zara123';</pre>
</div>
<p class="maodian"><a name="_lab2_1_2"></a></p><h3>8. 管理MySQL的命令</h3>
<p>USE 数据库名 :选择要操作的MySQL数据库:</p>
<p>mysql> use W3CSCHOOL;</p>
<p>Database changed</p>
<p>SHOW DATABASES: 列出 MySQL 数据库管理系统的数据库列表:</p>
<p>mysql> SHOWDATABASES;</p>
<p>SHOW TABLES: 显示指定数据库所有表,用该命令前需用 use 命令选择操作的数据库。</p>
<p>mysql> useW3CSCHOOL;</p>
<p>Database changed</p>
<p>mysql> SHOW TABLES;</p>
<p>SHOW COLUMNS FROM 数据表:显示数据表的属性,属性类型,主键信息,是否NULL,默认值等其他信息。</p>
<p>mysql> SHOW COLUMNSFROM W3Cschool_tbl;</p>
<p>+-----------------+--------------+------+-----+---------+-------+</p>
<p>| Field | Type | Null | Key | Default | Extra |</p>
<p>+-----------------+--------------+------+-----+---------+-------+</p>
<p>SHOW INDEX FROM 数据表:显示数据表的详细索引信息,包括PRIMARY KEY(主键)。</p>
<p>SHOW TABLE STATUS LIKE 数据表\G: 该命令将输出MySQL数据库管理系统的性能及统计信息。</p>
<p>mysql> SHOW TABLESTATUS FROM W3CSCHOOL; # 显示数据库 W3CSCHOOL 中所有表的信息</p>
<p>mysql> SHOW TABLESTATUS from W3CSCHOOL LIKE 'W3Cschool%'; #表名以W3Cschool开头的表的信息</p>
<p>mysql> SHOW TABLESTATUS from W3CSCHOOL LIKE 'W3Cschool%'\G; #加上 \G,查询结果按列打印</p>
<p>9. PHP MySQL函数格式:mysql_function(value,value,...);</p>
<p class="maodian"><a name="_label2"></a></p><h2>MySQL 连接</h2>
<p class="maodian"><a name="_lab2_2_3"></a></p><h3>10.使用MySQL二进制方式连接</h3>
<p># mysql -uroot -p<br />
Enter password:******<br />
登录成功后会出现mysql> 命令提示窗口,你可以在上面执行任何 SQL 语句。<br />
退出 mysql> 命令提示窗口可以使用exit 命令:mysql> exit</p>
<p class="maodian"><a name="_lab2_2_4"></a></p><h3>11.使用 PHP脚本连接 MySQL</h3>
<p>PHP 提供了 mysql_connect() 函数来连接数据库。<br />
connectionmysql_connect(server,user,passwd,new_link,client_flag);5各参数均可选<br />
使用PHP的mysql_close() 函数来断开与MySQL数据库的链接。<br />
bool mysql_close (resource $link_identifier );<br />
通常不要用mysql_close(),因为已打开的非持久连接会在脚本执行完毕后自动关闭。<br />
mysql_close() 不会关闭由 mysql_pconnect() 建立的持久连接<br />
</p>
<div class="jb51code">
<pre class="brush:php;">
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
die('Could not connect: ' .mysql_error());
}
echo 'Connected successfully';
mysql_close($conn);</pre>
</div>
<p class="maodian"><a name="_label3"></a></p><h2>MySQL 创建/删除数据库</h2>
<p class="maodian"><a name="_lab2_3_5"></a></p><h3>12.使用 mysqladmin创建数据库</h3>
<p>用root用户登录,root用户拥有最高权限,可以使用 mysql mysqladmin 命令来创建数据库。<br />
#mysqladmin -u root -pcreate/drop W3CSCHOOL<br />
Enter password:***** </p>
<p class="maodian"><a name="_lab2_3_6"></a></p><h3>13.使用 PHP脚本创建数据库</h3>
<p>PHP使用 mysql_query 函数来创建或者删除 MySQL 数据库。<br />
</p>
<div class="jb51code">
<pre class="brush:php;">
bool mysql_query( sql, connection);
$conn = mysql_connect($dbhost,$dbuser, $dbpass);
if(! $conn )
{
die('连接错误: ' . mysql_error());
}
echo '连接成功<br />';
$sql= 'CREATE/DROP DATABASE W3CSCHOOL';
$retval= mysql_query( $sql, $conn );
if(! $retval )
{
die('创建数据库失败: ' . mysql_error());
}
echo "数据库 W3CSCHOOL创建成功\n";
mysql_close($conn);</pre>
</div>
<p class="maodian"><a name="_label4"></a></p><h2>MySQL 选择数据库</h2>
<p class="maodian"><a name="_lab2_4_7"></a></p><h3>14.使用PHP脚本选择MySQL数据库</h3>
<p>PHP 提供了函数 mysql_select_db来选取一个数据库。<br />
</p>
<div class="jb51code">
<pre class="brush:php;">
bool mysql_select_db( db_name,connection );
$conn = mysql_connect($dbhost,$dbuser, $dbpass);
if(! $conn )
{
die('连接失败: ' . mysql_error());
}
echo '连接成功';
mysql_select_db('W3CSCHOOL' );
mysql_close($conn);
</pre>
</div>
<p class="maodian"><a name="_label5"></a></p><h2>MySQL 创建/删除数据表</h2>
<p class="maodian"><a name="_lab2_5_8"></a></p><h3>15.MySQL 创建数据表</h3>
<p>创建MySQL数据表需要以下信息:</p>
<p>表名</p>
<p>表字段名</p>
<p>定义每个表字段</p>
<p>创建语法:CREATE TABLE table_name (column_name column_type);</p>
<p>删除语法:DROP TABLE table_name ;</p>
<p>以下例子中我们将在 W3CSCHOOL 数据库中创建数据表w3cschool_tbl:</p>
<div class="jb51code">
<pre class="brush:sql;">
tutorials_tbl(
tutorial_id INT NOT NULL AUTO_INCREMENT,
tutorial_title VARCHAR(100) NOT NULL,
tutorial_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY ( w3cschool_id )
);</pre>
</div>
<p class="maodian"><a name="_lab2_5_9"></a></p><h3>16.通过命令提示符创建表</h3>
<p>使用 SQL 语句 CREATE TABLE 来创建数据表。</p>
<div class="jb51code">
<pre class="brush:sql;">
mysql> CREATE TABLE w3cschool_tbl(
-> w3cschool_id INT NOTNULL AUTO_INCREMENT,
-> w3cschool_titleVARCHAR(100) NOT NULL,
-> w3cschool_authorVARCHAR(40) NOT NULL,
-> submission_date DATE,
-> PRIMARY KEY (w3cschool_id )
-> );</pre>
</div>
<p>MySQL命令终止符为分号 (;) 。 </p>
<p class="maodian"><a name="_lab2_5_10"></a></p><h3>17.使用PHP脚本创建/删除数据表或插入数据</h3>
<p>语法:bool mysql_query( sql, connection);</p>
<div class="jb51code">
<pre class="brush:php;">
$sql = "CREATE TABLEtutorials_tbl( "创建
"tutorial_id INT NOTNULL AUTO_INCREMENT, ".
"tutorial_titleVARCHAR(100) NOT NULL, ".
"tutorial_authorVARCHAR(40) NOT NULL, ".
"submission_dateDATE, ".
"PRIMARY KEY (tutorial_id )); "
;
$sql = "DROP TABLEw3cschool_tbl";删除
mysql_select_db( 'TUTORIALS' );
$retval = mysql_query( $sql, $conn); //判断是否成功而设置的参数;
if(! $retval )
{
die('数据表创建失败: ' . mysql_error());
}
echo "数据表创建成功\n";
mysql_close($conn);</pre>
</div>
<p class="maodian"><a name="_label6"></a></p><h2>MySQL 插入数据</h2>
<p>18.向MySQL数据表插入数据通用的 INSERT INTO SQL语法:</p>
<p>INSERT INTO table_name (field1, field2,...fieldN )<br />
VALUES<br />
( value1,value2,...valueN );</p>
<p>如果数据是字符型,必须使用单引号或者双引号,如:"value"。</p>
<p> </p>
<p>w3cschool_tbl表插入一条数据:</p>
<p>mysql> INSERT INTOw3cschool_tbl<br />
->(w3cschool_title, w3cschool_author,submission_date)<br />
->VALUES<br />
->("Learn PHP", "JohnPoul", NOW());</p>
<p>(->)不是SQL语句的一部分,它仅表示一个新行,如SQL语句太长,可通过回车键创建一个新行编写SQL语句,SQL语句的命令结束符为分号(;)。</p>
<p> </p>
<p>19.使用PHP脚本插入数据</p>
<p> $sql = "INSERT INTO w3cschool_tbl ".<br />
"(w3cschool_title,w3cschool_author,submission_date) ".<br />
"VALUES ".<br />
"('$w3cschool_title','$w3cschool_author','$submission_date')";</p>
<p class="maodian"><a name="_lab2_6_11"></a></p><h3>MySQL 查询数据</h3>
<p>20.为在MySQL数据库中查询数据通用的 SELECT语法:</p>
<p>SELECT column_name,column_name<br />
FROM table_name<br />
<br />
</p>
<p>可以通过SELECT 命令读取一条或者多条记录。</p>
<p>可以通过OFFSET指定SELECT语句开始查询的数据偏移量默认情况下偏移量为0。</p>
<p>可以使用 LIMIT 属性来设定返回的记录数。</p>
<p>你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据</p>
<p>mysql> SELECT * from w3cschool_tbl</p>
<p> <br />
21.使用PHP脚本来获取数据</p>
<p>使用PHP函数的mysql_query()及SQL SELECT命令来获取数据。<br />
该函数用于执行SQL命令,然后通过 PHP 函数 mysql_fetch_array() 来使用或输出所有查询的数据。</p>
<p> </p>
<p>尝试以下实例来显示数据表w3cschool_tbl 的所有记录</p>
<p>$sql = 'SELECT w3cschool_id,w3cschool_title,<br />
w3cschool_author,submission_date<br />
FROM w3cschool_tbl';<br />
mysql_select_db('W3CSCHOOL');<br />
$retval = mysql_query( $sql, $conn );<br />
if(! $retval )<br />
{<br />
die('Could not get data: ' .mysql_error());<br />
}<br />
while($row =mysql_fetch_array($retval, MYSQL_ASSOC))<br />
while($row =mysql_fetch_assoc($retval))</p>
<p>用MYSQL_NUM参数显示数据表</p>
<p>while($row =mysql_fetch_array($retval, MYSQL_NUM))</p>
<p>用MYSQL_NUM参数显示数据表</p>
<p>{<br />
echo "Tutorial ID:{$row['w3cschool_id']} <br>".<br />
"Title:{$row['w3cschool_title']} <br> ".<br />
"Author:{$row['w3cschool_author']} <br> ".<br />
"Submission Date : {$row['submission_date']}<br> ".<br />
"--------------------------------<br>";<br />
}<br />
mysql_free_result($retval); 释放游标内存<br />
echo "Fetched data successfully\n";<br />
mysql_close($conn);</p>
<p><br />
MYSQL_ASSOC, 设置该参数查询结果返回关联数组,你可以使用字段名称来作为数组的索引。</p>
<p class="maodian"><a name="_lab2_6_12"></a></p><h3>MySQL 选择数据</h3>
<p>22.从MySQL表中使用SQL SELECT语句来读取数据。</p>
<p>如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中<br />
以下是SQL SELECT语句使用 WHERE 子句从数据表中读取数据的通用语法:</p>
<p>SELECT field1,field2,...fieldN FROM table_name1, table_name2...<br />
] condition2.....</p>
<p>WHERE子句也可以运用于SQL的 DELETE 或者 UPDATE 命令。<br />
使用 LIKE 来比较字符串,否则MySQL的WHERE子句的字符串比较是不区分大小写的。 你可以使用 BINARY 关键字来设定WHERE子句的字符串比较是区分大小写的。</p>
<p> 23.使用PHP脚本读取数据</p>
<p>使用PHP函数的mysql_query()及相同的SQL SELECT 带上 WHERE 子句的命令来获取数据。该函数用于执行SQL命令,然后通过 mysql_fetch_array() 来输出所有查询的数据。</p>
<p>$sql = 'SELECT w3cschool_id,w3cschool_title,<br />
w3cschool_author, submission_date<br />
FROM w3cschool_tbl<br />
WHEREw3cschool_author="Sanjay"';</p>
<p class="maodian"><a name="_lab2_6_13"></a></p><h3> MySQL UPDATE</h3>
<p>24.修改或更新MySQL中的数据,我们可以使用SQL UPDATE 命令来操作。</p>
<p>通用SQL语法:</p>
<p>UPDATE table_name SET field1=new-value1, field2=new-value2</p>
<p></p>
<p> </p>
<p>更新数据表中 w3cschool_id 为 3 的 w3cschool_title 字段值:</p>
<p>mysql>UPDATE w3cschool_tbl<br />
-> SET w3cschool_title='Learning JAVA'<br />
- > WHERE w3cschool_id=3;</p>
<p>使用PHP脚本更新数据</p>
<p>$sql = 'UPDATE w3cschool_tbl<br />
SETw3cschool_title="Learning JAVA"<br />
WHERE w3cschool_id=3';</p>
<p class="maodian"><a name="_lab2_6_14"></a></p><h3>MySQL DELETE</h3>
<p>25.DELETE FROM table_name[WHERE Clause</p>
<p>如果没有指定 WHERE 子句,MySQL表中的所有记录将被删除。</p>
<p>可以在 WHERE 子句中指定任何条件</p>
<p>删除w3cschool_tbl 表中 w3cschool_id 为3 的记录</p>
<p>mysql> DELETE FROMw3cschool_tbl WHERE w3cschool_id=3;</p>
<p>用 PHP 脚本删除数据</p>
<p>$sql = 'DELETE FROMw3cschool_tbl<br />
WHERE w3cschool_id=3';</p>
<p>MySQL LIKE 子句</p>
<p>QL LIKE 子句中使用百分号(%)字符来表示任意字符</p>
<p>没有使用百分号(%),LIKE 子句与等号(=)的效果是一样的。<br />
26.QL SELECT语句使用 LIKE子句从数据表中读取数据的通用语法:<br />
SELECT field1,field2,...fieldN table_name1, table_name2...<br />
WHERE field1 LIKEcondition1 ] filed2 = 'somevalue'<br />
LIKE 通常与 % 一同使用,类似于一个元字符的搜索</p>
<p><br />
在PHP脚本中使用 LIKE 子句</p>
<p>$sql = 'SELECTw3cschool_id, w3cschool_title,<br />
w3cschool_author,submission_date<br />
FROM w3cschool_tbl<br />
WHERE w3cschool_author LIKE"%jay%"';</p>
<p>MySQL 排序</p>
<p>SELECT field1,field2,...fieldN table_name1, table_name2...</p>
<p>ORDER BY field1, ]</p>
<p>ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。默认情况下,它是按升排列。</p>
<p> </p>
<p class="maodian"><a name="_lab2_6_15"></a></p><h3>MySQL 分组</h3>
<p>SELECT column_name,function(column_name)<br />
FROM table_name<br />
WHERE column_nameoperator value<br />
GROUP BY column_name;</p>
<p>WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)。</p>
<p>coalesce 来设置一个可以取代NUll 的名称,coalesce 语法:</p>
<p>select coalesce(a,b,c);</p>
<p>参数说明:如果a==null,则选择b;如果b==null,则选择c;如果a!=null,则选择a;如果a b c 都为null ,则返回为null(没意义)。</p>
<p>mysql> SELECTcoalesce(name, '总数'), SUM(singin) as singin_countFROM employee_tbl GROUP BY name WITHROLLUP;</p>
<p>+--------------------------+--------------+</p>
<p>| coalesce(name, '总数') | singin_count |</p>
<p>+--------------------------+--------------+</p>
<p>| 小丽 | 2 |</p>
<p>| 小明 | 7 |</p>
<p>| 小王 | 7 |</p>
<p>| 总数 | 16 |</p>
<p>+--------------------------+--------------+</p>
<p class="maodian"><a name="_label7"></a></p><h2> MySQL 多表查询</h2>
<p>27.在SELECT, UPDATE 和 DELETE 语句中使用 Mysql 的 JOIN 来联合多表查询。</p>
<p>JOIN 按照功能大致分为如下三类:</p>
<p>INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。<br />
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。<br />
RIGHT JOIN(右连接):与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。</p>
<p>| w3cschool_author |w3cschool_count |</p>
<p>+-----------------+----------------+</p>
<p>| mahran | 20 |</p>
<p>| mahnaz | NULL |</p>
<p>| Jen | NULL |</p>
<p>| Gill | 20 |</p>
<p>| John Poul | 1 |</p>
<p>| Sanjay | 1 |</p>
<p>+-----------------+----------------+</p>
<p>mysql> SELECT * fromw3cschool_tbl;</p>
<p>+-------------+----------------+-----------------+-----------------+</p>
<p>| w3cschool_id | w3cschool_title | w3cschool_author |submission_date |</p>
<p>+-------------+----------------+-----------------+-----------------+</p>
<p>| 1 | Learn PHP | John Poul |2007-05-24 |<br />
| 2 | LearnMySQL | Abdul S | 2007-05-24 |<br />
| 3 | JAVATutorial | Sanjay | 2007-05-06 |</p>
<p>连接以上两张表来读取w3cschool_tbl表中所有w3cschool_author字段在tcount_tbl表对应的w3cschool_count字段值:</p>
<p>mysql> SELECTa.w3cschool_id, a.w3cschool_author, b.w3cschool_count FROM w3cschool_tbl aINNER JOIN tcount_tbl b ON a.w3cschool_author = b.w3cschool_author;</p>
<p>+-----------+---------------+--------------+</p>
<p>| w3cschool_id | w3cschool_author | w3cschool_count |</p>
<p>+-----------+---------------+--------------+</p>
<p>| 1 | John Poul | 1 |</p>
<p>| 3 | Sanjay | 1 |</p>
<p> </p>
<p>w3cschool_tbl 为左表,tcount_tbl 为右表,</p>
<p>mysql> SELECTa.w3cschool_id, a.w3cschool_author, b.w3cschool_count FROM w3cschool_tbl a LEFTJOIN tcount_tbl b ON a.w3cschool_author = b.w3cschool_author;</p>
<p>+-------------+-----------------+----------------+</p>
<p>| w3cschool_id | w3cschool_author | w3cschool_count |</p>
<p>+-------------+-----------------+----------------+</p>
<p>| 1 | John Poul | 1 |</p>
<p>| 2 | Abdul S | NULL |</p>
<p>| 3 | Sanjay | 1 |</p>
<p> </p>
<p>左边的数据表w3cschool_tbl的所有选取的字段数据,即便在右侧表tcount_tbl中没有对应的w3cschool_author字段值Abdul S。</p>
<p>MySQL NULL</p>
<p>IS NULL: 当列的值是NULL,此运算符返回true。<br />
IS NOT NULL: 当列的值不为NULL, 运算符返回true。</p>
<p>NULL值与任何其它值的比较(即使是NULL)永远返回false,</p>
<p>使用PHP脚本处理 NULL 值:</p>
<p>PHP脚本中你可以在 if...else 语句来处理变量是否为空,并生成相应的条件语句。</p>
<p class="maodian"><a name="_label8"></a></p><h2>MySQL 正则表达式</h2>
<p>28.MySQL中使用 REGEXP 操作符来进行正则表达式匹配。</p>
<p>^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置。<br />
$ 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置。<br />
. 匹配除"\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。</p>
<p>实例(表名:person_tbl )来加深我们的理解:</p>
<p>查找name字段中以'st'为开头的所有数据:</p>
<p>mysql> SELECT name FROM person_tbl WHERE name REGEXP '^st';</p>
<p>查找name字段中以'ok'为结尾的所有数据:</p>
<p>mysql> SELECT name FROM person_tbl WHERE name REGEXP 'ok$';</p>
<p>查找name字段中包含'mar'字符串的所有数据:</p>
<p>mysql> SELECT name FROM person_tbl WHERE name REGEXP 'mar';</p>
<p>查找name字段中以元音字符开头或以'ok'字符串结尾的所有数据:</p>
<p>mysql> SELECT name FROM person_tbl WHERE name REGEXP'^|ok$';</p>
<p class="maodian"><a name="_label9"></a></p><h2> MySQL 事务</h2>
<p>29.MySQL 事务主要用于处理操作量大,复杂度高的数据。</p>
<p>在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务</p>
<p>事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行</p>
<p>事务用来管理insert,update,delete语句</p>
<p>事务必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)</p>
<p>1、事务的原子性:一组事务,要么成功;要么撤回。</p>
<p>2、稳定性: 有非法数据(外键约束之类),事务撤回。</p>
<p>3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。</p>
<p>4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。</p>
<p class="maodian"><a name="_label10"></a></p><h2> 在MySQL控制台使用事务来操作:</h2>
<p>1,开始一个事务</p>
<p>start transaction</p>
<p>2, 做保存点</p>
<p>savepoint 保存点名称</p>
<p>3, 操作</p>
<p>4,可以回滚,可以提交,没有问题,就提交,有问题就回滚。</p>
<p><strong> PHP中使用事务实例</strong></p>
<p>mysql_query("SETAUTOCOMMIT=0");//设置为不自动提交,因为MYSQL默认立即执行mysql_query("BEGIN");//开始事务定义<br />
</p>
<div class="jb51code">
<pre class="brush:php;">
if(!mysql_query("insertinto trans (id) values('2')"))
{
mysql_query("ROOLBACK");//判断当执行失败时回滚
}
mysql_query("COMMIT");//执行事务
mysql_close($handler);
MySQL ALTER</pre>
</div>
<p>30.修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令。</p>
<p> </p>
<p>使用了 ALTER 命令及 DROP 子句来删除以上创建表的 i字段:</p>
<p>mysql> ALTER TABLEtestalter_tbl DROP i;</p>
<p>数据表中只剩余一个字段则无法使用DROP来删除字段。</p>
<p>ADD 子句来想数据表中添加列,在表 testalter_tbl 中添加 i 字段,并定义数据类型:</p>
<p>mysql> ALTER TABLEtestalter_tbl ADD i INT;</p>
<p> </p>
<p>以下 ALTERTABLE 语句, 在执行成功后,使用 SHOW COLUMNS 查看表结构的变化:</p>
<p>ALTER TABLEtestalter_tbl DROP i;<br />
ALTER TABLEtestalter_tbl ADD i INT FIRST;<br />
ALTER TABLEtestalter_tbl DROP i;<br />
ALTER TABLEtestalter_tbl ADD i INT AFTER c;</p>
<p>FIRST 和 AFTER 关键字只占用于 ADD 子句,所以如果你想重置数据表字段的位置就需要先使用 DROP 删除字段然后使用 ADD 来添加字段并设置位置。</p>
<p> </p>
<p>修改字段类型及名称:</p>
<p>31.在ALTER命令中使用 MODIFY 或 CHANGE 子句 。</p>
<p>把字段 c 的类型从 CHAR(1) 改为 CHAR(10),可以执行以下命令:<br />
mysql> ALTER TABLEtestalter_tbl MODIFY c CHAR(10);<br />
使用 CHANGE 子句, 语法有很大的不同。 在 CHANGE 关键字之后,紧跟着的是你要修改的字段名,然后指定新字段的类型及名称。尝试如下实例:<br />
mysql> ALTER TABLEtestalter_tbl CHANGE i j BIGINT;<br />
<p如果你现在想把字段 j 从 BIGINT 修改为 INT,SQL语句如下:<br />
mysql> ALTER TABLEtestalter_tbl CHANGE j j INT;</p>
<p> </p>
<p>ALTER修改字段的默认值,mysql> ALTER TABLEtestalter_tbl ALTER i SET DEFAULT 1000;<br />
ALTER 及DROP删除字段的默认值, ALTER TABLEtestalter_tbl ALTER i DROP DEFAULT;<br />
ALTER及 TYPE修改数据表类型,mysql> ALTER TABLEtestalter_tbl TYPE = MYISAM;<br />
ALTER TABLE 使用RENAME修改数据表的名称,mysql> ALTER TABLEtestalter_tbl RENAME TO alter_tbl;</p>
<p class="maodian"><a name="_label11"></a></p><h2>MySQL 索引</h2>
<p>索引可以大大提高MySQL的检索速度<br />
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。<br />
创建索引,确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。<br />
索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。<br />
缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。<br />
3方式创建普通索引</p>
<p>CREATE INDEX indexName ONmytable(username(length));</p>
<p>如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。</p>
<p>修改表结构</p>
<p>ALTER mytable ADD INDEX ON (username(length))</p>
<p>创建表的时候直接指定</p>
<div class="jb51code">
<pre class="brush:sql;">
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOTNULL,
INDEX (username(length))
); </pre>
</div>
<p><strong>删除索引的语法</strong></p>
<p>DROP INDEX ONmytable;</p>
<p> 唯一索引:前面加UNIQUE</p>
<p> 使用ALTER 命令添加和删除索引</p>
<p>有四种方式来添加数据表的索引:</p>
<p>ALTER TABLE tbl_name ADD PRIMARYKEY (column_list):该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。<br />
ALTER TABLE tbl_name ADD UNIQUEindex_name (column_list):这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。<br />
ALTER TABLE tbl_name ADD INDEXindex_name (column_list):添加普通索引,索引值可出现多次。<br />
ALTER TABLE tbl_name ADD FULLTEXTindex_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。</p>
<p> 使用 ALTER 命令添加和删除主键</p>
<p>主键只能作用于一个列上,添加主键索引时,你需要确保该主键默认不为空(NOT NULL)。实例如下:</p>
<p>mysql> ALTER TABLEtestalter_tbl MODIFY i INT NOT NULL;</p>
<p>mysql> ALTER TABLEtestalter_tbl ADD PRIMARY KEY (i);</p>
<p>你也可以使用 ALTER 命令删除主键:</p>
<p>mysql> ALTER TABLEtestalter_tbl DROP PRIMARY KEY;</p>
<p> </p>
<p>SHOW INDEX 命令列出表中的相关的索引信息。可以通过添加 \G 来格式化输出信息。</p>
<p>mysql> SHOW INDEX FROMtable_name\G</p>
<p> </p>
<p><strong>MySQL 临时表</strong></p>
<p>临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间。</p>
<p>mysql> CREATE TEMPORARY TABLE SalesSummary</p>
<p>mysql> DROP TABLE SalesSummary;</p>
<p><strong>MySQL 复制表</strong></p>
<p>创建新的克隆表clone_tbl。如果你想拷贝数据表的数据你可以使用 INSERT INTO... SELECT 语句来实现。</p>
<p>mysql> INSERT INTOclone_tbl (w3cschool_id,<br />
-> w3cschool_title,<br />
-> w3cschool_author,<br />
-> submission_date)<br />
-> SELECT w3cschool_id,w3cschool_title,<br />
-> w3cschool_author,submission_date<br />
->FROM w3cschool_tbl;</p>
<p class="maodian"><a name="_label12"></a></p><h2> MySQL 元数据</h2>
<p>想知道MySQL以下三种信息:</p>
<p>查询结果信息: SELECT,UPDATE 或 DELETE语句影响的记录数。<br />
数据库和数据表的信息: 包含了数据库及数据表的结构信息。<br />
MySQL服务器信息: 包含了数据库服务器的当前状态,版本号等。</p>
<p>(1)使用do( ) 执行 $query</p>
<p>my $count = $dbh->do($query);</p>
<p>(2)使用prepare( )及 execute( ) 执行 $query</p>
<p>my $sth =$dbh->prepare ($query);</p>
<p>my $count =$sth->execute ( ); </p>
<p>在PHP中,使用mysql_affected_rows( ) 函数获取查询语句影响的记录数。</p>
<div class="jb51code">
<pre class="brush:sql;">
$result_id =mysql_query ($query, $conn_id);
# 如果查询失败返回
$count = ($result_id ?mysql_affected_rows ($conn_id) : 0);
print ("$countrows were affected\n");</pre>
</div>
<p class="maodian"><a name="_label13"></a></p><h2> 数据库和数据表列表</h2>
<p>PERL 实例</p>
<p># 获取当前数据库中所有可用的表。</p>
<div class="jb51code">
<pre class="brush:sql;">
my @tables =$dbh->tables ( );
foreach $table (@tables){
print "Table Name $table\n";
}
</pre>
</div>
<p><strong>PHP 实例:</strong></p>
<div class="jb51code">
<pre class="brush:php;">
$db_list =mysql_list_dbs($con);
while ($db = mysql_fetch_object($db_list))
{
echo $db->Database . "<br/>";
}
</pre>
</div>
<p><strong>MySQL 序列</strong></p>
<p>MySQL序列是一组整数:1, 2, 3, ...,</p>
<p>用 MySQLAUTO_INCREMENT 来定义列。</p>
<p>mysql> CREATE TABLEinsect</p>
<p> -> (</p>
<p> -> id INT UNSIGNED NOT NULLAUTO_INCREMENT,</p>
<p> </p>
<p>用 SQL中的LAST_INSERT_ID() 函数来获取最后的插入表中的自增列的值。</p>
<p><strong> PERL实例</strong></p>
<p>使用mysql_insertid 属性来获取 AUTO_INCREMENT 的值。实例如下:</p>
<p>$dbh->do("INSERT INTO insect (name,date,origin)</p>
<p>VALUES('moth','2001-09-14','windowsill')");</p>
<p>my $seq =$dbh->{mysql_insertid};</p>
<p><strong>PHP实例</strong></p>
<p>PHP 通过 mysql_insert_id ()函数来获取执行的插入SQL语句中 AUTO_INCREMENT列的值。</p>
<div class="jb51code">
<pre class="brush:sql;">
mysql_query("INSERT INTO insect (name,date,origin)
VALUES('moth','2001-09-14','windowsill')",$conn_id);
$seq = mysql_insert_id($conn_id);</pre>
</div>
<p><strong>重置序列</strong></p>
<p>删除了数据表中的多条记录,并对剩下数据的AUTO_INCREMENT列进行重新排列,那么你可以通过删除自增的列,然后重新添加来实现。</p>
<p>mysql> ALTER TABLEinsect DROP id;</p>
<p>mysql> ALTER TABLEinsect</p>
<p> -> ADD id INT UNSIGNED NOT NULLAUTO_INCREMENT FIRST,</p>
<p> -> ADD PRIMARY KEY (id);</p>
<p>一般情况下序列的开始值为1,但如果你需要指定一个开始值100:</p>
<p>-> id INT UNSIGNEDNOT NULL AUTO_INCREMENT = 100,</p>
<p>或在表创建成功后,通过以下语句来实现:</p>
<p>mysql> ALTER TABLE tAUTO_INCREMENT = 100;</p>
<p class="maodian"><a name="_label14"></a></p><h2> MySQL 处理重复数据</h2>
<p>防止表中出现重复数据</p>
<p>在MySQL数据表中设置指定的字段为PRIMARY KEY(主键)或者UNIQUE(唯一)索引保证数据的唯一性。</p>
<p>设置表中字段first_name,last_name数据不能重复,你可以设置双主键模式来设置数据的唯一性, 如果你设置了双主键,那么那个键的默认值不能为NULL,可设置为NOT NULL。如下所示:</p>
<div class="jb51code">
<pre class="brush:sql;">
CREATE TABLE person_tbl
(
first_name CHAR(20) NOT NULL,
last_name CHAR(20) NOT NULL,
sexCHAR(10),
PRIMARY KEY (last_name, first_name)
);</pre>
</div>
<p>INSERT IGNOREINTO与INSERT INTO的区别就是INSERT IGNORE会忽略数据库中已经存在的数据,如果数据库没有数据,就插入新的数据,如果有数据的话就跳过这条数据。这样可以保留数据库中已经存在数据,达到在间隙中插入数据的目的。</p>
<p>用了INSERT IGNORE INTO,执行后不会出错,也不会向数据表中插入重复数据:</p>
<p>mysql> INSERT IGNORE INTO person_tbl(last_name, first_name)</p>
<p> ->VALUES( 'Jay', 'Thomas');</p>
<p>Query OK, 1 row affected (0.00 sec)</p>
<p> </p>
<p>REPLACE INTO into如果存在primary 或 unique相同的记录,则先删除掉。再插入新记录。</p>
<p> UNIQUE(last_name, first_name)</p>
<p> </p>
<p>查询重复记录</p>
<p>select user_name,count(*) as count fromuser_table group by user_name having count>1;</p>
<p>select * from people</p>
<p>where peopleId in (select peopleId from peoplegroup by peopleId having count(peopleId) > 1)</p>
<p> </p>
<p>统计重复数据</p>
<p>统计表中 first_name 和 last_name的重复记录数:</p>
<div class="jb51code">
<pre class="brush:sql;">
mysql> SELECT COUNT(*) as repetitions,last_name, first_name
->FROM person_tbl
->GROUP BY last_name, first_name
->HAVING repetitions > 1;</pre>
</div>
<p class="maodian"><a name="_label15"></a></p><h2> 过滤重复数据</h2>
<p>读取不重复的数据可以在SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。</p>
<p>mysql> SELECT DISTINCT last_name, first_name</p>
<p> ->FROM person_tbl</p>
<p> ->ORDER BY last_name;</p>
<p> </p>
<p>也可以使用 GROUP BY 来读取数据表中不重复的数据:</p>
<div class="jb51code">
<pre class="brush:sql;">
mysql> SELECT last_name, first_name
->FROM person_tbl
->GROUP BY (last_name, first_name);</pre>
</div>
<p class="maodian"><a name="_label16"></a></p><h2> 删除重复数据</h2>
<p>删除数据表中的重复数据,你可以使用以下的SQL语句:</p>
<div class="jb51code">
<pre class="brush:sql;">
mysql> CREATE TABLE tmp SELECT last_name,first_name, sex
-> FROMperson_tbl;
-> GROUP BY(last_name, first_name);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;
</pre>
</div>
<p>也可以在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表中的重复记录。方法如下:</p>
<div class="jb51code">
<pre class="brush:sql;">
mysql> ALTER IGNORE TABLE person_tbl
->ADD PRIMARY KEY (last_name, first_name);
</pre>
</div>
<p><strong>MySQL 及 SQL 注入</strong></p>
<p>没有过滤特殊字符时,出现的SQL情况:</p>
<p>// 设定$name 中插入了我们不需要的SQL语句</p>
<p>$name = "Qadir';DELETE FROM users;";</p>
<p>mysql_query("SELECT* FROM users WHERE name='{$name}'");</p>
<p>以上的注入语句中,我们没有对 $name 的变量进行过滤,$name中插入了我们不需要的SQL语句,将删除 users 表中的所有数据。</p>
<p> </p>
<p><strong>防止SQL注入,注意以下几个要点:</strong></p>
<p>1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和双"-"进行转换等。</p>
<p>2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。</p>
<p>3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。</p>
<p>4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。</p>
<p>5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装</p>
<p>6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。</p>
<p> 在脚本语言,如Perl和PHP可以对用户输入的数据进行转义从而来防止SQL注入。</p>
<p>PHP的MySQL扩展提供了mysql_real_escape_string()函数来转义特殊的输入字符。</p>
<div class="jb51code">
<pre class="brush:sql;">
if (get_magic_quotes_gpc())
{
$name = stripslashes($name);
}
$name =mysql_real_escape_string($name);
mysql_query("SELECT * FROMusers WHERE name='{$name}'");</pre>
</div>
<p class="maodian"><a name="_label17"></a></p><h2>Like语句中的注入</h2>
<p>like查询时,如用户输入的值有"_"和"%",则会出现这种情况:用户本只想查询"abcd_",查询结果中却有"abcd_"、"abcde"、"abcdf"等等;用户要查询"30%"(注:百分之三十)时也会出现问题。</p>
<p>在PHP脚本中我们可以使用addcslashes()函数来处理以上情况,如下实例:</p>
<p>$sub =addcslashes(mysql_real_escape_string("%something_"), "%_");</p>
<p>// $sub == \%something\_</p>
<p>mysql_query("SELECT * FROMmessages WHERE subject LIKE '{$sub}%'");</p>
<p>addcslashes() 函数在指定的字符前添加反斜杠。</p>
<p>语法格式:</p>
<p>addcslashes(string,characters) </p>
<p class="maodian"><a name="_label18"></a></p><h2>MySQL 导出数据</h2>
<p>使用 SELECT ...INTO OUTFILE 语句导出数据</p>
<p>将数据表w3cschool_tbl 数据导出到 /tmp/tutorials.txt 文件中:</p>
<p>mysql> SELECT * FROMtutorials_tbl</p>
<p> -> INTO OUTFILE '/tmp/tutorials.txt';</p>
<p>生成一个文件,各值用逗号隔开。这种格式可以被许多程序使用。</p>
<div class="jb51code">
<pre class="brush:sql;">
SELECT a,b,a+b INTOOUTFILE '/tmp/result.text'
FIELDS TERMINATED BY',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY'\n'
FROM test_table;</pre>
</div>
<p>SELECT ... INTO OUTFILE 语句有以下属性:</p>
<p>LOAD DATA INFILE是SELECT ... INTO OUTFILE的逆操作,SELECT句法。为了将一个数据库的数据写入一个文件,使用SELECT ... INTO OUTFILE,为了将文件读回数据库,使用LOAD DATA INFILE。</p>
<p>SELECT...INTO OUTFILE 'file_name'形式的SELECT可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此您必须拥有FILE权限,才能使用此语法。</p>
<p>输出不能是一个已存在的文件。防止文件数据被篡改。</p>
<p>你需要有一个登陆服务器的账号来检索文件。否则SELECT ... INTO OUTFILE 不会起任何作用。</p>
<p>在UNIX中,该文件被创建后是可读的,权限由MySQL服务器所拥有。这意味着,虽然你就可以读取该文件,但可能无法将其删除</p>
<p class="maodian"><a name="_label19"></a></p><h2> 导出表作为原始数据</h2>
<p>mysqldump是MySQL用于转存储数据库的实用程序。</p>
<p>将数据表tutorials_tbl 导出到 /tmp 目录中:</p>
<p>$ mysqldump -u root -p--no-create-info \</p>
<p> --tab=/tmp W3CSCHOOL w3cschool_tbl</p>
<p>password ******</p>
<p>导出整个数据库的数据,可以使用以下命令:</p>
<p>$ mysqldump -u root -pW3CSCHOOL > database_dump.txt</p>
<p>password ******</p>
<p>备份所有数据库,可以使用以下命令:</p>
<p>$ mysqldump -u root -p--all-databases > database_dump.txt</p>
<p>password ******</p>
<p>在 mysqldump 命令中指定数据库名及数据表。</p>
<p>在源主机上执行以下命令,将数据备份至 dump.txt 文件中:</p>
<p>$ mysqldump -u root -pdatabase_name table_name > dump.txt</p>
<p>password *****</p>
<p>将备份的数据库导入到MySQL服务器中,可以使用以下命令,使用以下命令你需要确认数据库已经创建:</p>
<p>$ mysql -u root -pdatabase_name < dump.txt password *****</p>
<p>以下命令将导出的数据直接导入到远程的服务器上,但请确保两台服务器是相通的,是可以相互访问的:</p></p>
<p>$ mysqldump -u root -pdatabase_name \</p>
<p> | mysql -h other-host.com database_name</p>
<p class="maodian"><a name="_label20"></a></p><h2> MySQL 导入数据</h2>
<p>从当前目录中读取文件dump.txt ,将该文件中的数据插入到当前数据库的 mytbl 表中。</p>
<p>mysql> LOAD DATALOCAL INFILE 'dump.txt' INTO TABLE mytbl;</p>
<p>如果用户指定一个FIELDS 子句,它的子句(TERMINATED BY、 ENCLOSED BY 和 ESCAPED BY) 也是可选的,不过,用户必须至少指定它们中的一个。</p>
<p>mysql> LOAD DATALOCAL INFILE 'dump.txt' INTO TABLE mytbl</p>
<p> -> FIELDS TERMINATED BY ':'</p>
<p> -> LINES TERMINATED BY '\r\n';</p>
<p>指定列的顺序。</p>
<p>如,在数据文件中的列顺序是a,b,c,但在插入表的列顺序为b,c,a,则数据导入语法如下:</p>
<p>mysql> LOAD DATALOCAL INFILE 'dump.txt'</p>
<p> -> INTO TABLE mytbl (b, c, a);</p>
<p> </p>
<p class="maodian"><a name="_label21"></a></p><h2>使用mysqlimport 导入数据</h2>
<p>mysqlimport客户端提供了LOADDATA INFILEQL语句的一个命令行接口。mysqlimport的大多数选项直接对应LOAD DATA INFILE子句。</p>
<p>从文件 dump.txt 中将数据导入到 mytbl数据表中, 可以使用以下命令:</p>
<p>$ mysqlimport -u root-p --local database_name dump.txt</p>
<p>password *****</p>
<p>mysqlimport命令可以指定选项来设置指定格式,命令语句格式如下:</p>
<p>$ mysqlimport -u root-p --local --fields-terminated-by=":" \</p>
<p> --lines-terminated-by="\r\n" database_name dump.txt</p>
<p>password *****</p>
<p>mysqlimport 语句中使用 --columns 选项来设置列的顺序:</p>
<p>$ mysqlimport -u root-p --local --columns=b,c,a \</p>
<p> database_name dump.txt</p>
<p>password *****</p>
頁:
[1]