日期:2014-05-16  浏览次数:20751 次

一个非常诡异的现象,字段被谁吞了?
例如我在A数据库里面的一张表查询数据,查完之后关闭数据库连接,然后再创建一个新的连接,再在另外一个数据库里面插入内容,这两个操作,有的时候第二个操作成功了,有的时候第二个操作插入的数据丢失了,也就是出现了只插入部分字段的信息,前提是在多人访问页面的情况下。
前台js验证,如果字段没有全部填写完整的话,是不允许进入页面进行数据库的查询操作的,所以可以得出一个结论,就是在数据插入的时候,某个字段的数据丢失了。
我遇到的问题就是在数据表里面查看数据,发现有些字段插入了,有些字段是没有的,但正常情况下,每个字段都是要有值的。
例如我现在有3个字段A,B,C,正常的情况下是这三个字段都有值,(例如,a,b,c),但是不知道什么原因,只有a,c插入了,但是b没插入,而有些记录是3个字段都正常插入,有些就没有这么正常,有大牛知道原因吗?


------解决方案--------------------
在命令行下插入A,B,C,提示什么,检查有无约束、TRIGGER之类的
------解决方案--------------------
打开数据库binlog 看看具体执行了哪些sql
------解决方案--------------------
打开你的普通查询日志,跟踪下到底执行了些什么样的SQL语句。 
由于你是用JS控制,估计是有哪方面的漏洞。

引用
5.11.2. 通用查询日志
如果你想要知道mysqld内部发生了什么,你应该用--log[=file_name]或-l [file_name]选项启动它。如果没有给定file_name的值, 默认名是host_name.log。所有连接和语句被记录到日志文件。当你怀疑在客户端发生了错误并想确切地知道该客户端发送给mysqld的语句时,该日志可能非常有用。
mysqld按照它接收的顺序记录语句到查询日志。这可能与执行的顺序不同。这与更新日志和二进制日志不同,它们在查询执行后,但是任何一个锁释放之前记录日志。(查询日志还包含所有语句,而二进制日志不包含只查询数据的语句)。

服务器重新启动和日志刷新不会产生新的一般查询日志文件(尽管刷新关闭并重新打开一般查询日志文件)。在Unix中,你可以通过下面的命令重新命名文件并创建一个新文件:

shell> mv hostname.log hostname-old.log
shell> mysqladmin flush-logs
shell> cp hostname-old.log to-backup-directory
shell> rm hostname-old.log
在Windows中,服务器打开日志文件期间你不能重新命名日志文件。你必须先停止服务器然后重新命名日志文件。然后,重启服务器来创建新的日志文件。

5.11.3. 二进制日志