A. MySQL的check怎樣實現字元值的幾選一
MySQL中check是一種對數據的約束,可以在建表語句中最後面寫check語句來指定要限制輸入的值。
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)
SQL CHECK 約束
CHECK 約束用於限制列中的值的范圍。
如果對單個列定義 CHECK 約束,那麼該列只允許特定的值。
如果對一個表定義 CHECK 約束,那麼此約束會在特定的列中對值進行限制。
B. mysql的check約束問題···
這是一項新功能,用於指定在插入或更新到一行之前檢查值的條件。如果表的任何行的搜索條件的結果為 FALSE,則約束可能返回錯誤(但如果結果為 UNKNOWN 或 TRUE,則約束不會返回錯誤)。此功能開始在 MySQL 8.0.16 上運行,在以前的版本中,我們可以創建它,但它不起作用,這意味著支持語法,但不起作用。要牢記的使用規則:
AUTO_INCREMENT 自增列不允許使用
引用另一個表中的另一列不允許使用
存儲的函數和用戶定義的函數不允許使用
存儲過程和函數參數不允許使用
子查詢不允許使用
在外鍵中用於後續操作(ON UPDATE,ON DELETE)的列不允許使用
為下一條語句 INSERT,UPDATE,REPLACE,LOAD DATA 和 LOAD XML 評估此次監測。此外,還會為 INSERT IGNORE,UPDATE IGNORE,LOAD DATA…IGNORE 和 LOAD XML…IGNORE 評估此監測約束。對於這些語句,如果約束的評估結果為 FALSE,則會發生警告。插入或更新被跳過。
我們可以使用此功能在表中添加更多的邏輯,但是根據我以前作為程序員的經驗,我不建議在表中添加邏輯,因為除非您無法訪問應用程序代碼,否則很難找到或調試錯誤。
C. 如何修改或刪除mysql CHECK約束 constraint
你故意insert 一個不滿足條件的記錄,系統就會提示你違反了什麼constraint 'XXXX', 將該條件刪除即可。
例子:
mysql> insert persons
-> values ('-1', 'zheng', 'jian', 'fanling', 'hk');g
ERROR 3819 (HY000): Check constraint 'persons_chk_1' is violated.
文字的persons_chk_1 就是我要刪除的約束名字
mysql> alter table persons
-> drop check persons_chk_1;
刪除成功
D. mysql什麼時候用check命令
mysql什麼時候用check命令
具體方法如下:
查看服務中有沒有mysql,如果有將該服務停掉;
在控制面板中運行添加刪除程序,將mysql卸載;
卸載後打開注冊表,查看HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services 下的鍵值,如果有相關mysql鍵值(mysql、mysqladmin)則刪掉,即可;
重啟,將mysql的安裝殘余目錄刪掉 (查看服務,此時服務中已沒有mysql);
重新安裝mysql.安裝後先不要運行Server InstanceConfiguration wizard,重啟後在開始菜單中運行該向導,即可。
E. 怎樣使用Mysqlcheck來檢查和修復,優化表
檢查特定的表注意在shell中執行,不是在mysql的交互環境下如果應用中提示某個表壞了,使用下面的命令來檢查。$ mysqlcheck -c newmandela order -uroot -pEnter password:newmandela.orderOKnewmandela 是庫名, order是表名,還需要輸入用戶名和密碼檢查一個庫中的所有表$ mysqlcheck -c newmandela -uroot -pEnter password:newmandela.account OKnewmandela.alarm OKnewmandela.alarm_settings OKnewmandela.auth_group OKnewmandela.auth_group_permissions OKnewmandela.auth_permission OK...
F. 怎樣使用Mysqlcheck來檢查和修復,優化表
檢查特定的表
注意在shell中執行,不是在mysql的交互環境下
如果應用中提示某個表壞了,使用下面的命令來檢查。
$ mysqlcheck -c newmandela order -uroot -pEnter password:
newmandela.order
OK
newmandela 是庫名, order是表名,還需要輸入用戶名和密碼
檢查一個庫中的所有表
$mysqlcheck-cnewmandela-uroot-p
Enterpassword:
newmandela.accountOK
newmandela.alarmOK
newmandela.alarm_settingsOK
newmandela.auth_groupOK
newmandela.auth_group_permissionsOK
newmandela.auth_permissionOK...
G. MySQL中check的用法
現在要說的是在列這一層次過濾的基於表定義之前就規范好的 CHECK 約束。(MySQL 版本 >= 8.0.16)
mysql> create table f1 (r1 int constraint tb_f1_r1_chk1 check (mod(r1,3)=0));
Query OK, 0 rows affected (0.03 sec)
mysql> create table f2 (r1 int constraint tb_f2_r1_chk1 check (mod(r1,3)=0) not enforced);
Query OK, 0 rows affected (0.02 sec)
這里 CHECK 約束的相關限制如下:
1. constraint 名字在每個資料庫中唯一。
也就是說單個資料庫里不存在相同的兩個 constraint,如果不定義,系統自動生成一個唯一的約束名字。
2. check 約束針對語句 insert/update/replace/load data/load xml 生效;針對對應的 ignore 語句失效。
3. 並非每個函數都可以使用,比如函數結果不確定的:NOW(),CONNECTION_ID(),CURRENT_USER()。
4. 不適用於存儲過程和存儲函數。
5. 系統變數不適用。
6. 子查詢不適用。
7. 外鍵動作(比如 ON UPDATE, ON DELETE) 不適用。
8. enforced 默認啟用,如果單獨加上 not enforced ,check 約束失效。