我是MySQL的初学者,想知道MySQL是否可能锁定表格进行写入?如果是,如何避免这种情况。
我目前的情况是我正在尝试从不同的ips同时将数据重写到MySQL表。并且它工作了一段时间,而不是一些魔法发生并停止接受写入。所以我真的不知道它是我的代码还是MySQL的行为。
我真的不知道在MySQL方面哪里可以找到这种信息,所以如果你可以告诉我如何检查MySQL是否真的阻止写入或类似的东西它会很棒,到目前为止我找到了一个命令,不知道它是否会有所帮助:
mysql> SHOW ENGINE INNODB STATUS;
...
...
...
1 lock struct(s), heap size 376, 0 row lock(s), undo log entries 1
MySQL thread id 916, OS thread handle 0x40c07940, query id 92377 ip-10-xxxxxxx.ec2.internal 10.xxxxxxxx root
---TRANSACTION C2BE, ACTIVE 1602 sec
1 lock struct(s), heap size 376, 0 row lock(s), undo log entries 1
MySQL thread id 907, OS thread handle 0x41aee940, query id 91828 ip-10-1xxxxxxx.ec2.internal 10.1xxxxxxx root
我插入数据的方式:
def insert_dict(self, table, d):
"""Take dictionary object dict and produce sql for
inserting it into the named table"""
sql = 'INSERT INTO ' + table
sql += ' ('
sql += ', '.join(d)
sql += ') VALUES ('
sql += ', '.join(map(self.column_value, d))
sql += ');'
return sql
def column_value(self, key):
if type(key) is not "str":
key = str(key)
return '%(' + key + ')s'
这就是我使用这些功能的方式:
sql = self.insert_dict("my-table", data)
self.cursor.execute(sql, data)
self.db.commit()
data
是这样的python字典:{'column-name':'columnvalue'}
另外我跑了mysql> SHOW OPEN TABLES;
不知道是否有帮助
+--------------------+-----------------------------+--------+-------------+
| Database | Table | In_use | Name_locked |
+--------------------+-----------------------------+--------+-------------+
| my-db | my-table | 0 | 0 |