我可以在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)不是名称的真正限制,但您可以添加一个唯一的约束。