MySQL的表锁问题(一)
在mysql手册里面有一段描述关于lock tables的语法的. LOCK TABLES
tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}
[, tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}] ...
UNLOCK TABLES
READ
当表不存在 WRITE 写锁时 READ 读锁被执行,这该状态下,当前线程不可以修改(insert,update,delete),其他线程的修改操作进入列队,当当前线程释放锁,其他线程修改被执行.
READ LOCAL
READ LOCAL和READ之间的区别是,READ LOCAL允许在锁定被保持时,执行非冲突性INSERT语句(同时插入)。但是,如果您正打算在MySQL外面操作数据库文件,同时您保持锁定,则不能使用READ LOCAL。对于InnoDB表,READ LOCAL与READ相同。
WRITE
除了当前用户被允许读取和修改被锁表外,其他用户的所有访问被完全阻止。注意的是在当前线程当WRITE被执行的时候,即使之前加了READ没被取消,也会被取消.
LOW_PRIORITY WRITE
降低优先级的WRITE,默认WRITE的优先级高于READ.假如当前线程的LOW_PRIORITY WRITE在列队里面,在未执行之前其他线程传送一条READ,那么LOW_PRIORITY WRITE继续等待.
当您使用LOCK TABLES时,您必须锁定您打算在查询中使用的所有的表。虽然使用LOCK TABLES语句获得的锁定仍然有效,但是您不能访问没有被此语句锁定的任何的表。同时,您不能在一次查询中多次使用一个已锁定的表——使用别名代替,在此情况下,您必须分别获得对每个别名的锁定。
手册给出了如下的例子:
mysql> LOCK TABLE t WRITE, t AS t1 WRITE;#此时锁定的应该算是t表和它的别名t1mysql> INSERT INTO t SELECT * from t;#此时使用了2次t表ERROR 1100: Table 't' was not locked with LOCK TABLESmysql> INSERT INTO t SELECT * from t AS t1;如果您的查询使用一个别名引用一个表,那么您必须使用同样的别名锁定该表。如果没有指定别名,则不会锁定该表。
mysql> LOCK TABLE t READ;mysql> SELECT * from t AS myalias;#因为不能访问没有被语句锁定的任何的表,应该算吧别名myalias算作表了ERROR 1100: Table 'myalias' was not locked with LOCK TABLES相反的,如果您使用一个别名锁定一个表,您必须使用该别名在您的查询中引用该表。
mysql> LOCK TABLE t AS myalias READ;mysql> SELECT * from t;#道理和上面类似ERROR 1100: Table 't' was not locked with LOCK TABLESmysql> SELECT * from t A
相关文档:
Unix&Linux:
1.用root或者运行mysqld的用户登录系统;
2.利用kill命令结束掉mysqld的进程;
3.使用--skip-grant-tables参数启动MySQL Server
shell>mysqld_safe --skip-grant-tables &
4.为root@localhost设置新密码
shell>mysqladmin -u root flush-privileges password "newpassword" ......
原文链接:http://bbs.linuxtone.org/thread-991-1-1.html
IT运维专家网--"自由平等,互助分享!"
===MySQL基础====
mysql
下载
: http://www.mysql.com/
mysqld 常规MySQL服务器
mysqld-opt 优化
mysql服务
器,提供一些功能可以挖掘更好的功能
mys ......
DELIMITER $$
DROP PROCEDURE IF EXISTS `hotel`.`prc_page_hotel_result`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `hotel`.`prc_page_hotel_result`(
in currpage int,
in columns varchar(500),
in tablename &n ......
mysql(包括所有5.*系列,5.1.21之前)的慢查询日志默认是以秒为单位的,可以通过set [session|global] long_query_time=1这个最低也就是可以设置到1秒,对于0.5,0.005之类就无能为力了,这时候可以有microslow patch(msl patch)补丁来完成这一工作,这个功能的好处自然不言而喻. 在mysql5.1.21及以后版本可以通过set [session|gl ......
一。 mysql.data.dll拷贝到bin下面并引用一下
using MySql.Data.MySqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string myConnectionString ......