天天看點

Mysql 常用指令 轉

備份

mysqldump --opt dbname > dbname.20060307<?XML:NAMESPACE PREFIX = O />      

恢複

mysql dbname < backup.20060307      

得到表格的建立 SQL 語句

SHOW CREATE TABLE tbl_name      

删除行尾的 "\r"

MySQL 導入的資料必須是 unix 的檔案。如果你的表中一些記錄的行尾是"\r",可以用這個 SQL 語句删去:

UPDATE table_name as t SET t.column_name=SUBSTRING_INDEX(t.column_name, "\r", 1)      

System error 1067 has occurred.

如果使用 no-installed 的 MySQL,而且安裝的位置不在 c:,則需要設定 my.ini。在 MySQL\Doc 裡的文檔有較長的描述。一般 winxp 是在 C:\WINDOWS 目錄中,建立一個 my.ini,加入這樣幾行:

basedir=d:\\Programs\\mysql      
datadir=d:\\Programs\\mysql\\data      

修改預設的 engine

MySQL Query Brower 預設的 engine 是 InnoDB,其實對于單使用者來說,MyISAM 更好。隻要修改 Application/MySQL/mysqlx_common_options.xml 中這一行就好了。

<property name="EditorTableDefaultStorageEngine" value="MyISAM" />      

SQL 曆史

Query Brower 中不能複制 history,其實這些都在 Application/MySQL/mysqlqb_history.xml 中。

常用指令

# 修改表的名字      
ALTER TABLE `biblio`.`bibrefkey` RENAME TO `biblio`.`bibrefKey`;      

删除重複資料

CREATE TEMPORARY TABLE temp AS SELECT DISTINCT * FROM table_name;      
DELETE FROM table_name;      
INSERT INTO table_name SELECT * FROM temp;      

插入時忽略重複

INSERT IGNORE table_name VALUES (...);      

CONCAT_WS 函數

這個函數類似于 join 函數。

CONCAT_WS(separator, str1, str2,...)

找出重複的紀錄

CREATE TEMPORARY TABLE temp AS SELECT num, id FROM table_name GROUP BY CONCAT_WS("-", num, id)  HAVING COUNT(*)>1;      
SELECT t.* FROM table_name AS t, temp WHERE t.id=temp.id and t.num=temp.num;      

修改表格列類型:

一般隻要這樣就行了:

ALTER TABLE table_name CHANGE column_name column_defination      

對于 auto_increment 類型,要這樣:

ALTER TABLE table_name ADD PRIMARY KEY (Id);      
ALTER TABLE table_name CHANGE `Id` `Id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;      

修改表格的預設值

ALTER TABLE table_name ALTER `id` SET DEFAULT 0;

得到表格的 auto_increment 值

SHOW TABLE STATUS FROM database like "pattern";      

從檔案中導入資料

load data infile "file" into table db.table;      

字元串替換的例子

把 Custom5 字段中 hda5 替換成 sda5。也可以用 REPLACE 函數。

UPDATE bibref set Custom5=concat('/media/sda5', substring(Custom5 from 12)) where custom5 like "/media/hda5%";      

字元串函數如下:

函數 功能
ASCII(str) 傳回字元串第一個字元的 ascii 編碼
BIN(N) 傳回數字N的二進制字元串
BIT_LENGTH 傳回字元串的二進制長度
CHAR(N,...[USING charset]) 傳回N對應的字元串
CHAR_LENGTH(str) 字元串的字元長度
CHARACTER_LENGTH(str) CHAR_LENGTH 的别名
COMPRESS(str) <!--[if !supportEmptyParas]--> <!--[endif]-->
CONCAT(str1, str2,...)
CONCAT_WS(separator, str1, str2,...)
CONV(N, from_base, to_base) 數字不同基數的轉換
ELT(N, str1, str2, ...)
EXPORT_SET
FIELD
FORMAT(X, D)
HEX(N_or_S)
INSERT(str, pos, len, newstr)
INSTR(str, substr)
LCASE(str)
LEFT(str, len)
LENGTH(str)
LOAD_FILE(file_name)
LOWER(str)
LPAD(str, len, padstr)
LTRIM(str)
MAKE_SET(bits, str, str2,...)
MID(str, pos, len)
OCT(N)
OCTET_LENGTH(str)
ORD(str)
QUOTE(str)
REPEAT(str, count)
REPLACE(str, from_str, to_str)
REVERSE(str)
RIGHT(str, len)
RPAD(str, len, padstr)
RTRIM(str)
SOUNDEX(str)
SPACE(N)
SUBSTRING(str, pos, len)
SUBSTRING_INDEX(str, delim, count)
TRIM([{BOTH, LEADING, TRAILING} [remstr] FROM] str)
UCASE(str)
UNCOMPRESS(str)
UNCOMPRESSED_LENGTH(compressed_str) 傳回壓縮字元串壓縮前的長度
UNHEX(str)
UPPER(str)

修改密碼

轉載自《

MySQL中修改密碼方法總結

首先要說明一點的是:一般情況下,修改MySQL密碼是需要有mysql裡的root權限的,這樣一般使用者是無法更改密碼的,除非請求管理者幫助修改。

方法一: 使用phpMyAdmin

(圖形化管理 MySQL 資料庫的工具),這是最簡單的,直接用 SQL 語句修改 mysql 資料庫庫的 user 表,不過别忘了使用 PASSWORD 函數,插入使用者用 Insert指令,修改使用者用Update指令,删除用Delete指令。在本節後面有資料表 user字段的詳細介紹。www.xker.com(小新技術網)

方法二: 使用mysqladmin。

mysqladmin -u root -p oldpassword newpasswd      

執行這個指令後,需要輸入root的原密碼,這樣root的密碼将改為newpasswd。同樣,把指令裡的root改為你的使用者名,你就可以改你自己的密碼了。

當然如果你的mysqladmin連接配接不上mysql server,或者你沒有辦法執行 mysqladmin,那麼這種方法就是無效的,而且mysqladmin無法把密碼清空。

下面的方法都在mysql提示符下使用,且必須有mysql的root權限:

方法三

mysql> INSERT INTO mysql.user (Host,User,Password) VALUES ('%','system', PASSWORD('manager'));      
mysql> FLUSH PRIVILEGES      

确切地說這是在增加一個使用者,使用者名為system,密碼為manager。注意要使用 PASSWORD函數,然後還要使用FLUSH PRIVILEGES來執行确認。

方法四

和方法三一樣,隻是使用了REPLACE語句

mysql> REPLACE INTO mysql.user (Host,User,Password) VALUES('%','system',PASSWORD('manager'));      
mysql> FLUSH PRIVILEGES      

方法五

使用SET PASSWORD語句

mysql> SET PASSWORD FOR system@"%" = PASSWORD('manager');      

你也必須使用PASSWORD()函數,但是不需要使用FLUSH PRIVILEGES來執行确認。

方法六

使用GRANT ... IDENTIFIED BY語句,來進行授權。

mysql> GRANT USAGE ON *.* TO system@"%" IDENTIFIED BY 'manager';      

這裡 PASSWORD()函數是不必要的,也不需要使用FLUSH PRIVILEGES來執行确認。

注:PASSWORD()函數作用是為密碼字加密,在程式中MySQL自動解釋。

如果要使用 LOAD DATA INFILE 語句,需要提供 FILE 權限:

mysql> GRANT FILE ON *.* TO system@"%" IDENTIFIED BY 'manager';      

也可以直接提供所有的權限:ALL PRIVILEGES 。

用 SHOW VARIABLES 檢視 MySQL 支援的功能

SHOW VARIABLES LIKE "have%";      

查找文檔

在指令行中可以使用 ? 或 help 指令來查找 SQL 語句的文檔。比如:

mysql> ? update      
Name: 'UPDATE'      
Description:      
Syntax:      
Single-table syntax:      
<!--[if !supportEmptyParas]--> <!--[endif]-->      
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name      
    SET col_name1=expr1 [, col_name2=expr2 ...]      
    [WHERE where_condition]      
    [ORDER BY ...]      
    [LIMIT row_count]      
<!--[if !supportEmptyParas]--> <!--[endif]-->      
Multiple-table syntax:      
<!--[if !supportEmptyParas]--> <!--[endif]-->      
UPDATE [LOW_PRIORITY] [IGNORE] table_references      
    SET col_name1=expr1 [, col_name2=expr2 ...]      
    [WHERE where_condition]      
....