MySQL MyIsam/InnoDB混合在一起的事务

在Oracle(或者, 应该说‘一般’吗?), 我们考虑Transaction(事务)这样. 你要一个决定来处理一连的操作的时候, 你用Transaction(事务)处理进程然后Commit或者Rollback.
我觉得Transaction(事务)一般是这样子.
现在我们不考虑Transaction levels和锁定.

Transaction要明确的开始和结束, 从而你要留意的是有没有不明确地结束transaction的事情. (我们现在不考虑levels和锁定)
要是你不太明白什么语句会不明确地结束transactions, 就写像Truncate不明确地把transaction结束的东西, 结果很惨, 你到那里写的进程都会被Commit.
不过, 你理解这点就没有什么难用的. (记得吗?我们现在不考虑levels和锁定哦)

因为Oracle对Schema只有一种引擎, 我们可以像上述处理.
我觉得你在Oracle上操作的时候不会留意DB引擎或存储引擎(或者只有我不知道的吗?).
另一方面, 在MySQL, 你可以按表来设置存储引擎, 这意味一个Schema(数据库)可能会有几种引擎混合在一起.
我觉得, Schema的物理设计应该按照引擎分开, 不过, 那种物理设计不一定存在.

那, 在transaction里执行MyIsam/InnoDB混合在一起的进程的话, 会怎么样?嗯嗯嗯… 不能马上回答… 继续阅读

MySQL左联where多表条件

select * from _test a left join _test b on a.id=b.id where a.level='20' and a.month='04' and b.level='20' and b.month='03';
select a.*,b.* from (select * from _test where level='20' and month='04') as a left join (select * from _test where level='20' and month='03') as b on a.id=b.id;

这两条语句结果是不同的,应该是left join的时候如果条件是多个表mysql会自动转成内联导致,第二条语句才能达到正确的目的(为了找到相差的两条数据)。

继续阅读

SQLSTATE[HY000]: General error: 1366 Incorrect string value: ‘\xF0\x9F\x98\x8A\xF0\x9F…’ 解决

Reason
The culprit is the emoji in the tweets. Some of the emojis have four bytes UTF-8 character.

The MYSQL's character set named UTF8 uses a maximum of three bytes per character and contains only BMP characters. As of MySQL 5.5.3, the UTF8MB4 character set uses a maximum of four bytes per character supports. http://dev.mysql.com/doc/refman/5.5/en/charset-unicode-utf8mb4.html

继续阅读

MySQL 重新初始化数据库

删除./mysql/var下的所有数据后,怎么重新安装初始数据库?
(1)进入./mysql/bin目录下,执行脚本./mysql_install_db;
(2)执行完(1)后,此时会在./mysql/var目录下创建两个目录文件mysql、test;
(3)修改mysql、test两个目录及目录下所有文件的权限:chown mysql:mysql -R mysql test

MySQL 交互模式和非交互模式

这两个词基本是通过wait_time和interactive_timeout这两个变量引出的。

交互式操作:在本机上打开mysql的客户端,就是那个黑窗口,在黑窗口下进行各种sql操作,当然走的肯定是tcp协议。
非交互式操作:在你的项目中进行程序调用。比如一边是tomcat web服务器,一边是数据库服务器,两者怎么通信?在java web里,我们通常会选择hibernate或者是jdbc来连接。那么这时候就是非交互式操作。

MySQL5手册中对两个变量有如下的说明:
interactive_timeout:服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。又见wait_timeout 。
wait_timeout:服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义),又见interactive_timeout。