我可以在MySQL中锁定IF语句(或存储过程)中的表吗?
这(来自存储过程的主体)引发语法错误:我可以在MySQL中锁定IF语句(或存储过程)中的表吗?,mysql,Mysql,这(来自存储过程的主体)引发语法错误: IF (name = in_name) SET out_id = temp; ELSE LOCK TABLE People WRITE; INSERT INTO People (Name) VALUES (in_name); UNLOCK TABLE; SELECT LAST_INSERT_ID() INTO out_id
IF (name = in_name)
SET out_id = temp;
ELSE
LOCK TABLE People WRITE;
INSERT INTO People (Name)
VALUES (in_name);
UNLOCK TABLE;
SELECT LAST_INSERT_ID() INTO out_id
END IF
是否必须在SP开始时锁定所需的任何表?则缺少:如果(name=in_name)则
但是你为什么要锁桌子呢?在本例中,它毫无意义,它只会破坏整体性能,因为没有其他人可以对表做任何事情。而且锁没有增加任何东西。我不明白为什么,但也许你没有告诉我们一切 谢谢Frank-我试图实现的是:如果“name”已经存在,获取它的id,如果不插入它并返回新id。但是,我将有多个线程试图同时获取/插入相同的“name”-“name”必须是唯一的,但我不能将其设置为唯一的,因为它是一个文本列-你有什么建议?谢谢您可以在文本
列上创建索引,但必须指定前缀长度。很明显,如果您的name
列的大小不能限制,这意味着它存储的不是名称:)不,我的名称列不能限制,这是一个绝对的要求。不幸的是,archar(255)不是名称的真正限制,但您可以添加一个唯一的约束。