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 ...
Posted in 电脑技术 | 1 Comment »
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, ...
Posted in 电脑技术 | No Comments »
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 ...
Posted in 电脑技术 | No Comments »
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() ...
Posted in MySQL | No Comments »
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
分别备份所有数据库数据及结构。
Posted in MySQL, 电脑技术 | No Comments »
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 ...
Posted in MySQL | No Comments »