對mysql的各種sql語句如何對錶加鎖的實驗

2021-09-06 05:48:08 字數 1956 閱讀 5042

tablea

+----+------+

| c1 | c2   |

+----+------+

|  3 | null |

|  4 | null |

|  5 | null |

| 11 |   12 |

| 12 |   13 |

+----+------+

一 在c1上無索引,innodb_locks_unsafe_for_binlog開關被關閉。

1  1.0 select * from ta where c1=11在read_repatable  isolation level的時候,另乙個session是可以隨便插入的任何值。

1.1 如果是select * from ta where c1=11 lock in share mode它是對所有的行加s lock,另外乙個session任何值都是不能插入的。

2  update ta set c1=17 where c1=11在read_repatable  isolation level的時候,對錶中所有行加x行鎖,另外乙個session不能插入任何值。

二 當c1上有索引的時候,非cluster的,非unique的,innodb_locks_unsafe_for_binlog開關被關閉。

1  1.0 select * from ta where c1=11在read_repatable  isolation level的時候,另乙個session是可以隨便插入的任何值。

1.1 如果是select * from ta where c1=11 lock in share mode 會對c1=11這一行加s鎖,在c1<12上所有的行加上s gap鎖,

即另外乙個session插入c1>=12是可以的,但是插入c1<12的值不成功。

2  update ta set c1=17 where c1=11在在read_repatable  isolation level的時候,對錶中c1=11這一行加上x鎖,對c1<12這個區間插入x gap鎖,

另外乙個session插入c1>=12是成功的,但是插入c1<12的都是不可以的。

三 innodb_locks_unsafe_for_binlog開關被開啟,index為clustered和unique的。。等等 分別去實驗,好多,不寫了。。

乙個問題:

>select * from tb;

+------+------+

| c1 | c2 |

+------+------+

| 3 | null |

| 4 | null |

| 5 | null |

| 6 | 11 |

| 11 | 12 |

| 14 | 13 |

| 15 | 16 |

| 7 | 10 |

| 8 | 10 |

| 9 | 10 |

+------+------+

>show create table tb;

| tb | create table `tb` (

`c1` int(11) default null,

`c2` int(12) default null,

key `c1` (`c1`)

) engine=innodb default charset=latin1 |

>set autocommit=0;

>select * from tb where c1=11;

經過驗證的結果是:

lock monitor顯示的加鎖: 11加s鎖,11的下一條加了s gap鎖,

實際的操作是: 【11前的一條,11,11後的一條)不能被插入

sql語句的各種模糊查詢語句

一般模糊語句如下 select 字段 from 表 where 某欄位 like 條件 其中關於條件,sql提供了四種匹配模式 1 表示任意0個或多個字元。可匹配任意型別和長度的字元,有些情況下若是中文,請使用兩個百分號 表示。比如 select from user where u name lik...

SQL語句的各種連線查詢

連線查詢,等值和非等值連線 若在等值連線中把重複的屬性列去掉,則為自然連線 自身連線,查詢每一門課的間接先修課 外連線,在通常的連線操作中,只有符合條件的元祖才能作為結果輸出。如上上表中沒有200215125學生的資訊,原因是他沒有選課。但有時我們需要以某個表為主題列出所有元祖的情況,比如說以stu...

inner join 各種連線 SQL語句

sql inner join關鍵字表示在表中存在至少乙個匹配時,inner join 關鍵字返回行。sql inner join關鍵字表示在表中存在至少乙個匹配時,inner join 關鍵字返回行。1 連線兩個資料表的用法 from member inner join membersort on ...