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 ...