MYSQL导出查询结果

Wednesday, May 5th, 2010




一般大家都会用 "SELECT INTO OUTFIL"将查询结果导出到文件,但是这种方法不能覆盖或者添加到已经创建的文件。例如: mysql> select 1 into outfile '/tmp/t1.txt'; Query OK, 1 row affected (0.00 sec) mysql> select 1 into outfile '/tmp/t1.txt'; ERROR 1086 (HY000): File '/tmp/t1.txt' already exists 还可以使用另外一种方法: mysql> pager cat > /tmp/t1.txt PAGER set to 'cat > /tmp/t1.txt' mysql> select 1;\! cat /tmp/t1.txt 1 row in set (0.00 sec) +---+ | 1 | +---+ | 1 | +---+ 这样你能很方便的查询到2条sql的差异: mysql> pager cat ...

InnoDB的行锁模式及加锁方法

Monday, March 29th, 2010




InnoDB实现了以下两种类型的行锁。 l  共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。 l  排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写锁。 另外,为了允许行锁和表锁共存,实现多粒度锁机 制,InnoDB还有两种内部使用的意向锁(Intention Locks),这两种意向锁都是表锁。 l  意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。 l  意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的IX锁。 上 述锁模式的兼容情况具体如表20-6所示。 表20-6                                            InnoDB行锁模式兼容性列表 请求锁模式    是否兼容 当前锁模式 X IX S IS X 冲突 冲突 冲突 冲突 IX 冲突 兼容 冲突 兼容 S 冲突 冲突 兼容 兼容 IS 冲突 兼容 兼容 兼容 如果一个事务请求的锁模式与当前的锁兼 容,InnoDB就将请求的锁授予该事务;反之,如果两者不兼容,该事务就要等待锁释放。 意向锁是InnoDB自动加的,不需用户干预。对于 UPDATE、DELETE和INSERT语句,InnoDB会自动给涉及数据集加排他锁(X);对于普通SELECT语句,InnoDB不会加任何锁; 事务可以通过以下语句显示给记录集加共享锁或排他锁。 ¡  共享锁(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE。 ¡  排他锁(X):SELECT * FROM table_name WHERE ... FOR UPDATE。 用SELECT ... IN SHARE MODE获得共享锁,主要用在需要数据依存关系时来确认某行记录是否存在,并确保没有人对这个记录进行UPDATE或者DELETE操作。但是如果当前事 务也需要对该记录进行更新操作,则很有可能造成死锁,对于锁定行记录后需要进行更新操作的应用,应该使用SELECT... FOR UPDATE方式获得排他锁。 在如表20-7所示的例子中,使用了SELECT ... IN SHARE MODE加锁后再更新记录,看看会出现什么情况,其中actor表的actor_id字段为主键。 表20-7                     InnoDB存储引擎的共享锁例子 session_1 session_2 mysql> set autocommit = 0; Query OK, ...

Mysql5 交叉表查询

Friday, August 7th, 2009




# Host: localhost    Database: test # ------------------------------------------------------ # Server version 5.0.45-community-nt-log # # Table structure for table sale # DROP TABLE IF EXISTS `sale`; CREATE TABLE `sale` ( `id` int(10) unsigned NOT NULL auto_increment, `year` int(11) NOT NULL, `quarter` int(11) NOT NULL, `amount` decimal(15,2) NOT NULL, PRIMARY KEY  (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=latin1; # # Dumping data for table sale # /*!40101 SET NAMES latin1 */; INSERT ...

MySQL:日期函数、时间函数总结(MySQL 5.X)

Sunday, April 5th, 2009


一、MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time)函数:now() mysql> select now(); +---------------------+ | now() | +---------------------+ | 2008-08-08 22:20:46 | +---------------------+ 除了 now() 函数能获得当前的日期时间外,MySQL 中还有下面的函数: current_timestamp() ,current_timestamp ,localtime() ,localtime ,localtimestamp -- (v4.0.6) ,localtimestamp() -- (v4.0.6) 这些日期时间函数,都等同于 now()。鉴于 now() 函数简短易记,建议总是使用 now() 来替代上面列出的函数。 1.2 获得当前日期+时间(date + time)函数:sysdate() sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() ...

myql备份所有数据库。

Tuesday, March 17th, 2009


>mysqldump.exe -uroot -p --complete-insert --extended-insert --create-options --quick --set-charset -R --hex-blob --single-transaction --no-data -A> F:/mysql5bak/schema.sql >mysqldump.exe -uroot -p --complete-insert --extended-insert --create-options --quick --set-charset -R --hex-blob --single-transaction --no-create-info -A> F:/mysql5bak/data.sql 分别备份所有数据库数据及结构。

MySQL: 诡异的MySQL server has gone away及其解决

Thursday, May 8th, 2008


在Mysql执行show status,通常更关注缓存效果、进程数等,往往忽略了两个值: Variable_name Value Aborted_clients 3792 Aborted_connects 376 通常只占query的0.0x%,所以并不为人所重视。而且在传统Web应用上,query错误对用户而言影响并不大,只是重新刷新一下页面就OK了。最近的基础改造中,把很多应用作为service运行,无法提示用户重新刷新,这种情况下,可能就会影响到服务的品质。 通过程序脚本的日志跟踪,主要报错信息为“MySQL server has gone away”。官方的解释是: The most common reason for the MySQL server has gone away error is that the server timed out and closed the connection. Some other common reasons ...