備份
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]
....