??xml version="1.0" encoding="utf-8" standalone="yes"?>久久国产夜色精品鲁鲁99,伊人www22综合色,国产乱码精品一区二区三区不卡 http://www.aygfsteel.com/onlykeke/category/14494.htmlU尘最可笑Q我自乐逍遥zh-cnWed, 28 Feb 2007 02:50:17 GMTWed, 28 Feb 2007 02:50:17 GMT60Speed up random selecting in MySql[转]http://www.aygfsteel.com/onlykeke/archive/2006/12/08/86370.html奇葛?/dc:creator>奇葛?/author>Fri, 08 Dec 2006 07:43:00 GMThttp://www.aygfsteel.com/onlykeke/archive/2006/12/08/86370.htmlhttp://www.aygfsteel.com/onlykeke/comments/86370.htmlhttp://www.aygfsteel.com/onlykeke/archive/2006/12/08/86370.html#Feedback0http://www.aygfsteel.com/onlykeke/comments/commentRss/86370.htmlhttp://www.aygfsteel.com/onlykeke/services/trackbacks/86370.html http://jack.lifegoo.com/?p=27

RAND()
是MySql的一个内嵌函敎ͼ主要用来生成随机数?/p>

RAND()/RAND(N) returns a random floating-point value v between 0 and 1 inclusive (that is, in the range 0 <= v <= 1.0). If an integer argument N is specified, it is used as the seed value, which produces a repeatable sequence of column values.

MySql的文档说”把 ORDER BY RAND()和LIMIT联合使用Q那么就可以来随机选择?ORDER BY RAND() combined with LIMIT is useful for selecting a random sample from a set of rows)? 例如:

SELECT * FROM random ORDER BY RAND() LIMIT 1

当上qSQLq行ӞRAND()必须每次都被解释以便获得新的随机数。同时从explain sql的extra信息我们大致可以推出上面SQL的工作流E?

  1. MySql用结果集创徏一个temporary table(Using temporary).
  2. l结果集的每一行赋予一个随机有序的索引.
  3. q行排序然后q回l果 (Using filesort).

q个q程对于量数据(具体见后面的benchmarks report)是可行的Q但是对于大数据集是很浪Ҏ间的。换而言之,ORDER BY RAND()对于随机选取的scalibility是很差的?/p>

现在回到问题的最初,前天钱斌在察看MySql服务器性能时发现ORDER BY RAND()q个SQL语句非常?数据库表内有q?00,000的数据,以后q要增加)Q然后他提出自己的一个解x?—? 数据插入前随机排序,选取旉序读取。这是一个可行的办法Q成本是必须修改E序。另一斚w我也不愿意放弃MySql提供的RAND()函数?/p>

重新看ORDER BY RAND()的工作流E,可以扑և优化的途径(序列号对应上面的工作程序):

  1. l果集能不能~到最? 能不能做到和外部数据无关Q而是一U常数的关系? 能不能在l果集的选取上就是随机的?
  2. 对表l构里面的一些属性做索引?
  3. 对结果集按照某个属性来做排序然后返回结果?
  4. RAND()不能出现在WHERE后面以保证RAND()是只q行一ơ的?

按照q些xQ下面就是设计其实现?/p>

  1. 首先惛_的方案很单,cM内存讉K。table里数据都是从W一条开始读取,其访问偏U量可以做到随机?br />

    SELECT FLOOR(RAND() * COUNT(*)) AS offset FROM random;
    SELECT * FROM random LIMIT offset, 1;

    唯一的问题是Q上面是两句独立的SELECT语句Q所以可以用存储q程或者MySql函数来实现?

  2. 下面的方案主要集中力量在~小l果斚w。假设最单的一U场? random table里面有一个bigint型的主键(Cid)Q那么选取Z?id >= FLOOR(max(id) * RAND()) 会怎么样呢?

    SELECT * FROM random
    WHERE id >= (SELECT FLOOR(MAX(id) * RAND()) FROM random )
    ORDER BY id ASC LIMIT 1;

    可以分析出来Q因为RAND()是在[0, 1]区间Q所以结果集数目是在[0, max(id)]之间。这样就说明l果集是不稳定的Q换句话说它可能受外部数据的变化而振动。更致命的缺hRAND()是在WHERE后面的,q样每选择一行,RAND()都要被解释一ơ?

  3. 试改善上述Ҏ的缺P我们得到q样的实?

    SELECT *
    FROM random AS r JOIN (SELECT FLOOR(RAND() * SELECT MAX(id) FROM random) AS id ) AS r0
    WHERE r.id >= r0.id
    ORDER BY r.id ASC LIMIT 1;

    W二U方案里面嵌套SELECT我们用INNER JOIN来取代。这U取代得RAND()只需要解释运行一ơ。当然它的结果集数目q是停留在[0, max(id)]区间?

最后是benchmarks的一些数?

W?U解x? SELECT * FROM random ORDER BY RAND() LIMIT 1
W?U解x? SELECT * FROM random WHERE id >= (SELECT FLOOR(MAX(id) * RAND()) FROM random ) ORDER BY id ASC LIMIT 1;
W?U解x? SELECT * FROM random AS r JOIN (SELECT FLOOR(RAND() * SELECT MAX(id) FROM random) AS id ) AS r0 WHERE r.id >= r0.id ORDER BY r.id ASC LIMIT 1;
上述三种Ҏ都分别独立运?00ơ?/p>
random数据大小 W?U解x?/td> W?U解x?/td> W?U解x?/td>
100 0.08s 0.08s 0.02s
500 0.08s 0.80s 0.00-0.01s
1000 0.14s 2.00s 0.02s
10000 1.53s 65.02s 0.00-0.02s
100000 15.83s   0.00-0.02s

rand100.png



]]>
选出某一字段中持l递增的数据块(oracle)http://www.aygfsteel.com/onlykeke/archive/2006/11/16/81584.html奇葛?/dc:creator>奇葛?/author>Thu, 16 Nov 2006 10:34:00 GMThttp://www.aygfsteel.com/onlykeke/archive/2006/11/16/81584.htmlhttp://www.aygfsteel.com/onlykeke/comments/81584.htmlhttp://www.aygfsteel.com/onlykeke/archive/2006/11/16/81584.html#Feedback0http://www.aygfsteel.com/onlykeke/comments/commentRss/81584.htmlhttp://www.aygfsteel.com/onlykeke/services/trackbacks/81584.htmlinsert into t1 values(133010);
insert into t1 values(133024);
insert into t1 values(133036);
insert into t1 values(133037);
insert into t1 values(133038);
insert into t1 values(133039);
insert into t1 values(133046);
insert into t1 values(133191);
insert into t1 values(133192);
insert into t1 values(133193);
insert into t1 values(133194);
insert into t1 values(133207);

select no from (
    select no,lag(no,1,null) over(order by no) no1,no-lag(no,1,null) over(order by no) bal
    from t1)
where bal=1
union
select no1 from (
    select no,lag(no,1,null) over(order by no) no1,no-lag(no,1,null) over(order by no) bal
    from t1)
where bal=1;


]]>
MySQL 4.1字符集支持[转]http://www.aygfsteel.com/onlykeke/archive/2006/10/24/76918.html奇葛?/dc:creator>奇葛?/author>Tue, 24 Oct 2006 02:59:00 GMThttp://www.aygfsteel.com/onlykeke/archive/2006/10/24/76918.htmlhttp://www.aygfsteel.com/onlykeke/comments/76918.htmlhttp://www.aygfsteel.com/onlykeke/archive/2006/10/24/76918.html#Feedback0http://www.aygfsteel.com/onlykeke/comments/commentRss/76918.htmlhttp://www.aygfsteel.com/onlykeke/services/trackbacks/76918.html注:

MySQL的官Ҏ册关于字W集的介l比较全面,可以通过
创徏q接时指?br />useUnicode true
characterEncoding UTF-8
characterSetResults UTF-8
q些选项Q配合数据库默认的字W集实现支持中文?/p>

因ؓ字符从浏览器发送时为编码后的普通iso-8859-1文本?br />l过PHP转换为gb2312或utf-8后再发送到数据库时如果再{换编码,
带来的性能费可想而知?/p>



A MySQL 4.1 Story

下面要写的是一非常无聊的东西Q充斥了大量各式各样的编码、{换、客L、服务器端、连接……呃Q我自己都不愿意ȝ它,但想一惻I写下来还是有Ҏ义的Q原因有四:

  1. MySQL 4.1 对多语言的支持有了很大变?(q导致了问题的出?Q?/li>
  2. 管大部分的地方 (包括个h使用和主机提供商)QMySQL 3 仍然占主导地位;?MySQL 4.1 ?MySQL 官方推荐的数据库Q已l有L提供商开始提供ƈ会来多Q?/li>
  3. 许多 PHP E序?MySQL 作ؓ默认的数据库理软gQ但它们一般不区分 MySQL 4.1 ?4.1 以下版本的区别,W统地称“MySQL 3.xx.xx 以上版本”就满安装需求了Q?/li>
  4. 因ؓ latin1 在许多地?(下边会详l描q具体是哪些地方) 作ؓ默认的字W集Q成功的蒙蔽了许?PHP E序的开发者和用户Q掩盖了在中文等语言环境下会出现的问题;

单的_MySQL 自n的变化和使用 MySQL ?PHP E序Ҏ忽略Q导致了问题的出现和复杂化,而由于大部分用户使用的是英文Qɘq种问题不被重视。这里提到的 PHP E序Q主要就 WordPress 而言?

MySQL 4.1 字符集支持的原理

MySQL 4.1 对于字符集的指定可以l化C台机器上安装?MySQLQ其中的一个数据库Q其中的一张表Q其中的一栏,应该用什么字W集。但是,传统?Web E序在创建数据库和数据表时ƈ没有使用那么复杂的配|,它们用的是默认的配置Q那么,默认的配|从何而来呢?

  1. ~译 MySQL Ӟ指定了一个默认的字符集,q个字符集是 latin1Q?/li>
  2. 安装 MySQL Ӟ可以在配|文?(my.ini) 中指定一个默认的的字W集Q如果没指定Q这个值承自~译时指定的Q?/li>
  3. 启动 mysqld Ӟ可以在命令行参数中指定一个默认的的字W集Q如果没指定Q这个值承自配置文g中的Q?/li>
  4. 此时 character_set_server 被设定ؓq个默认的字W集Q?/li>
  5. 当创Z个新的数据库Ӟ除非明确指定Q这个数据库的字W集被缺省设定ؓ character_set_serverQ?/li>
  6. 当选定了一个数据库Ӟcharacter_set_database 被设定ؓq个数据库默认的字符集;
  7. 在这个数据库里创Z张表Ӟ表默认的字符集被讑֮?character_set_databaseQ也是q个数据库默认的字符集;
  8. 当在表内讄一栏时Q除非明指定,否则此栏~省的字W集是表默认的字符集;
  9. q个字符集就是数据库中实际存储数据采用的字符集,mysqldump 出来的内容就是这个字W集下的Q?/li>

单的ȝ一下,如果什么地斚w不修改,那么所有的数据库的所有表的所有栏位的都用 latin1 存储Q不q我们如果安?MySQLQ一般都会选择多语a支持Q也是_安装E序会自动在配置文g中把 default_character_set 讄?UTF-8Q这保证了缺省情况下Q所有的数据库的所有表的所有栏位的都用 UTF-8 存储?/p>

当一?PHP E序?MySQL 建立q接后,q个E序发送给 MySQL 的数据采用的是什么字W集QMySQL 无从得知 (它最多只能猜?Q所?MySQL 4.1 要求客户端必L定这个字W集Q也是 character_set_clientQMySQL 的怪异之处在于Q得到的q个字符集ƈ不立卌{换ؓ存储在数据库中的那个字符集,而是先{换ؓ character_set_connection 变量指定的一个字W集Q这?connection 层究竟有什么用我不大明白,但{换ؓ character_set_connection 的这个字W集之后Q还要{换ؓ数据库默认的字符集,也就是说要经q两ơ{换;当这个数据被输出Ӟ又要由数据库默认的字W集转换?character_set_results 指定的字W集?/p>

一个典型的环境

典型的环境以我自q电脑上安装的 MySQL 4.1 ZQ我自己的电脑上安装着 Apache 2QPHP 5 ?WordPress 1.5.1.3QMySQL 配置文g中指定了 default_character_set ?utf8。于是问题出CQ?/p>

  1. WordPress 按照默认情况安装Q所以所有的表都?UTF-8 存储数据Q?/li>
  2. WordPress 默认采用的浏览字W集?UTF-8 (Options->Reading 中设|?Q因此所?WP 面?meta 中会说明 charset ?utf-8Q?/li>
  3. 所以浏览器会以 utf-8 方式昄所有的 WP 面Q这样一?Write 的所?PostQ和 Comment 都会?UTF-8 格式从浏览器发送给 ApacheQ再?Apache 交给 PHPQ?/li>
  4. 所?WP 从所有的表单中得到的数据都是 utf-8 ~码的;WP 不加转换的直接把q些数据发送给 MySQLQ?/li>
  5. MySQL 默认讄?character_set_client ?character_set_connection 都是 latin1Q此时怪异的事情发生了Q实际上?utf-8 格式的数据,被“当?latin1”{换成……居然还是{换成 latin1Q然后再p?latin1 转换?utf-8Q这么两ơ{换,有一部分 utf-8 的字W就丢失了,变成 ??Q最后输出的时?character_set_results 默认?latin1Q也pZؓ奇怪的东西了?/li>

最奇的还不是q个Q如?WordPress 中设|以 GB2312 格式阅读Q那?WP 发送给 MySQL ?GB2312 ~码的数据,被“当?latin1”{换后Q存q数据库的是一U奇怪的格式 (真的是奇怪的格式Qmysqldump 出来p发现Q无论当?utf-8 q是当作 gb2312 来读都是q)Q但如果q种格式?latin1 输出出来Q居然又能变?GB2312Q?/p>

q会D什么现象呢QWP 如果使用 MySQL 4.1 数据库,把编码改?GB2312 正怺Q可惜,q种正常只是貌似正常?/p>

如何解决问题

如果你已l不耐烦?(几乎是肯定的)Qgoogle 一下,会发现绝大部分的解答是,query 之前先执行一下:SET NAMES 'utf8'Q没错,q是解决ҎQ但本文的目的是说明Q这Z么是解决Ҏ?/p>

要保证结果正,必须保证数据表采用的格式是正的Q也是_臛_能够存放所有的汉字Q那么我们只有两U选择Qgbk 或?utf-8Q下面讨?utf-8 的情c?/p>

因ؓ配置文g讄?default_character_set ?utf8Q数据表默认采用的就?utf-8 建立的。这也应该是所有采?MySQL 4.1 的主机提供商应该采用的配|。所以我们要保证的只是客L?MySQL 交互之间指定~码的正?/p>

q只有两U可能,客户端以 gb2312 格式发送数据,或者以 utf-8 格式发送数据?/p>

如果?gb2312 格式发?

						SET character_set_client='gb2312'
SET character_set_connection='utf8' 或?
SET character_set_connection='gb2312'

				

都是可以的,都能够保证数据在~码转换中不出现丢失Q也是保证存储入数据库的是正确的内宏V?/p>

怎么保证取出的是正确的内容呢Q考虑到绝大部分客L (包括 WP)Q发送数据的~码也就是它所希望收到数据的编码,所?

						SET character_set_results='gb2312'

				

可以保证取出l浏览器昄的格式就?gb2312?/p>

如果是第二种情况Q客L?utf-8 格式发?(WP 的默认情?Q可以采用下q配|?

						SET character_set_client='utf8'
SET character_set_connection='utf8'
SET character_set_results='utf8'

				

q个配置q价于 SET NAMES 'utf8'?/p>

WP 应该作什么修?/h3>

q是那句话,客户端要发给数据库什么编码的数据Q数据库是不可能切知道的,只能让客L自己说明白,所以,WP 是必d送正的 SET... l?MySQL 的。怎么发送最合适呢Q台湄 pLog 同仁l出了一?a >Q?/p>

  1. 首先Q测试服务器是否 >= 4.1Q编译时是否加入?UTF-8 支持Q是则l?/li>
  2. 然后试数据库以什么格式存?($dbEncoding)Q?/li>
  3. SET NAMES $dbEncoding

对于W二点,WP 的情冉|不同的,按照上面的典型配|,只要?WPQ肯定数据库是用 UTF-8 存储的,所以要Ҏ用户讄的以 GB2312 q是 UTF-8 览来判?(bloginfo('charset'))Q但q个值是要连接数据库以后才能得到的,所以效率最高的方式是连接数据库之后Q根据这个配|设|一?SET NAMESQ而不必每ơ查询之前都讄一遍?/p>

我的修改方式是这LQ在 wp_includes/wp-db.php 中增?

						function set_charset($charset)
{
    // check mysql version first.
    $serverVersion = mysql_get_server_info($this->dbh); 
    $version = explode('.', $serverVersion); 
    if ($version[0] < 4) return; 

    // check if utf8 support was compiled in 
    $result = mysql_query("SHOW CHARACTER SET like 'utf8'", 
                          $this->dbh); 
    if (mysql_num_rows($result) < = 0) return;

    if ($charset == 'utf-8' || $charset == 'UTF-8')
        $charset = 'utf8';
    @mysql_query("SET NAMES '$charset'", $this->dbh); 
}

				

?wp-settings.php ?require (ABSPATH . WPINC . '/vars.php'); 后增?

						$wpdb->set_charset(get_bloginfo('charset'));

				



]]>
mysqlimport的用法[引]http://www.aygfsteel.com/onlykeke/archive/2006/09/22/71348.html奇葛?/dc:creator>奇葛?/author>Fri, 22 Sep 2006 08:45:00 GMThttp://www.aygfsteel.com/onlykeke/archive/2006/09/22/71348.htmlhttp://www.aygfsteel.com/onlykeke/comments/71348.htmlhttp://www.aygfsteel.com/onlykeke/archive/2006/09/22/71348.html#Feedback0http://www.aygfsteel.com/onlykeke/comments/commentRss/71348.htmlhttp://www.aygfsteel.com/onlykeke/services/trackbacks/71348.html
1Q?MySQLimport的语法介l:

  MySQLimport位于MySQL/bin目录中,是MySQL的一个蝲入(或者说导入Q数据的一个非常有效的工具。这是一个命令行工具。有两个
参数以及大量的选项可供选择。这个工h一个文本文Ӟtext
fileQ导入到你指定的数据库和表中。比方说我们要从文gCustomers.txt中把数据导入到数据库Meet_A_Geek中的?br />Custermers中:

  mysqlimport Meet_A_Geek Customers.txt

  注意Q这里Customers.txt是我们要导入数据的文本文Ӟ而Meet_A_Geek是我们要操作的数据库Q数据库中的表名是CustomersQ这里文本文件的数据格式必须与Customers表中的记录格式一_否则MySQLimport命o会出错?/p>

  其中表的名字是导入文件的W一个句P.Q前面文件字W串Q另外一个例子:MySQLimport Meet_A_Geek Cus.to.mers.txt

  那么我们把文g中的内容导入到数据库Meet_A_Geek 中的Cus表中?/p>

  上面的例子中Q都只用C个参敎ͼq没有用到更多的选项Q下面介lMySQLimport的选项

  2Q?MySQLimport的常用选项介绍:

  选项 功能

  -d or --delete 新数据导入数据表中之前删除数据数据表中的所有信?/p>

  -f or --force 不管是否遇到错误QMySQLimport强制l插入数?/p>

  -i or --ignore MySQLimport跌或者忽略那些有相同唯一关键字的行, 导入文g中的数据被忽略?/p>

  -l or -lock-tables 数据被插入之前锁住表Q这样就防止了,你在更新数据库时Q用L查询和更新受到媄响?/p>

  -r or -replace q个选项与-i选项的作用相反;此选项替代表中有相同唯一关键字的记录?/p>

  --fields-enclosed- by= char 指定文本文g中数据的记录时以什么括LQ?很多情况下数据以双引h赗?默认的情况下数据是没有被字符括v的?/p>

  --fields-terminated- by=char 指定各个数据的g间的分隔W,在句号分隔的文g中,分隔W是句号。您可以用此选项指定数据之间的分隔符?/p>

  默认的分隔符是蟩格符QTabQ?/p>

  --lines-terminated- by=str 此选项指定文本文g中行与行之间数据的分隔字W串或者字W?默认的情况下MySQLimport以newline分隔W?/p>

  您可以选择用一个字W串来替代一个单个的字符Q?/p>

  一个新行或者一个回车?/p>

  MySQLimport命o常用的选项q有-v 昄版本QversionQ,-p 提示输入密码QpasswordQ等?/p>

  3Q?例子Q导入一个以逗号为分隔符的文?/p>

  文g中行的记录格式是q样的:

  "1", "ORD89876", "1 Dozen Roses", "19991226"

  我们的Q务是要把q个文g里面的数据导入到数据库Meet_A_Geek中的表格Orders中,我们使用q个命o:

  bin/MySQLimport –prl –fields-enclosed-by=" –fields-terminated-by=, Meet_A_Geek Orders.txt

  q个命o可能看v来很不爽Q不q当你熟悉了之后Q这是非常简单的。第一部分Qbin/MySQLimport
,告诉操作pȝ你要q行的命令是MySQL/bin目录下的MySQLimportQ选项p是要求输入密码,q样p求你在改动数据库之前输入密码Q操?br />h会更安全。我们用了r选项是因为我们想要把表中的唯一关键字与文g记录中有重复唯一关键字的记录替换成文件中的数据。我们表单中的数据不是最新的Q需
要用文g中的数据L斎ͼ因而就用rq个选项Q替代数据库中已l有的记录。l选项的作用是在我们插入数据的时候锁住表Q这样就L了用户在我们更新表的?br />候对表进行查询或者更改的操作?/p>

批处理是一U非交互式运行MySQLE序的方法,如同您在MySQL中用的命o一P你仍然将使用q些命o?/p>

  Z实现批处理,您重定向一个文件到MySQLE序中,首先我们需要一个文本文Ӟq个文本文g包含有与我们在MySQL中输入的命o相同的文本?/p>

  比如我们要插入一些数据,使用包含下面文本的文?文g名ؓNew_Data.sql,当然我们也可以取名ؓNew_Data.txt及Q何其他的合法名字Qƈ不一定要以后~sqll尾)Q?/p>

  USE Meet_A_Geek;

  INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Block");

  INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Newton");

  INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, "Simmons");

  注意上面的这些句子的语法都必L正确的,q且每个句子以分L束?/p>

  上面的USE命o选择数据库,INSERT命o插入数据?/p>

  下面我们要把上面的文件导入到数据库中Q导入之前要认数据库已l在q行Q即是MySQLdq程Q或者说服务QWindows NT下面UCؓ”服务“,unix下面为”进E“)已经在运行?/p>

  然后q行下面的命令:

  bin/MySQL –p

  接着按提C入密码,如果上面的文件中的语句没有错误,那么q些数据p导入C数据库中?/p>

  命o行中使用LOAD DATA INFILE 从文件中导入数据到数据库:

  现在您可能会问自己,"I竟Z么我要输入所有的q些SQL语句到文件中Q然后通过E序q行它们呢??/p>

q样看v来好像需要大量的工作。很好,你这h很可能就对了。但是假如你有从所有这些命令中产生的log记录呢?现在q样很,嗯,大多数数据库都会?br />动生数据库中的事g记录?br />log。而大部分log都包含有用过的原始的SQL命o。因此,如果您不能从您现在的数据库中导出数据到新的MySQL数据库中使用Q那么您可以使用
log和MySQL的批处理Ҏ,来快速且方便地导入您地数据。当Ӟq样qM打字的麻烦?/p>

  LOAD DATA INFILE

  q是我们要介l的最后一个导入数据到MySQL数据库中的方法。这个命令与MySQLimport非常怼Q但q个Ҏ可以在MySQL命o行中使用。也是说您可以在所有用API的程序中使用q个命o。用这U方法,您就可以在应用程序中导入您想要导入的数据?/p>

  使用q个命o之前QMySQLdq程Q服务)必须已经在运行?/p>

  启动MySQL命o行:

  bin/MySQL –p

  按提C入密码,成功q入MySQL命o行之后,输入下面的命令:

  USE Meet_A_Geek;

  LOAD DATA INFILE "/home/mark/data.sql" INTO TABLE Orders;

  单的Ԍq样会把文件data.sql中的内容导入到表Orders中,如MySQLimport工具一Pq个命o也有一些可以选择的参数。比如您需要把自己的电脑上的数据导入到q程的数据库服务器中Q您可以使用下面的命令:

  LOAD DATA LOCAL INFILE "C:\MyDocs\SQL.txt" INTO TABLE Orders;

上面的LOCAL参数表示文g是本地的文gQ服务器是您所登陆的服务器?/p>

  q样qM使用ftp来上传文件到服务器,MySQL替你完成?

  您也可以讄插入语句的优先Q如果您要把它标Cؓ低优先QLOW_PRIORITYQ,那么MySQL会{到没有其他q个表的时候,才把插入数据。可以用如下的命oQ?/p>

  LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" INTO TABLE Orders;

  您也可以指定是否在插入数据的时候,取代或者忽略文件与数据表中重复的键倹{替代重复的键值的语法Q?/p>

  LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" REPLACE INTO TABLE Orders;

  上面的句子看h有点W拙Q但却把关键字放在了让您的剖析器可以理解的地斏V?/p>

  下面的一寚w项描述了文件的记录格式Q这些选项也是在MySQLimport工具中可以用的。他们在q里看v来有点不同。首先,要用到FIELDS关键字,如果用到q个关键字,MySQL剖析器希望看到至有下面的一个选项Q?/p>

  TERMINATED BY character

  ENCLOSED BY character

  ESCAPED BY character

  q些关键字与它们的参数跟MySQLimport中的用法是一L. The

  TERMINATED BY 描述字段的分隔符Q默认情况下是tab字符Q\tQ?/p>

  ENCLOSED BY描述的是字段的括起字W。比方以引号括v每一个字Dc?/p>

  ESCAPED BY 描述的{义字W。默认的是反些杠QbackslashQ\ Q?

  下面仍然使用前面的MySQLimport命o的例子,用LOAD DATA INFILE语句把同L文g导入到数据库?

  LOAD DATA INFILE "/home/mark/Orders.txt" REPLACE INTO TABLE Orders FIELDS TERMINATED BY ','   ENCLOSED BY '"';

  LOAD DATA INFILE语句中有一个MySQLimport工具中没有特点:

  LOAD DATA INFILE 可以按指定的列把文g导入到数据库中?/p>

  当我们要把数据的一部分内容导入的时候,q个特点很重要。比方说Q我们要从Access数据库升U到MySQL数据库的时候,需要加入一些栏目(?字段/fieldQ到MySQL数据库中Q以适应一些额外的需要?/p>

  q个时候,我们的Access数据库中的数据仍然是可用的,但是因ؓq些数据的栏?field)与MySQL中的不再匚wQ因此而无法再使用
MySQLimport工具。尽如此,我们仍然可以使用LOAD DATA
INFILEQ下面的例子昄了如何向指定的栏?field)中导入数据:

  LOAD DATA INFILE "/home/Order.txt" INTO TABLE Orders(Order_Number, Order_Date, Customer_ID);

  如您所见,我们可以指定需要的栏目QfieldsQ。这些指定的字段依然是以括号括vQ由逗号分隔的,如果您遗漏了其中M一个,MySQL会提醒您^_^

  Importing Data from Microsoft Access Q从Access中导入数据,略)

  您可以看到MySQL有很多可以导入数据的ҎQ然而这些只是数据传输中的一半。另外的一般是从MySQL数据库中导出数据。有许多的原因我们需要导
出数据。一个重要的原因是用于备份数据库。数据的造h常常是昂늚Q需要}慎处理它们。经常地备䆾可以帮助防止宝贵数据C失;另外一个原因是Q也许您?br />望导出数据来׃n?在这个信息技术不断成长的世界中,׃n数据变得来常见?/p>

  比方说Macmillan
USAl护护着一个将要出版的书籍的大型数据库。这个数据库在许多书店之间共享,q样他们q道哪些书会很快出版。医院越来越走向采用无纸病历记录Q这
栯些病历可以随时跟着你。世界变得越来越,信息也被׃n得越来越多。有很多中导出数据得ҎQ它们都跟导入数据很怼。因为,毕竟Q这些都只是一U?br />视得方式。从数据库导出的数据是从另一端导入的数据。这里我们ƈ不讨论其他的数据库各U各L导出数据的方法,您将学会如何用MySQL来实现数据导
出?

使用MySQLdump:

  MySQLdump命o位于MySQL/bin/目录?/p>

  MySQLdump工具很多斚wcM相反作用的工具MySQLimport。它们有一些同L选项。但MySQLdump能够做更多的事情。它可以?br />整个数据库装载到一个单独的文本文g中。这个文件包含有所有重建您的数据库所需要的SQL命o。这个命令取得所有的模式QSchemaQ后面有解释Qƈ?br />其转换成DDL语法QCREATE语句Q即数据库定义语句)Q取得所有的数据Qƈ且从q些数据中创建INSERT语句。这个工具将您的数据库中所有的?br />计倒{。因为所有的东西都被包含C一个文本文件中。这个文本文件可以用一个简单的批处理和一个合适SQL语句导回到MySQL中。这个工具o人难以置?br />地简单而快速。决不会有半点让人头疼地地方?/p>

  因此Q如果您像装载整个数据库Meet_A_Geek的内容到一个文件中Q可以用下面的命oQ?/p>

  bin/MySQLdump –p Meet_A_Geek > MeetAGeek_Dump_File.txt

  q个语句也允许您指定一个表q行dump(备䆾/导出/装蝲?)。如果您只是希望把数据库Meet_A_Geek中的表Orders中的整个内容导出C个文Ӟ可以使用下面的命令:

  bin/MySQLdump –p Meet_A_Geek Orders >MeetAGeek_Orders.txt

  q个非常的灵z,您甚臛_以用WHERE从句来选择您需要的记录导出到文件中。要辑ֈq样的目的,可以使用cM于下面的命oQ?/p>

  bin/MySQLdump –p –where="Order_ID > 2000" Meet_A_Geek Orders > Special_Dump.txt

  MySQLdump工具有大量的选项Q部分选项如下表:

  选项/Option 作用/Action Performed

  --add-drop-table

  q个选项会在每一个表的前面加上DROP TABLE IF EXISTS语句Q这样可以保证导回MySQL数据库的时候不会出错,因ؓ每次导回的时候,都会首先查表是否存在Q存在就删除

  --add-locks

  q个选项会在INSERT语句中捆上一个LOCK TABLE和UNLOCK TABLE语句。这防止在q些记录被再ơ导入数据库时其他用户对表进行的操作

  -c or - complete_insert

  q个选项使得MySQLdump命ol每一个生INSERT语句加上列(fieldQ的名字。当把数据导出导另外一个数据库时这个选项很有用?/p>

  --delayed-insert 在INSERT命o中加入DELAY选项

  -F or -flush-logs 使用q个选项Q在执行导出之前会hMySQL服务器的log.

  -f or -force 使用q个选项Q即使有错误发生Q仍然l导?/p>

  --full q个选项把附加信息也加到CREATE TABLE的语句中

  -l or -lock-tables 使用q个选项Q导的时候服务器会l表加锁?/p>

  -t or -no-create- info

  q个选项使的MySQLdump命o不创建CREATE TABLE语句Q这个选项在您只需要数据而不需要DDLQ数据库定义语句Q时很方ѝ?/p>

  -d or -no-data q个选项使的MySQLdump命o不创建INSERT语句?/p>

  在您只需要DDL语句Ӟ可以使用q个选项?/p>

  --opt 此选项打开所有会提高文g导出速度和创造一个可以更快导入的文g的选项?/p>

  -q or -quick q个选项使得MySQL不会把整个导出的内容d内存再执行导出,而是在读到的时候就写入导文件中?/p>

  -T path or -tab = path
q个选项会创徏两个文gQ一个文件包含DDL语句或者表创徏语句Q另一个文件包含数据。DDL文g被命名ؓtable_name.sql,数据文g被命
名ؓtable_name.txt.路径名是存放q两个文件的目录。目录必dl存在,q且命o的用者有Ҏ件的Ҏ?/p>

  -w "WHERE Clause" or -where = "Where clause "

  如前面所讲的Q您可以使用q一选项来过{选将要放到导出文件的数据?/p>

  假定您需要ؓ一个表单中要用到的帐号建立一个文Ӟl理要看今年Q?004q_所有的订单QOrdersQ,它们q不对DDL感兴,q且需要文件有逗号分隔Q因样就很容易导入到Excel中?Z完成q个人物Q您可以使用下面的句子:

  bin/MySQLdump –p –where "Order_Date >='2000-01-01'"

  –tab = /home/mark –no-create-info –fields-terminated-by=, Meet_A_Geek Orders

  q将会得到您惌的结果?/p>

  schemaQ模式The set of statements, expressed in data definition language, that completely describe the structure of a data base.

  一l以数据定义语言来表辄语句?该语句集完整地描qC数据库的l构?

SELECT INTO OUTFILE Q?/p>

  如果您觉得MySQLdump工具不够P׃用SELECT INTO OUTFILE? MySQL同样提供一个跟LOAD DATA
INFILE命o有相反作用的命oQ这是SELECT INTO OUTFILE
命oQ这两个命o有很多的怼之处。首先,它们有所有的选项几乎相同。现在您需要完成前面用MySQLdump完成的功能,可以依照下面的步骤进行操作:

  1. 保MySQLdq程Q服务)已经在运?/p>

  2. cd /usr/local/MySQL

  3. bin/MySQLadmin ping Q?/ 如果q个句子通不q,可以用这个:MySQLadmin -u root -p ping

MySQLadmin ping用于MySQLd的状态,is alive说明正在q行Q出错则可能需要用户名和密码?/p>

  4. 启动MySQL 监听E序.

  5. bin/MySQL –p Meet_A_GeekQ?/ q入MySQL命o行,q且打开数据库Meet_A_Geek,需要输入密?/p>

  6. 在命令行中,输入一下命?

  SELECT * INTO OUTFILE '/home/mark/Orders.txt'

  FIELDS

  TERMINATED BY = ','

  FROM Orders

  WHERE Order_Date >= '2000-01-01'

  在你按了ReturnQ回车)之后Q文件就创徏了。这个句子就像一个规则的SELECT语句Q只是把惛_q的输出重定向到了文件中。这意味q您可以使用JOIN来实现多表的高查询。这个特点也可以被用作一个报表生器?/p>

  比方_您可以组合这一章中讨论的方法来产生一个非常有的查询Q试试这个:

  在MySQL目录建立一个名为Report_G.rpt 的文本文Ӟ加入下面的行Q?/p>

  USE Meet_A_Geek;

  INSERT INTO Customers (Customer_ID, Last_Name, First_Name)

  VALUES (NULL, "Kinnard", "Vicky");

  INSERT INTO Customers (Customer_ID, Last_Name, First_Name)

  VALUES (NULL, "Kinnard", "Steven");

  INSERT INTO Customers (Customer_ID, Last_Name, First_Name)

  VALUES (NULL, "Brown", "Sam");

  SELECT Last_Name INTO OUTFILE '/home/mark/Report.rpt'

  FROM Customers WHERE Customer_ID > 1;

  然后认 MySQLq程在运行,q且您在MySQL目录中, 输入下面的命令:

  bin/MySQL



]]>
oracle的数据库链接 database link[转]http://www.aygfsteel.com/onlykeke/archive/2006/08/25/65835.html奇葛?/dc:creator>奇葛?/author>Fri, 25 Aug 2006 09:29:00 GMThttp://www.aygfsteel.com/onlykeke/archive/2006/08/25/65835.htmlhttp://www.aygfsteel.com/onlykeke/comments/65835.htmlhttp://www.aygfsteel.com/onlykeke/archive/2006/08/25/65835.html#Feedback0http://www.aygfsteel.com/onlykeke/comments/commentRss/65835.htmlhttp://www.aygfsteel.com/onlykeke/services/trackbacks/65835.html   
    建立链接前要先有到远E数据库的命名服务(q接字符ԌQ就是tnsnames.ora中描q的那个Q如'oradxp'
    先测试一下:$tnsping oradxp
    Attemping to contact(...) OK(30毫秒).
    说明对远E数据库oradxp可访问?br />   
    创徏数据库链接的语法为:
    CREATE PUBLIC DATABASE LINK oradxp.cug.edu.cn USING 'oradxp';
    其中 oradxp.cug.edu.cn 必须是远E数据库的全局?SID),'oradxp'是到远E的q接字符丌Ӏ远E数据库的全局名可以通过登陆q程机,
    SELECT * FROM global_name;
    得到?br />   
    现在你就可以用链接oradxp.cug.edu.cn讉Kq程数据库了
    ?br />    SELECT * FROM global_name@oradxp.cug.edu.cn;
    看看得到的是不是q程机的全局名?br />    所有SELECT 语句后面跟上链接名都是对q程机的讉K?br />   
    注意Q登陆名口o是当前登陆本机的用户名和口令。也是如果你用的是public链接Q那么在q程p有一个和本机相同的用?口o才行。如Q你以aaa/aaad本机Q然后执?br />    SELECT * FROM BBB.bbb@oradxp.cug.edu.cn;
    那么对远E数据BBB.bbb的访问用户ؓaaa口o为aaa
    也就是在本机和远E机上都有用户aaa口o都ؓaaa才能执行成功Q?br />   
    关于U有链接Q?br />    CREATE DATABASE LINK oradxp.cug.edu.cn CONNECT TO system IDENTIFIED BY aaa;
    q就建立了system的私有链接?br />    U有链接和public链接的差别就是登录名口o的限制。也是
    你不用什么用L录本机,执行
    SELECT * FROM BBB.bbb@oradxp.cug.edu.cn;
    讉Kq程机数据BBB.bbb的用户和口o都ؓsystem/aaa
   
    建好的数据链接放在系l表SYS.link$表中
    通过OEM控制台的 分布-〉数据库链接可以查看所有的链接?br />   
    要删除public link 可以
    drop public database link linkname;
   
    对于U有链接先以相应用户登陆Q如上述system/aaa
    然后drop database link linkname; 
   
    当然Q直接删除SYS.link$表中的记录一样可行?img src ="http://www.aygfsteel.com/onlykeke/aggbug/65835.html" width = "1" height = "1" />

]]>
Oracle数据库名、实例名和ORACLE_SID[转]http://www.aygfsteel.com/onlykeke/archive/2006/08/25/65827.html奇葛?/dc:creator>奇葛?/author>Fri, 25 Aug 2006 08:59:00 GMThttp://www.aygfsteel.com/onlykeke/archive/2006/08/25/65827.htmlhttp://www.aygfsteel.com/onlykeke/comments/65827.htmlhttp://www.aygfsteel.com/onlykeke/archive/2006/08/25/65827.html#Feedback0http://www.aygfsteel.com/onlykeke/comments/commentRss/65827.htmlhttp://www.aygfsteel.com/onlykeke/services/trackbacks/65827.html http://oracle.itpub.net/post/20957/146513

    最q因看到论坛有h问vq方面的东西Q将自己的理解加上查阅相兌料整理如下,如果不全或不当的地方Q望指正q补全它?

    数据库名(DB_NAME)、实例名(Instance_name)、以及操作系l环境变?ORACLE_SID)

    在ORACLE7?数据库中只有数据库名(db_name)和数据库实例?instance_name)。在ORACLE8i?i中出C新的参数Q即数据库域?db_domain)、服务名(service_name)、以及操作系l环境变?ORACLE_SID)。这些都存在于同一个数据库中的标识Q用于区分不同数据库的参数?

    一、什么是数据库名(db_name)

    数据库名是用于区分数据的内部标识Q是以二q制方式存储于数据库控制文g中的参数Q在数据安装或创Z后将不得修改。数据库安装完成后,该参数被写入数据库参数文件pfile中,格式如下Q?
    .........
    db_name="orcl" #(不允怿?
    db_domain=dbcenter.toys.com
    instance_name=orcl
    service_names=orcl.dbcenter.toys.com
    control_file=(...............
    .........


    在每一个运行的ORACLE8i数据库中都有一个数据库?db_name),如果一个服务器E序中创Z两个数据库,则有两个数据库名。其控制参数据分属在不同的pfile中控制着相关的数据库?

    二、什么是数据库实例名(instance_name)

    数据库实例名则用于和操作pȝ之间的联p,用于对外部连接时使用。在操作pȝ中要取得与数据库之间的交互,必须使用数据库实例名。例如,要和某一个数据库serverq接Q就必须知道其数据库实例名,只知道数据库名是没有用的Q与数据库名不同Q在数据安装或创建数据库之后Q实例名可以被修攏V数据库安装完成后,该实例名被写入数据库参数文gpfile中,格式如下Q?
    db_name="orcl" #(不允怿?
    db_domain=dbcenter.toys.com
    instance_name=orcl #(可以修改,可以与db_name相同也可不同)
    service_names=orcl.dbcenter.toys.com
    control_file=(...............
    .........


    数据库名与实例名之间的关pR?/p>

    数据库名与实例名之间的关pM般是一一对应关系Q有一个数据库名就有一个实例名Q如果在一个服务器中创Z个数据库Q则有两个数据库名,两个数据库实例名Q用两个标识定一个数据库Q用户和实例相连接?
    但在8i?i的ƈ行服务器l构中,数据库与实例之间不存在一一对应关系Q而是一对多关系Q一个数据库对应多个实例Q同一旉内用户只一个实例相联系Q当某一实例出现故障Q其它实例自动服务,以保证数据库安全q行?

    三、操作系l环境变?ORACLE_SID)

    在实际中Q对于数据库实例名的描述有时使用实例?instance_name)参数Q有时用ORACLE_SID参数。这两个都是数据库实例名Q它们有什么区别呢Q?l常弄؜)     

    (ORACLE_SID)
    OS<----------------> ORACLE 数据?<--------(Instance_name(实例?)

    上图表示实例名instance_name、ORACLE_SID与数据库及操作系l之间的关系Q虽然这里列出的两个参数都是数据库实例名Q但instance_name参数是ORACLE数据库的参数Q此参数可以在参数文件中查询刎ͼ而ORACLE_SID参数则是操作pȝ环境变量?
    操作pȝ环境变量ORACLE_SID用于和操作系l交互。也是_在操作系l中要想得到实例名,必M用ORACLE_SID。此参数与ORACLE_BASE、ORACLE_HOME{用法相同。在数据库安装之后,ORACLE_SID被用于定义数据库参数文g的名U。如Q?ORACLE_BASE/admin/DB_NAME/pfile/init$ORACLE_SID.ora?/p>

    定义Ҏ:
    export ORACLE_SID=orcl


    如果在同一服务器中创徏了多个数据库Q则必然同时存在多个数据库实?q时可以重复上述定义q程Q以选择不同实例?

    q可以用
[oracle@Datacent]$.oraenv


    来切换不同的ORACLE_SID来通过操作pȝ来启动不同的实例(instance) ?/p>

]]>
数据库命令备忘[持箋更新]http://www.aygfsteel.com/onlykeke/archive/2006/07/25/60040.html奇葛?/dc:creator>奇葛?/author>Tue, 25 Jul 2006 11:00:00 GMThttp://www.aygfsteel.com/onlykeke/archive/2006/07/25/60040.htmlhttp://www.aygfsteel.com/onlykeke/comments/60040.htmlhttp://www.aygfsteel.com/onlykeke/archive/2006/07/25/60040.html#Feedback1http://www.aygfsteel.com/onlykeke/comments/commentRss/60040.htmlhttp://www.aygfsteel.com/onlykeke/services/trackbacks/60040.html
mysql:
mysqladmin -u root -p oldpassword newpasswd
REPLACE INTO mysql.user (Host,User,Password) VALUES(\'%\',\'system\',PASSWORD(\'manager\'));
(FLUSH PRIVILEGES)
GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY "123456" WITH GRANT OPTION;
(备注Q某ơL提示权限不够Q原来要在localhost后加?localdomain)
show create table sms_report;
select * from table into outfile '/tmp/outdata.txt' fields terminated by ',';
mysqlimport -i --columns=userid,mobile,servicecataid,t --fields-terminated-by=, sms /tmp/tablename.txt --local

如果一个表中有自增字段Q用TRUNCATE TABLE和没有WHERE子句的DELETE删除所有记录后Q这个自增字D将起始值恢复成1.如果你不惌样做的话Q可以在DELETE语句中加上永真的WHEREQ如WHERE 1或WHERE true?br />
replace into province_seg select * from province_seg_tmp;

Oracle:



]]>
վ֩ģ壺 | | | ܿ| | | | | ˳| | ۰| | گ| ij| | | | | | | Ϸ| | | | | | ְ| ̨ʡ| | | ¸| IJ| | | | | Ϫ| | | | ̨|