Win10系統(tǒng)中,按Win+X鍵通常可打開系統(tǒng)快捷菜單。不過,這個快捷鍵經(jīng)常與某些游戲或軟件的熱鍵發(fā)生沖突,這可怎么辦呢?今天我就教大家如何禁用這個快捷鍵。
1、首先,打開記事本,把下面的內(nèi)容復(fù)制到記事本中;
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
"DisabledHotkeys"="X"
(這里的“X”表示與Win+X鍵,如果你想禁用WIN+A,就改為“A”即可)
2、接著,點擊【文件】-【另存為】,命名為XXXXX .reg文件,保存類型選【所有】;
3、最后,點擊保存的XXXXX .reg文件,繼續(xù)選【是】即可。
重啟電腦后,你會發(fā)現(xiàn)按Win+X鍵就沒反應(yīng)啦,也就不會也軟件的熱鍵沖突了!有需要的朋友,可以試試看!
插入一條記錄到 mysql 數(shù)據(jù)庫,如何處理可能的唯一鍵沖突呢?
一般做法可能是先查詢一下,如果記錄不存在,就可以放心插入,如果記錄存在,視情況放棄插入或者是進行更新
不過先查詢一下有一點點麻煩,這個步驟能省略嗎?
實際上是可以的,還有不少的方法,我們來實驗下,看看他們的區(qū)別
創(chuàng)建一個簡單的表 user 來做實驗:user 表有個自增主鍵,在 name 字段上創(chuàng)建了唯一鍵
create table user (
id int auto_increment,
name varchar(20),
age int,
primary key (id),
unique key (name)
);
再插入一條記錄
mysql> insert into user (name, age) values ('mike', 20);
Query OK, 1 row affected (0.01 sec)
此時查詢一下
mysql> select * from user;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | mike | 20 |
+----+------+------+
1 row in set (0.00 sec)
接下來就可以做實驗了
由于唯一鍵沖突,導(dǎo)致插入失敗,自增 id 也會遞增,驗證如下
mysql> insert into user (name, age) values ('mike', 20);
ERROR 1062 (23000): Duplicate entry 'mike' for key 'name'
mysql> insert into user (name, age) values ('tom', 20);
Query OK, 1 row affected (0.01 sec)
mysql> select * from user;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | mike | 20 |
| 3 | tom | 20 |
+----+------+------+
2 rows in set (0.00 sec)
可以看到雖然第二次插入 mike 出錯,但是 id 還是遞增了,有了這個預(yù)備知識,更容易理解后續(xù)的一些操作
在 insert 語句里增加 ignore,就可以達到忽略唯一鍵沖突的效果,此時 mysql 不會報錯,而是放棄執(zhí)行插入。如下
mysql> insert ignore into user (name, age) values ('mike', 18);
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> select * from user;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | mike | 20 |
| 3 | tom | 20 |
+----+------+------+
2 rows in set (0.00 sec)
雖然沒有實際插入數(shù)據(jù),但是自增 id 已經(jīng)遞增了。如果我們再插入一條記錄,id 應(yīng)該是 5。如下
mysql> insert ignore into user (name, age) values ('jack', 20);
Query OK, 1 row affected (0.01 sec)
mysql> select * from user;
+----+------+------+
| id | name | age |
+----+------+------+
| 1 | mike | 20 |
| 3 | tom | 20 |
| 5 | jack | 20 |
+----+------+------+
3 rows in set (0.00 sec)
新插入的記錄 id 是 5
在沒有發(fā)生唯一鍵沖突時,replace into 的效果和 insert into 一樣,如果發(fā)生了主鍵沖突,會刪除數(shù)據(jù)庫中已存在的記錄并插入新的記錄。如下
mysql> replace into user (name, age) values ('mike', 16);
Query OK, 2 rows affected (0.01 sec)
mysql> select * from user;
+----+------+------+
| id | name | age |
+----+------+------+
| 3 | tom | 20 |
| 5 | jack | 20 |
| 6 | mike | 16 |
+----+------+------+
3 rows in set (0.00 sec)
注意,replace into 語句影響了 2 行記錄,且記錄的 id 從 1 變成了 6,這說明該語句先刪除了 id=1 的記錄,并插入了 1 條新記錄
如果是以自增 id 為主鍵,并且其他表使用了該 id 進行關(guān)聯(lián),replace into 要慎用,可能會發(fā)生因 id 改變導(dǎo)致其他表關(guān)聯(lián)不到正確記錄的問題
插入時如果發(fā)生了唯一鍵沖突則進行更新操作,和 replace into 的區(qū)別是該語句不會先刪除后插入,而是直接修改原始記錄,這樣涉及到自增 id 時,不會發(fā)生 id 變化的情況。如下
mysql> insert into user (name, age) values ('mike', 14) on duplicate key update age=14;
Query OK, 2 rows affected (0.01 sec)
mysql> select * from user;
+----+------+------+
| id | name | age |
+----+------+------+
| 3 | tom | 20 |
| 5 | jack | 20 |
| 6 | mike | 14 |
+----+------+------+
3 rows in set (0.00 sec)
可以看到 age 被修改了,但是 id 并沒有改變,這說明實際執(zhí)行的是 update 操作
根據(jù) mysql 的輸出,可以看到該語句影響了 2 行記錄,這是為什么呢?很明顯是發(fā)生了一次未成功的 insert 后才執(zhí)行的 update,該 insert 雖然不成功,但實實在在的改變了自增 id,所以影響的行數(shù)是 2
此時插入一條記錄,id 應(yīng)該是 8,驗證一下
mysql> insert into user (name, age) values ('ken', 20);
Query OK, 1 row affected (0.00 sec)
mysql> select * from user;
+----+------+------+
| id | name | age |
+----+------+------+
| 3 | tom | 20 |
| 5 | jack | 20 |
| 6 | mike | 14 |
| 8 | ken | 20 |
+----+------+------+
4 rows in set (0.00 sec)
另外,根據(jù) mysql 文檔(https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html),該語句影響行數(shù)如下
With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if the row is inserted as a new row, 2 if an existing row is updated, and 0 if an existing row is set to its current values.
根據(jù)文檔描述,如果要插入的數(shù)據(jù)和已有的數(shù)據(jù)完全一致,影響的行數(shù)將是 0,驗證一下
mysql> insert into user (name, age) values ('mike', 14) on duplicate key update age=14;
Query OK, 0 rows affected (0.01 sec)
那么此時再成功插入一條記錄,id 將是 9,驗證一下
mysql> insert into user (name, age) values ('ivan', 20);
Query OK, 1 row affected (0.00 sec)
mysql> select * from user;
+----+------+------+
| id | name | age |
+----+------+------+
| 3 | tom | 20 |
| 5 | jack | 20 |
| 6 | mike | 14 |
| 8 | ken | 20 |
| 10 | ivan | 20 |
+----+------+------+
5 rows in set (0.00 sec)
實際上,新記錄的 id 是 10,我們還可以多試驗幾次,雖然官方文檔里說插入相同的記錄影響行數(shù)是 0, 但是實際上依然存在一次隱含的插入失敗,導(dǎo)致自增 id 的遞增
鍵沖突是用戶同時按下某幾個鍵位的時候,鍵盤會完全沒有反應(yīng)或漏掉其中部分按鍵。這是由于鍵盤矩陣設(shè)計引起的,最簡單的鍵盤矩陣可能3鍵便會發(fā)生沖突。但經(jīng)過合理排布之后,按鍵沖突不會影響辦公和一般的游戲
按鍵沖突檢測
使用記事本,同時按下需要測試的幾個按鍵,看能否全部輸入即可簡單測試。也可以使用專用的測試軟件測試
無沖
不存在按鍵沖突簡稱無沖。全部鍵盤無按鍵沖突為全鍵無沖,也可能只有幾個按鍵沒有沖突,此時要注意是任意鍵還是最多鍵無沖。
機械鍵盤很容易實現(xiàn)無沖而薄膜鍵盤則沒有無沖突型號。
無沖更多是銷售噱頭,通常任意6鍵無沖就足以應(yīng)付絕大多數(shù)游戲了。
由于USB接口限制,其傳輸協(xié)議限制鍵盤只能傳輸6個按鍵信息,但是越來越多USB鍵盤也具有全鍵無沖能力(通過虛擬多個鍵盤實現(xiàn)),PS/2則沒有這個限制