檢查特定的表
創(chuàng)新互聯(lián)公司專注于玉泉街道企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站開發(fā)。玉泉街道網(wǎng)站建設(shè)公司,為玉泉街道等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站建設(shè),專業(yè)設(shè)計,全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)
注意在shell中執(zhí)行,不是在mysql的交互環(huán)境下
如果應(yīng)用中提示某個表壞了,使用下面的命令來檢查。
$ mysqlcheck -c newmandela order -uroot -pEnter password:
newmandela.order
OK
newmandela 是庫名, order是表名,還需要輸入用戶名和密碼
檢查一個庫中的所有表
$?mysqlcheck?-c?newmandela?-uroot?-p
Enter?password:
newmandela.account?OK
newmandela.alarm?OK
newmandela.alarm_settings?OK
newmandela.auth_group?OK
newmandela.auth_group_permissions?OK
newmandela.auth_permission?OK...
估計是的query函數(shù)是封裝的mysql_query.
我測試了一下:
$sql="check?table?表名";
$res=mysql_query($sql);
while?($row?=?mysql_fetch_assoc($res))?{
print_r($row);
}
mysql_free_result($res);
//check?table?返回的結(jié)果是:
Array
(
[Table]?=數(shù)據(jù)庫名字.表名
[Op]?=?check
[Msg_type]?=?status
[Msg_text]?=?OK
)
你可以根據(jù)上面返回的結(jié)果來判斷。
注意:你用mysql_query來執(zhí)行一些語句的時候,如果執(zhí)行錯誤講返回false。如果沒有權(quán)限,那么此函數(shù)也返回false。具體可參考此函數(shù)的php手冊說明。
mysqlcheck 是 MySQL 自帶的一個工具,作用就是保養(yǎng) 表,其實(shí)就是檢查,分析,修復(fù)和優(yōu)化了。下面來介紹 mysqlcheck 工具的簡單使用,官方文檔在這里
以下的例子都是基于 MySQL 5.6 版本運(yùn)行狀態(tài)下(mysqlcheck是個在線工具), 不同的存儲引擎對于這個命令的支持程度不同(指的是 check, repair, analyze, optimize),下面內(nèi)容偏于操作,主要基于 innodb 引擎。
提示:OPTIMIZE 在大表時候可能會消耗很多時間,不清楚原理情況下請謹(jǐn)慎使用!!! innodb 一般不用 OPTIMIZE,請參見 Using MySQL OPTIMIZE tables? For InnoDB? Stop
檢查特定的表
注意在shell中執(zhí)行,不是在mysql的交互環(huán)境下
如果應(yīng)用中提示某個表壞了,使用下面的命令來檢查。
$ mysqlcheck -c newmandela order -uroot -pEnter password:
newmandela.order
OK
newmandela 是庫名, order是表名,還需要輸入用戶名和密碼
檢查一個庫中的所有表
$ mysqlcheck -c newmandela -uroot -p
Enter password:
newmandela.account OK
newmandela.alarm OK
newmandela.alarm_settings OK
newmandela.auth_group OK
newmandela.auth_group_permissions OK
newmandela.auth_permission OK...
這是一項(xiàng)新功能,用于指定在插入或更新到一行之前檢查值的條件。如果表的任何行的搜索條件的結(jié)果為 FALSE,則約束可能返回錯誤(但如果結(jié)果為 UNKNOWN 或 TRUE,則約束不會返回錯誤)。此功能開始在 MySQL 8.0.16 上運(yùn)行,在以前的版本中,我們可以創(chuàng)建它,但它不起作用,這意味著支持語法,但不起作用。要牢記的使用規(guī)則:
AUTO_INCREMENT 自增列不允許使用
引用另一個表中的另一列不允許使用
存儲的函數(shù)和用戶定義的函數(shù)不允許使用
存儲過程和函數(shù)參數(shù)不允許使用
子查詢不允許使用
在外鍵中用于后續(xù)操作(ON UPDATE,ON DELETE)的列不允許使用
為下一條語句 INSERT,UPDATE,REPLACE,LOAD DATA 和 LOAD XML 評估此次監(jiān)測。此外,還會為 INSERT IGNORE,UPDATE IGNORE,LOAD DATA…IGNORE 和 LOAD XML…IGNORE 評估此監(jiān)測約束。對于這些語句,如果約束的評估結(jié)果為 FALSE,則會發(fā)生警告。插入或更新被跳過。
我們可以使用此功能在表中添加更多的邏輯,但是根據(jù)我以前作為程序員的經(jīng)驗(yàn),我不建議在表中添加邏輯,因?yàn)槌悄鸁o法訪問應(yīng)用程序代碼,否則很難找到或調(diào)試錯誤。
1、linux下mysql安裝完后是默認(rèn):區(qū)分表名的大小寫,不區(qū)分列名的大小寫;
2、用root帳號登錄后,在/etc/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重啟MYSQL服務(wù),這時已設(shè)置成功:不區(qū)分表名的大小寫;
lower_case_table_names參數(shù)詳解:
lower_case_table_names = 0
其中 0:區(qū)分大小寫,1:不區(qū)分大小寫
MySQL在Linux下數(shù)據(jù)庫名、表名、列名、別名大小寫規(guī)則是這樣的:
1、數(shù)據(jù)庫名與表名是嚴(yán)格區(qū)分大小寫的;
2、表的別名是嚴(yán)格區(qū)分大小寫的;
3、列名與列的別名在所有的情況下均是忽略大小寫的;
4、變量名也是嚴(yán)格區(qū)分大小寫的;
MySQL在Windows下都不區(qū)分大小寫。
3、如果想在查詢時區(qū)分字段值的大小寫,則:字段值需要設(shè)置BINARY屬性,設(shè)置的方法有多種:
A、創(chuàng)建時設(shè)置:
CREATE TABLE T(
A VARCHAR(10) BINARY
);
B、使用alter修改:
ALTER TABLE `tablename` MODIFY COLUMN `cloname` VARCHAR(45) BINARY;
C、mysql table editor中直接勾選BINARY項(xiàng)。