亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

mysql命令大全

系統(tǒng) 1826 0

啟動:net start mySql;
  進(jìn)入:mysql -u root -p/mysql -h localhost -u root -p databaseName;
  列出數(shù)據(jù)庫:show databases;
  選擇數(shù)據(jù)庫:use databaseName;
  列出表格:show tables;
  顯示表格列的屬性:show columns from tableName;
  建立數(shù)據(jù)庫:source fileName.txt;
  匹配字符:可以用通配符_代表任何一個字符,%代表任何字符串;
  增加一個字段:alter table tabelName add column fieldName dateType;
  增加多個字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;
  多行命令輸入:注意不能將單詞斷開;當(dāng)插入或更改數(shù)據(jù)時,不能將字段的字符串展開到多行里,否則硬回車將被儲存到數(shù)據(jù)中;
  增加一個管理員帳戶:grant all on *.* to user@localhost identified by "password";
  每條語句輸入完畢后要在末尾填加分號';',或者填加'\g'也可以;
  查詢時間:select now();
  查詢當(dāng)前用戶:select user();
  查詢數(shù)據(jù)庫版本:select version();
  查詢當(dāng)前使用的數(shù)據(jù)庫:select database();

  1、刪除student_course數(shù)據(jù)庫中的students數(shù)據(jù)表:
  rm -f student_course/students.*

  2、備份數(shù)據(jù)庫:(將數(shù)據(jù)庫test備份)
  mysqldump -u root -p test>c:\test.txt
  備份表格:(備份test數(shù)據(jù)庫下的mytable表格)
  mysqldump -u root -p test mytable>c:\test.txt
  將備份數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫:(導(dǎo)回test數(shù)據(jù)庫)
  mysql -u root -p test

  3、創(chuàng)建臨時表:(建立臨時表zengchao)
  create temporary table zengchao(name varchar(10));

  4、創(chuàng)建表是先判斷表是否存在
  create table if not exists students(……);

  5、從已經(jīng)有的表中復(fù)制表的結(jié)構(gòu)
  create table table2 select * from table1 where 1<>1;

  6、復(fù)制表
  create table table2 select * from table1;

  7、對表重新命名
  alter table table1 rename as table2;

  8、修改列的類型
  alter table table1 modify id int unsigned;//修改列id的類型為int unsigned
  alter table table1 change id sid int unsigned;//修改列id的名字為sid,而且把屬性修改為int unsigned

  9、創(chuàng)建索引
  alter table table1 add index ind_id (id);
  create index ind_id on table1 (id);
  create unique index ind_id on table1 (id);//建立唯一性索引

  10、刪除索引
  drop index idx_id on table1;
  alter table table1 drop index ind_id;

  11、聯(lián)合字符或者多個列(將列id與":"和列name和"="連接)
  select concat(id,':',name,'=') from students;

  12、limit(選出10到20條)<第一個記錄集的編號是0>
  select * from students order by id limit 9,10;

  13、MySQL不支持的功能
  事務(wù),視圖,外鍵和引用完整性,存儲過程和觸發(fā)器


  14、MySQL會使用索引的操作符號
  <,<=,>=,>,=,between,in,不帶%或者_(dá)開頭的like

  15、使用索引的缺點
  1)減慢增刪改數(shù)據(jù)的速度;
  2)占用磁盤空間;
  3)增加查詢優(yōu)化器的負(fù)擔(dān);
  當(dāng)查詢優(yōu)化器生成執(zhí)行計劃時,會考慮索引,太多的索引會給查詢優(yōu)化器增加工作量,導(dǎo)致無法選擇最優(yōu)的查詢方案;

  16、分析索引效率
  方法:在一般的SQL語句前加上explain;
  分析結(jié)果的含義:
  1)table:表名;
  2)type:連接的類型,(ALL/Range/Ref)。其中ref是最理想的;
  3)possible_keys:查詢可以利用的索引名;
  4)key:實際使用的索引;
  5)key_len:索引中被使用部分的長度(字節(jié));
  6)ref:顯示列名字或者"const"(不明白什么意思);
  7)rows:顯示MySQL認(rèn)為在找到正確結(jié)果之前必須掃描的行數(shù);
  8)extra:MySQL的建議;

  17、使用較短的定長列
  1)盡可能使用較短的數(shù)據(jù)類型;
  2)盡可能使用定長數(shù)據(jù)類型;
  a)用char代替varchar,固定長度的數(shù)據(jù)處理比變長的快些;
  b)對于頻繁修改的表,磁盤容易形成碎片,從而影響數(shù)據(jù)庫的整體性能;
  c)萬一出現(xiàn)數(shù)據(jù)表崩潰,使用固定長度數(shù)據(jù)行的表更容易重新構(gòu)造。使用固定長度的數(shù)據(jù)行,每個記錄的開始位置都是固定記錄長度的倍數(shù),可以很容易被檢測到,但是使用可變長度的數(shù)據(jù)行就不一定了;
  d)對于MyISAM類型的數(shù)據(jù)表,雖然轉(zhuǎn)換成固定長度的數(shù)據(jù)列可以提高性能,但是占據(jù)的空間也大;

  18、使用not null和enum
  盡量將列定義為not null,這樣可使數(shù)據(jù)的出來更快,所需的空間更少,而且在查詢時,MySQL不需要檢查是否存在特例,即null值,從而優(yōu)化查詢;
  如果一列只含有有限數(shù)目的特定值,如性別,是否有效或者入學(xué)年份等,在這種情況下應(yīng)該考慮將其轉(zhuǎn)換為enum列的值,MySQL處理的更快,因為所有的enum值在系統(tǒng)內(nèi)都是以標(biāo)識數(shù)值來表示的;

  19、使用optimize table
  對于經(jīng)常修改的表,容易產(chǎn)生碎片,使在查詢數(shù)據(jù)庫時必須讀取更多的磁盤塊,降低查詢性能。具有可變長的表都存在磁盤碎片問題,這個問題對blob數(shù)據(jù)類型更為突出,因為其尺寸變化非常大。可以通過使用optimize table來整理碎片,保證數(shù)據(jù)庫性能不下降,優(yōu)化那些受碎片影響的數(shù)據(jù)表。 optimize table可以用于MyISAM和BDB類型的數(shù)據(jù)表。實際上任何碎片整理方法都是用mysqldump來轉(zhuǎn)存數(shù)據(jù)表,然后使用轉(zhuǎn)存后的文件并重新建數(shù)據(jù)表;

  20、使用procedure analyse()
  可以使用procedure analyse()顯示最佳類型的建議,使用很簡單,在select語句后面加上procedure analyse()就可以了;例如:
  select * from students procedure analyse();
  select * from students procedure analyse(16,256);
  第二條語句要求procedure analyse()不要建議含有多于16個值,或者含有多于256字節(jié)的enum類型,如果沒有限制,輸出可能會很長;

  21、使用查詢緩存
  1)查詢緩存的工作方式:
  第一次執(zhí)行某條select語句時,服務(wù)器記住該查詢的文本內(nèi)容和查詢結(jié)果,存儲在緩存中,下次碰到這個語句時,直接從緩存中返回結(jié)果;當(dāng)更新數(shù)據(jù)表后,該數(shù)據(jù)表的任何緩存查詢都變成無效的,并且會被丟棄。
  2)配置緩存參數(shù):
  變量:query_cache _type,查詢緩存的操作模式。有3中模式,0:不緩存;1:緩存查詢,除非與 select sql_no_cache開頭;2:根據(jù)需要只緩存那些以select sql_cache開頭的查詢; query_cache_size:設(shè)置查詢緩存的最大結(jié)果集的大小,比這個值大的不會被緩存。

  22、調(diào)整硬件
  1)在機器上裝更多的內(nèi)存;
  2)增加更快的硬盤以減少I/O等待時間;
  尋道時間是決定性能的主要因素,逐字地移動磁頭是最慢的,一旦磁頭定位,從磁道讀則很快;
  3)在不同的物理硬盤設(shè)備上重新分配磁盤活動;
  如果可能,應(yīng)將最繁忙的數(shù)據(jù)庫存放在不同的物理設(shè)備上,這跟使用同一物理設(shè)備的不同分區(qū)是不同的,因為它們將爭用相同的物理資源(磁頭)。

分享到:
評論
1 樓 coolmist 2007-10-30 引用
1. Mysql 培訓(xùn)
1.1. 培訓(xùn)目的
本文檔是針對MySQL 數(shù)據(jù)庫方面的基礎(chǔ)培訓(xùn),為了使項目組成員能夠達(dá)到使用MySQL 數(shù)據(jù)庫的目的。
1.2. 培訓(xùn)對象
開發(fā)人員
1.3. 常用詞及符號說明
常用詞:
Mysql:一種免費的跨平臺的數(shù)據(jù)庫系統(tǒng)
E:\mysql:表示是在dos 命令窗口下面
mysql> 表示是在mysql 的命令行下
1.4. 參考信息
http://dev.mysql.com/doc/refman/5.0/en/index.html

2. MYSQL
2.1. 連接MYSQL
格式: mysql -h主機地址 -u用戶名 -p用戶密碼
連接遠(yuǎn)程機器:
E:\mysql>mysql -h10.4.3.188 -uptsdb -p
等價寫法
E:\mysql>mysql --host=10.4.3.188 --user=ptsdb --password
連接本地機器:
E:\mysql>mysql -uroot -p
等價寫法
E:\mysql>mysql --user=root -password
(注:u與root可以不用加空格,其它也一樣)
注意事項:環(huán)境變量path 里面要設(shè)定mysql的bin的路徑:
C:\Program Files\MySQL\MySQL Server 5.0\bin
2.2. 修改密碼
方法一:使用mysqladmin
格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼
例1:E:\mysql>mysqladmin -uroot password root
注:因為開始時root沒有密碼,所以-p舊密碼一項就可以省略了。
例2:再將root的密碼改為root123。
E:\mysql>mysqladmin -uroot -proot password root123
方法二:直接更新 user 表
mysql>UPDATE user SET password=PASSWORD("test123") WHERE user='test';
mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR test=PASSWORD('test123');
mysql> FLUSH PRIVILEGES;
方法三:使用 grant
格式:grant 權(quán)限 on 數(shù)據(jù)庫.表格| 其他 to 用戶@主機 IDENTIFIED BY 口令
例1:給test用戶在本地localhost 所有權(quán)限(除了GRANT OPTION),口令為 test
(相當(dāng)于修改了test 用戶的口令)
mysql>grant all on *.* to test@localhost identified by "test";
等同于
mysql>grant all on *.* to test @localhost identified by PASSWORD " *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 ";

例2、增加一個用戶test密碼為abc,讓他可以在任何主機上登錄,并對test數(shù)據(jù)庫有查詢、插入、修改、刪除的權(quán)限。首先用以root用戶連入MYSQL,然后鍵入以下命令:
mysql>grant select,insert,update,delete on test.* to test@"%" Identified by "abc";

在mysql.user 表中,有兩個test 用戶
一個test 用戶,在本地有所有的權(quán)限
另外的test 用戶,在所有主機上有增刪改查權(quán)限

同樣可以取消部分權(quán)限(全部)
mysql>revoke insert,update,delete on test.* from test@"%"
mysql>REVOKE ALL PRIVILEGES, GRANT OPTION FROM test@"%"
然后 mysql> FLUSH PRIVILEGES;

Test 用戶不再使用用了,也可以刪除
mysql>Delete from user where user='test' and host='%'
mysql> FLUSH PRIVILEGES;

注意:例2增加的用戶是比較危險的,你想如某個人知道test的密碼,那么他就可以在internet上的任何一臺電腦上登錄你的mysql數(shù)據(jù)庫并對你的數(shù)據(jù)庫test為所欲為了(可以通過限定主機)
mysql>grant select,insert,update,delete on test.* to test@"IP地址" Identified by "abc";
2.3. 顯示命令
顯示數(shù)據(jù)庫列表:
mysql>show databases;
mysql>show schemas; --mysql 5.0.2
顯示表格
mysql>show tables from mydb;
顯示表格狀態(tài)
Mysql>SHOW TABLE STATUS;
顯示字符集:
mysql> SHOW CHARACTER SET;
顯示創(chuàng)建表:
mysql> show create table quote;
顯示用戶權(quán)限:
mysql> SHOW GRANTS FOR 'test'@'localhost';
mysql>SHOW GRANTS;
mysql>SHOW GRANTS FOR CURRENT_USER;
mysql>SHOW GRANTS FOR CURRENT_USER();
顯示index:
mysql>SHOW INDEX FROM mydb.mytable;
顯示表結(jié)構(gòu):
mysql>desc mydb.tablename;
mysql>show columns from mydb.tablename;
顯示MySQL數(shù)據(jù)庫的版本:
mysql>select version();
顯示函數(shù)
mysql>Select * from mysql.func;
顯示存儲過程
mysql>Select * from mysql.proc;
顯示存儲引擎
mysql> SHOW ENGINES;
顯示變量:
mysql>SHOW VARIABLES;
顯示狀態(tài):
Mysql> SHOW STATUS;
顯示進(jìn)程
Mysql>SHOW PROCESSLIST
顯示 INNODB 狀態(tài)
Mysql>SHOW INNODB STATUS
顯示連接狀態(tài)
Mysql>SHOW STATUS LIKE '%CONNECT%';
顯示線程狀態(tài)
Mysql>SHOW STATUS LIKE '%THREAD%';

等等..

2.4. 創(chuàng)建.修改.刪除
2.4.1. 創(chuàng)建數(shù)據(jù)庫
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[create_specification [, create_specification] ...]

create_specification:
[DEFAULT] CHARACTER SET charset_name
| [DEFAULT] COLLATE collation_name
例如:
CREATE DATABASE IF NOT EXISTS ddd --如果不存在,則創(chuàng)建.
CHARACTER SET 'ujis' --設(shè)定字符集
COLLATE 'ujis_japanese_ci';
2.4.2. 創(chuàng)建表
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options] [select_statement]
例子:
CREATE TABLE if not exists `Admin_User` (
`id` int(11) NOT NULL auto_increment, --PRIMARY KEY,
`livedoorId` varchar(255) NOT NULL default '',
`password` varchar(255) NOT NULL default '',
`auth` int(11) default '0',
PRIMARY KEY (`id`) --設(shè)定主健
) ENGINE=MyISAM DEFAULT CHARSET=ujis ?設(shè)定字符集
ENGINE=MyISAM 默認(rèn)存儲引擎
The binary portable storage engine that is the default storage engine used by MySQL
對于每個MyISAM 存儲引擎的表,在硬盤上存在3個文件
File Purpose
tbl_name.frm Table format (definition) file
tbl_name.MYD Data file
tbl_name.MYI Index file

ENGINE= InnoDB
Transaction-safe tables with row locking and foreign keys.
ENGINE = BDB
Transaction-safe tables with page locking.
還有其他的內(nèi)存引擎 MEMORY 歸檔 ARCHIVE 等等
ISAM 不再使用了

2.4.3. 創(chuàng)建索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[USING index_type]
ON tbl_name (index_col_name,...)
index_col_name:
col_name [(length)] [ASC | DESC]

將customer 表的name 字段前十個字符做為索引
CREATE INDEX part_of_name ON customer (name(10));
MYSQL 5.0 特性
存儲引擎為 MyISAM, InnoDB, or BDB 的表格上,可以在有null值的字段上創(chuàng)建索引
存儲引擎為 MyISAM, InnoDB, or BDB 的表格上,可以在BLOB TEXT 上創(chuàng)建索引
只有在MyISAM 類型表格上,可以在CHAR, VARCHAR, and TEXT 字段類型上創(chuàng)建FULLTEXT 索引
Storage Engine Allowable Index Types
MyISAM BTREE
InnoDB BTREE
MEMORY/HEAP HASH, BTREE
可以指定索引類型

Example:
CREATE TABLE testtable (id INT) ENGINE = MEMORY;
CREATE INDEX id_index USING BTREE ON testtable (id);
2.4.4. 修改表
ALTER [IGNORE] TABLE tbl_name
alter_specification [, alter_specification] ...
IGNORE 忽略主健重復(fù)的錯誤,如果重復(fù),采用第一條,其余刪除
例子:同時多個操作
mysql> ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
例子, 重命名 INTEGER 字段,從 a 到 b:
mysql> ALTER TABLE t1 CHANGE a b INTEGER;
例子 修改字段類型,仍然需要新舊字段名稱,即使字段名稱相同:
mysql> ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;
也可以使用modify
mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL;

在mysql 5.0 可以使用FIRST or AFTER 字段來添加add 字段,默認(rèn)是在最后
modify change 也可以使用
在mysql 5.0 InnoDB 存儲引擎支持 ALTER TABLE 刪除外健:
mysql>ALTER TABLE yourtablename DROP FOREIGN KEY fk_symbol;

例子:
創(chuàng)建表
mysql> CREATE TABLE t1 (a INTEGER,b CHAR(10));
重命名表
mysql> ALTER TABLE t1 RENAME t2;
MODIFY a 字段為 TINYINT NOT NULL , 并且 change 字段 b,從 CHAR(10) 到 CHAR(20) 并改名為c:

mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
添加新字段 d:
mysql> ALTER TABLE t2 ADD d TIMESTAMP;
在a d 上增加索引:
mysql> ALTER TABLE t2 ADD INDEX (d), ADD INDEX (a);
刪除字段c:
mysql> ALTER TABLE t2 DROP COLUMN c;
添加一個自動增長的字段c ,并且添加c 為主健:
mysql> ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,
-> ADD PRIMARY KEY (c);
2.4.4.1. 修改外鍵
語法:
ALTER TABLE tbl_name
ADD [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
REFERENCES tbl_name (index_col_name, ...)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
例子:
create table aa (id1 int not null,name varchar(20),primary key(id1))type=InnoDB;
create table b(id2 int not null,lessonname varchar(20),primary key(id2))type=InnoDB;
alter table b add FOREIGN KEY id (id2) references aa(id1);

2.4.5. 刪除
刪除數(shù)據(jù)庫
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
例子: mysql>drop DATABASE IF EXISTS testdb;
刪除表
DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]
例子: mysql>drop TABLE IF EXISTS testTable;
刪除索引
DROP INDEX index_name ON tbl_name
例子: mysql>drop index testIndex on testTable;
重命名
RENAME TABLE tbl_name TO new_tbl_name
[, tbl_name2 TO new_tbl_name2] ...
例子:RENAME TABLE current_db.tbl_name TO other_db.tbl_name;
2.5. 數(shù)據(jù)庫備份恢復(fù)
數(shù)據(jù)庫備份
數(shù)據(jù)庫備份命令:
mysqldump --opt --user=用戶名 --password=密碼 --default_character-set=字符集 -B數(shù)據(jù)庫> 輸出的sql文件
例子:
E:\mysql>Mysqldump --user=ptsdb --password=ptsdb --default_character-set=ujis --opt pts>dump.sql
參見批處理文件

數(shù)據(jù)庫導(dǎo)入命令:
mysql --user=用戶名 --password=密碼 --default_character-set=字符集 [數(shù)據(jù)庫]<導(dǎo)入的sql 語句

E:\mysql>mysql -uptsdb -pptsdb --default-character-set=ujis

例子: 對于InnoDB(沒有設(shè)定字符集)
Following mysqldump import example for InnoDB tables is at least 100x faster than previous examples.
1. mysqldump --opt --user=username --password database > dumbfile.sql
2. Edit the dump file and put these lines at the beginning:
SET AUTOCOMMIT = 0;
SET FOREIGN_KEY_CHECKS=0;
3. Put these lines at the end:
SET FOREIGN_KEY_CHECKS = 1;
COMMIT;
SET AUTOCOMMIT = 1;
4. mysql --user=username --password database < dumpfile.sql

參數(shù)說明:
--add-drop-database
Add a DROP DATABASE statement before each CREATE DATABASE statement.

--add-drop-table
Add a DROP TABLE statement before each CREATE TABLE statement.

--all-databases, -A
Dump all tables in all databases. This is the same as using the --databases option and naming all the databases on the command line.
--databases, -B
Dump several databases. Normally, mysqldump treats the first name argument on the command line as a database name
and following names as table names. With this option, it treats all name arguments as database names.
CREATE DATABASE IF NOT EXISTS db_name and USE db_name statements are included in the output before each new database.

--host=host_name, -h host_name
Dump data from the MySQL server on the given host. The default host is localhost.
--opt
This option is shorthand; it is the same as specifying --add-drop-table --add-locks --create-options
--disable-keys --extended-insert --lock-tables --quick --set-charset.
It should give you a fast dump operation and produce a dump file that can be reloaded into a MySQL server quickly.
In MySQL 5.0, --opt is on by default, but can be disabled with --skip-opt.
To disable only certain of the options enabled by --opt, use their --skip forms;
for example, --skip-add-drop-table or --skip-quick.
還有一些其他參數(shù),有興趣可以學(xué)習(xí)
2.6. 表數(shù)據(jù)備份
mysql>use test;
mysql> CREATE TABLE imptest(id INT, n VARCHAR(30));
Query OK, 0 rows affected (0.03 sec)
方法一:
導(dǎo)出使用:Mysqldump
E:\mysql>mysqldump -uptsdb -pptsdb -where "id>='100'"
test imptest
E:\mysql>mysqldump -uptsdb -pptsdb test imptest>e:\mysql\imp\imptest2.txt
導(dǎo)入使用 mysql
mysql -uptsdb -pptsdb< imptest2.txt
方法二:
導(dǎo)出使用 select into OUTFILE
mysql> select * from imptest where id=101 into OUTFILE 'e:\\mysql\\imp\\test3.txt' FIELDS TERMINATED BY ',';

導(dǎo)入使用 LOAD DATA INFILE
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char' ]
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...]]
例子:
mysql> LOAD DATA INFILE 'e:\\mysql\\imp\\test3.txt' INTO TABLE imptest FIELDS TERMINATED BY ',';

導(dǎo)入使用mysqlimport:
E:\mysql>mysqlimport -uptsdb -pptsdb --local test E:\mysql\imp\imp.txt
mysqlimport: Error: Table 'test.imp' doesn't exist, when using table: imp

E:\mysql>mysqlimport -uptsdb -pptsdb --local test E:\mysql\imp\imptest.txt
test.imptest: Records: 2 Deleted: 0 Skipped: 0 Warnings: 0
注意:文件名必須跟表名相同
參數(shù)
-d or --delete 新數(shù)據(jù)導(dǎo)入數(shù)據(jù)表中之前刪除數(shù)據(jù)數(shù)據(jù)表中的所有信息
-f or --force 不管是否遇到錯誤,mysqlimport將強制繼續(xù)插入數(shù)據(jù)
-i or --ignore mysqlimport跳過或者忽略那些有相同唯一
-r or -replace 這個選項與-i選項的作用相反;此選項將替代 表中有相同唯一關(guān)鍵字的記錄
2.7. 數(shù)據(jù)管道導(dǎo)入導(dǎo)出
E:\mysql>mysql -h10.5.1.66 -uroot -proot --default-character-set=name frontdb_20060415(databasename)
>e:/mysql/test.txt (輸出的sql 語句)

1:>;create databases newname(在新的server上建立空的數(shù)據(jù)庫)
2:#/usr/local/mysql/bin/mysqldump databasename >*.sql(在舊的服務(wù)器上導(dǎo)出數(shù)據(jù)庫)
3:#/usr/local/mysql/bin/mysql databasename < *.sql(在新的服務(wù)器上導(dǎo)入*.sql)
注意數(shù)據(jù)庫名要一一對應(yīng).
2.8. 各種字段的取值范圍
TINYINT 1 byte
-128 - 127
TINYINT UNSIGNED 1 byte
0 ? 255 即0-(28-1)
SMALLINT 2 bytes
-32768 - 32767 即-215至(215-1)
SMALLINT UNSIGNED 2 bytes
0 - 65535 即0至(216-1)
MEDIUMINT 3 bytes
-8388608 - 8388607 即?223至(223-1)
MEDIUMINT UNSIGNED 3 bytes
0 - 16777215 即0至(224-1)
INT 或 INTEGER 4 bytes
-2147483648 - 2147483647 即?231至(231-1)
INT UNSIGNED 或 INTEGER UNSIGNED 4 bytes
0 - 4294967295 即0至(232-1)
BIGINT 8 bytes
-9223372036854775808 - 9223372036854775807 即?263至(263-1)
BIGINT UNSIGNED 8 bytes
0 - 18446744073709551615 即0至(264-1)
FLOAT 4 bytes
-3.402823466E+38 - -1.175494351E-38
0
1.175494351E-38 - 3.402823466E+38
DOUBLE 或 DOUBLE PRECISION 或 REAL 8 bytes
-1.7976931348623157E+308 - -2.2250738585072014E-308
0
2.2250738585072014E-308 - 1.7976931348623157E+308
DECIMAL[(M,[D])] 或 NUMERIC(M,D) 不定
由M(整個數(shù)字的長度,包括小數(shù)點,小數(shù)點左邊的位數(shù),小數(shù)點右邊的位數(shù),但不包括負(fù)號)和
D(小數(shù)點右邊的位數(shù))來決定,M缺省為10,D缺省為0
DATE 3 bytes
1000-01-01 - 9999-12-31
DATETIME 8 bytes
1000-01-01 00:00:00 - 9999-12-31 23:59:59
TIMESTAMP 4 bytes
1970-01-01 00:00:00 - 2037-12-31 23:59:59
TIME 3 bytes
-838:59:59' to 838:59:59
YEAR[(2|4)] 1 byte
缺省為4位格式,4位格式取值范圍為1901 - 2155,0000,2位格式取值范圍為70-69(1970-2069)
CHAR(M) [BINARY] 或 NCHAR(M) [BINARY] M bytes
M的范圍為1 - 255,如果沒有BINARY項,則不分大小寫,NCHAR表示使用缺省的字符集.在數(shù)據(jù)庫 中以空格補足,但在取出來時末尾的空格將被去掉.
[NATIONAL] VARCHAR(M) [BINARY]
Before 5.0.3 M的范圍為0?255 L+1 bytes L<=M
5.0.3 以及以后 M 范圍為 0-65535
L+1 bytes L<=M 0<=M<=256
L+2 bytes L<=M 256<=65535
在數(shù)據(jù)庫中末尾的空格將自動去掉.
TINYBLOB 或 TINYTEXT L+1 bytes
255(2^8-1)個字符
BLOB 或 TEXT L+2 bytes
65535(2^16-1)個字符
MEDIUMBLOB 或 MEDIUMTEXT L+3 bytes
16777215 (2^24-1)個字符
LONGBLOB 或 LONGTEXT L+4 bytes
4294967295 (2^32-1)個字符
ENUM('value1','value2',...) 1 or 2 bytes
可以總共有65535個不同的值
SET('value1','value2',...) 1/2/3/4/8 bytes
最多有64個成員
2.9. 查詢
2.9.1. limit
LIMIT子句可以用來限制由SELECT語句返回過來的數(shù)據(jù)數(shù)量,它有一個或兩個參數(shù),如果給出兩個參數(shù),
第一個參數(shù)指定返回的第一行在所有數(shù)據(jù)中的位置,從0開始(注意不是1),第二個參數(shù)指定最多返回行
數(shù)。例如:
select * from table LIMIT 5,10; #返回第6-15行數(shù)據(jù)
select * from table LIMIT 5; #返回前5行
select * from table LIMIT 0,5; #返回前5行
2.9.2. join 詳解
還是先 Create table 吧

create table emp(
id int not null primary key,
name varchar(10)
);

create table emp_dept(
dept_id varchar(4) not null,
emp_id int not null,
emp_name varchar(10),
primary key (dept_id,emp_id));

insert into emp() values
(1,"Dennis-1"),
(2,"Dennis-2"),
(3,"Dennis-3"),
(4,"Dennis-4"),
(5,"Dennis-5"),
(6,"Dennis-6"),
(7,"Dennis-7"),
(8,"Dennis-8"),
(9,"Dennis-9"),
(10,"Dennis-10");

insert into emp_dept() values
("R&D",1,"Dennis-1"),
("DEv",2,"Dennis-2"),
("R&D",3,"Dennis-3"),
("Test",4,"Dennis-4"),
("Test",5,"Dennis-5");
("dddd",20,"eeee");
>> left join
-------------
select a.id,a.name,b.dept_id
from emp a left join emp_dept b on (a.id=b.emp_id);

# 挑出左邊的 table emp 中的所有資料,即使 emp_dept 中沒有的資料也挑出來,沒有的就用 NULL 來顯示,
# 也即顯示資料是以左邊的 table emp 中的資料為基礎(chǔ)

mysql> select a.id,a.name,b.dept_id
-> from emp a left join emp_dept b on (a.id=b.emp_id);
+----+-----------+---------+
| id | name | dept_id |
+----+-----------+---------+
| 1 | Dennis-1 | R&D |
| 2 | Dennis-2 | DEv |
| 3 | Dennis-3 | R&D |
| 4 | Dennis-4 | Test |
| 5 | Dennis-5 | Test |
| 6 | Dennis-6 | NULL |
| 7 | Dennis-7 | NULL |
| 8 | Dennis-8 | NULL |
| 9 | Dennis-9 | NULL |
| 10 | Dennis-10 | NULL |
+----+-----------+---------+
# 挑出 table emp 中有而 table emp_dept 中沒有的人員資料
select a.id,a.name,b.dept_id
from emp a left join emp_dept b on (a.id=b.emp_id)
where b.dept_id IS NULL;

mysql> select a.id,a.name,b.dept_id
-> from emp a left join emp_dept b on (a.id=b.emp_id)
-> where b.dept_id IS NULL;
+----+-----------+---------+
| id | name | dept_id |
+----+-----------+---------+
| 6 | Dennis-6 | NULL |
| 7 | Dennis-7 | NULL |
| 8 | Dennis-8 | NULL |
| 9 | Dennis-9 | NULL |
| 10 | Dennis-10 | NULL |
+----+-----------+---------+

# 把 table emp_dept 放在左邊的情形(當(dāng)然以 emp_dept 中的數(shù)據(jù)為基礎(chǔ)來顯示資料,emp 中比emp_dept 中多的資料也就不會顯示出來了):
select a.id,a.name,b.dept_id
from emp_dept b left join emp a on (a.id=b.emp_id);
mysql> select a.id,a.name,b.dept_id
-> from emp_dept b left join emp a on (a.id=b.emp_id);
+------+----------+---------+
| id | name | dept_id |
+------+----------+---------+
| NULL | NULL | dddd |
| 2 | Dennis-2 | DEv |
| 1 | Dennis-1 | R&D |
| 3 | Dennis-3 | R&D |
| 4 | Dennis-4 | Test |
| 5 | Dennis-5 | Test |
+------+----------+---------+
>> right join
---------------
select a.id,a.name,b.dept_id
from emp a right join emp_dept b on (a.id=b.emp_id);
# 挑資料時以右邊 table emp_dept 中的資料為基礎(chǔ)來顯示資料
mysql> select a.id,a.name,b.dept_id
-> from emp a right join emp_dept b on (a.id=b.emp_id);
+------+----------+---------+
| id | name | dept_id |
+------+----------+---------+
| NULL | NULL | dddd |
| 2 | Dennis-2 | DEv |
| 1 | Dennis-1 | R&D |
| 3 | Dennis-3 | R&D |
| 4 | Dennis-4 | Test |
| 5 | Dennis-5 | Test |
+------+----------+---------+
6 rows in set (0.00 sec)
# 我們再把 table 的位置交換一下,再用 right join 試試

select a.id,a.name,b.dept_id
from emp_dept b right join emp a on (a.id=b.emp_id);

mysql> select a.id,a.name,b.dept_id
-> from emp_dept b right join emp a on (a.id=b.emp_id);
+----+-----------+---------+
| id | name | dept_id |
+----+-----------+---------+
| 1 | Dennis-1 | R&D |
| 2 | Dennis-2 | DEv |
| 3 | Dennis-3 | R&D |
| 4 | Dennis-4 | Test |
| 5 | Dennis-5 | Test |
| 6 | Dennis-6 | NULL |
| 7 | Dennis-7 | NULL |
| 8 | Dennis-8 | NULL |
| 9 | Dennis-9 | NULL |
| 10 | Dennis-10 | NULL |
+----+-----------+---------+
# 是不是和 left join 一樣了?
>> inner join STRAIGHT_JOIN
select a.id,a.name,b.dept_id
from emp a ,emp_dept b
where a.id=b.emp_id;

mysql> select a.id,a.name,b.dept_id
-> from emp a ,emp_dept b
-> where a.id=b.emp_id;
+----+----------+---------+
| id | name | dept_id |
+----+----------+---------+
| 2 | Dennis-2 | DEv |
| 1 | Dennis-1 | R&D |
| 3 | Dennis-3 | R&D |
| 4 | Dennis-4 | Test |
| 5 | Dennis-5 | Test |
+----+----------+---------+
2.9.3. 別名 alias
你可以在GROUP BY、ORDER BY或在HAVING部分中使用別名引用列。別名也可以用來為列取一個更好點的名字:
SELECT SQRT(a*b) as rt FROM table_name GROUP BY rt HAVING rt > 0;
SELECT id,COUNT(*) AS cnt FROM table_name GROUP BY id HAVING cnt > 0;
SELECT id AS "Customer identity" FROM table_name;
注意,你的 ANSI SQL 不允許你在一個WHERE子句中引用一個別名。這是因為在WHERE代碼被執(zhí)行時,列值還可能沒有終結(jié)。例如下列查詢是不合法:
SELECT id,COUNT(*) AS cnt FROM table_name WHERE cnt > 0 GROUP BY id;
WHERE語句被執(zhí)行以確定哪些行應(yīng)該包括GROUP BY部分中,而HAVING用來決定應(yīng)該只用結(jié)果集合中的哪些行。
2.9.4. 正則
正則表達(dá)式(regex)是定義復(fù)雜查詢的一個強有力的工具。
這里是一個簡單的資料,它忽略了一些詳細(xì)的信息。
正則表達(dá)式定義了一個字符串的規(guī)則。最簡單的正則表達(dá)式不包含任何保留字。例如,

正則表達(dá)式hello只和字符串“hello”匹配。
一般的正則表達(dá)式使用了某些特殊的結(jié)構(gòu),所以它能匹配更多的字符串。例如,正則
表達(dá)式hello|word既能匹配字符串“hello”也能匹配字符串“word”。
舉一個更復(fù)雜一點的例子,正則表達(dá)式B[an]*s可以匹配字符串“Bananas”、“Baaaaa
s”
、“Bs”以及其他任何以B開頭以s結(jié)尾的字符串,中間可以包括任意個a和任意個n的組
合。
一個正則表達(dá)式中的可以使用以下保留字
^
所匹配的字符串以后面的字符串開頭
mysql> select "fonfo" REGEXP "^fo$"; -> 0(表示不匹配)
mysql> select "fofo" REGEXP "^fo"; -> 1(表示匹配)
$
所匹配的字符串以前面的字符串結(jié)尾
mysql> select "fono" REGEXP "^fono$"; -> 1(表示匹配)
mysql> select "fono" REGEXP "^fo$"; -> 0(表示不匹配)
..
匹配任何字符(包括新行)
mysql> select "fofo" REGEXP "^f.*"; -> 1(表示匹配)
mysql> select "fonfo" REGEXP "^f.*"; -> 1(表示匹配)
a*
匹配任意0-n多個a(包括空串)
mysql> select "Ban" REGEXP "^Ba*n"; -> 1(表示匹配)
mysql> select "Baaan" REGEXP "^Ba*n"; -> 1(表示匹配)
mysql> select "Bn" REGEXP "^Ba*n"; -> 1(表示匹配)
a+
匹配任意1-n多個a(不包括空串)
mysql> select "Ban" REGEXP "^Ba+n"; -> 1(表示匹配)
mysql> select "Bn" REGEXP "^Ba+n"; -> 0(表示不匹配)
a?
匹配0-1個a
mysql> select "Bn" REGEXP "^Ba?n"; -> 1(表示匹配)
mysql> select "Ban" REGEXP "^Ba?n"; -> 1(表示匹配)
mysql> select "Baan" REGEXP "^Ba?n"; -> 0(表示不匹配)
de|abc
匹配de或abc
mysql> select "pi" REGEXP "pi|apa"; -> 1(表示匹配)
mysql> select "axe" REGEXP "pi|apa"; -> 0(表示不匹配)
mysql> select "apa" REGEXP "pi|apa"; -> 1(表示匹配)
mysql> select "apa" REGEXP "^(pi|apa)$"; -> 1(表示匹配)
mysql> select "pi" REGEXP "^(pi|apa)$"; -> 1(表示匹配)
mysql> select "pix" REGEXP "^(pi|apa)$"; -> 0(表示不匹配)
(abc)*
匹配任意多個(0-n個)abc(包括空串)
mysql> select "pi" REGEXP "^(pi)*$"; -> 1(表示匹配)
mysql> select "pip" REGEXP "^(pi)*$"; -> 0(表示不匹配)
mysql> select "pipi" REGEXP "^(pi)*$"; -> 1(表示匹配)
{1}
{2,3}
這是一個更全面的方法,它可以實現(xiàn)前面好幾種保留字的功能
a*
可以寫成a{0,}
a+
可以寫成a{1,}
a?
可以寫成a{0,1}
在{}內(nèi)只有一個整型參數(shù)i,表示字符只能出現(xiàn)i次;在{}內(nèi)有一個整型參數(shù)i,
后面跟一個“,”,表示字符可以出現(xiàn)i次或i次以上;在{}內(nèi)只有一個整型參數(shù)i,
后面跟一個“,”,再跟一個整型參數(shù)j,表示字符只能出現(xiàn)i次以上,j次以下
(包括i次和j次)。其中的整型參數(shù)必須大于等于0,小于等于 RE_DUP_MAX(默認(rèn)是25
5)。
如果有兩個參數(shù),第二個必須大于等于第一個
[a-dX]
匹配“a”、“b”、“c”、“d”或“X”
[^a-dX]
匹配除“a”、“b”、“c”、“d”、“X”以外的任何字符。
“[”、“]”必須成對使用
mysql> select "aXbc" REGEXP "[a-dXYZ]"; -> 1(表示匹配)
mysql> select "aXbc" REGEXP "^[a-dXYZ]$"; -> 0(表示不匹配)
mysql> select "aXbc" REGEXP "^[a-dXYZ]+$"; -> 1(表示匹配)
mysql> select "aXbc" REGEXP "^[^a-dXYZ]+$"; -> 0(表示不匹配)
mysql> select "gheis" REGEXP "^[^a-dXYZ]+$"; -> 1(表示匹配)
mysql> select "gheisa" REGEXP "^[^a-dXYZ]+$"; -> 0(表示不匹配)
------------------------------------------------------------
[[.characters.]]
表示比較元素的順序。在括號內(nèi)的字符順序是唯一的。但是括號中可以包含通配符,
所以他能匹配更多的字符。舉例來說:正則表達(dá)式[[.ch.]]*c匹配chchcc的前五個字符

[=character_class=]
表示相等的類,可以代替類中其他相等的元素,包括它自己。例如,如果o和(+)是
一個相等的類的成員,那么[[=o=]]、[[=(+)=]]和[o(+)]是完全等價的。
[:character_class:]
在括號里面,在[:和:]中間是字符類的名字,可以代表屬于這個類的所有字符。
字符類的名字有: alnum、digit、punct、alpha、graph、space、blank、lower、uppe
r、cntrl、print和xdigit
mysql> select "justalnums" REGEXP "[[:alnum:]]+"; -> 1(表示匹配)
mysql> select "!!" REGEXP "[[:alnum:]]+"; -> 0(表示不匹配)
[[:<:>
[[:>:]]
分別匹配一個單詞開頭和結(jié)尾的空的字符串,這個單詞開頭和結(jié)尾都不是包含在alnum中
的字符也不能是下劃線。
mysql> select "a word a" REGEXP "[[:<:>:]]"; -> 1(表示匹配)
mysql> select "a xword a" REGEXP "[[:<:>:]]"; -> 0(表示不匹配)
mysql> select "weeknights" REGEXP "^(wee|week)(knights|nights)$"; -> 1(表示
匹配)
2.9.5. Select 中使用 IF Statement
mysql> select * from test;
+------+------+------+-------+
| dept | id | sex | name |
+------+------+------+-------+
| 1 | 1 | 0 | wang |
| 2 | 2 | 1 | zhang |
| 3 | 3 | 0 | li |
+------+------+------+-------+
3 rows in set (0.00 sec)
mysql> select dept,id,if(sex=0,'女','男') sex,name from test;
+------+------+-----+-------+
| dept | id | sex | name |
+------+------+-----+-------+
| 1 | 1 | 女 | wang |
| 2 | 2 | 男 | zhang |
| 3 | 3 | 女 | li |
+------+------+-----+-------+
3 rows in set (0.00 sec)
2.9.6. Select中使用CASE Statement
mysql> select dept,id,(case sex when '0' then '女' else '男' end) as sex,name from test;
+------+------+------+-------+
| dept | id | sex | name |
+------+------+------+-------+
| 1 | 1 | 女 | wang |
| 2 | 2 | 男 | zhang |
| 3 | 3 | 女 | li |
+------+------+------+-------+
mysql> select (case dept when '1' then 'no1' when '2' then 'no2' else 'other' end) as dept from test;
+-------+
| dept |
+-------+
| no1 |
| no2 |
| other |
+-------+
3 rows in set (0.00 sec)
注意: 相當(dāng)于Oracle 中的decode 和case when
在統(tǒng)計報表中很有用處

2.10. 存儲過程和函數(shù)
CREATE PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body

CREATE FUNCTION sp_name ([func_parameter[,...]])
RETURNS type
[characteristic ...] routine_body

proc_parameter:
[ IN | OUT | INOUT ] param_name type

func_parameter:
param_name type

type:
Any valid MySQL data type

characteristic:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'

routine_body:
Valid SQL procedure statement or statements

例子:創(chuàng)建一個過程hello,顯示問候語
mysql> delimiter ;
mysql> drop PROCEDURE if exists hello;
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter //
mysql>
mysql> CREATE PROCEDURE hello (IN s varchar(20))
-> BEGIN
-> SELECT CONCAT('Hello,',s,'!') as hello;
-> END;
-> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> call hello('wangyl');
+---------------+
| hello |
+---------------+
| Hello,wangyl! |
+---------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)
例子2: 查詢t表的記錄總數(shù)
mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)
-> BEGIN
-> SELECT COUNT(*) INTO param1 FROM t;
-> END
-> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> CALL simpleproc(@a);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @a;
+------+
| @a |
+------+
| 3 |
+------+
1 row in set (0.00 sec)

例子:創(chuàng)建一個函數(shù)
mysql> delimiter ;
mysql> drop FUNCTION if exists dateFunction;
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter //
mysql> CREATE FUNCTION dateFunction (iCase int)
-> RETURNS varchar(50)
-> begin
-> DECLARE iType int;
-> DECLARE sReturn varchar(50);
-> set iType =icase +1;
-> case iType
-> when 1 then select DATE_FORMAT(NOW(),'%Y-%m-%d') into sReturn;
-> when 2 then select DATE_FORMAT(NOW(),'%W %M %Y') into sReturn;
-> else
-> select NOW() into sReturn;
-> end case;
-> return sReturn;
-> end;
-> //
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> select dateFunction(0);
+-----------------+
| dateFunction(0) |
+-----------------+
| 2005-11-14 |
+-----------------+
1 row in set (0.00 sec)

mysql> select dateFunction(1);
+----------------------+
| dateFunction(1) |
+----------------------+
| Monday November 2005 |
+----------------------+
1 row in set (0.00 sec)

mysql> select dateFunction(2);
+---------------------+
| dateFunction(2) |
+---------------------+
| 2005-11-14 15:05:43 |
+---------------------+
1 row in set (0.00 sec)

2.11. 補充:trigger
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
CREATE TABLE test1(a1 INT);
CREATE TABLE test2(a2 INT);
CREATE TABLE test3(a3 INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
CREATE TABLE test4(
a4 INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
b4 INT DEFAULT 0
);

DELIMITER |

CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END|

DELIMITER ;

INSERT INTO test3 (a3) VALUES
(NULL), (NULL), (NULL), (NULL), (NULL),
(NULL), (NULL), (NULL), (NULL), (NULL);

INSERT INTO test4 (a4) VALUES
(0), (0), (0), (0), (0), (0), (0), (0), (0), (0);

If you insert the following values into table test1 as shown here:

mysql> INSERT INTO test1 VALUES
-> (1), (3), (1), (7), (1), (8), (4), (4);
Query OK, 8 rows affected (0.01 sec)
Records: 8 Duplicates: 0 Warnings: 0

Then the data in the four tables will be as follows:

mysql> SELECT * FROM test1;
+------+
| a1 |
+------+
| 1 |
| 3 |
| 1 |
| 7 |
| 1 |
| 8 |
| 4 |
| 4 |
+------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM test2;
+------+
| a2 |
+------+
| 1 |
| 3 |
| 1 |
| 7 |
| 1 |
| 8 |
| 4 |
| 4 |
+------+
8 rows in set (0.00 sec)

mysql> SELECT * FROM test3;
+----+
| a3 |
+----+
| 2 |
| 5 |
| 6 |
| 9 |
| 10 |
+----+
5 rows in set (0.00 sec)

mysql> SELECT * FROM test4;
+----+------+
| a4 | b4 |
+----+------+
| 1 | 3 |
| 2 | 0 |
| 3 | 1 |
| 4 | 2 |
| 5 | 0 |
| 6 | 0 |
| 7 | 1 |
| 8 | 1 |
| 9 | 0 |
| 10 | 0 |
+----+------+
10 rows in set (0.00 sec)

2.12. 刪除 DELETE Syntax
Single-table syntax:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]
Multiple-table syntax:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*]] ...
FROM table_references
[WHERE where_condition]
Or:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
FROM tbl_name[.*] [, tbl_name[.*]] ...
USING table_references
[WHERE where_condition]
對于刪除多個表,不能使用order by 和limit
多表刪除語法一: ,只是在刪除 在from 前面的表所中匹配的記錄
DELETE t1, t2 FROM t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;
從t1,t2,t3 表選出要刪除的記錄,只是刪除t1,t2 表中所匹配得這些記錄.
多表刪除語法二: 在from 列出的表中刪除選中的記錄.
DELETE FROM t1, t2 USING t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;
從t1,t2,t3 表選出要刪除的記錄(使用using ),只是刪除t1,t2 表中所匹配得這些記錄.

注意: 如果您使用一個別名,您必須使用別名.

DELETE t1 FROM test AS t1, test2 WHERE ...

支持多個數(shù)據(jù)之間的多表刪除,但是在這種情況下,你必須指定表,而不能使用別名:

DELETE test1.tmp1, test2.tmp2 FROM test1.tmp1, test2.tmp2 WHERE ...
當(dāng)前,您不能從相同表的子查詢中,刪除同一表的數(shù)據(jù)


拋出異常的愛 1 星期前
1016錯誤:文件無法打開,使用后臺修復(fù)或者使用phpmyadmin進(jìn)行修復(fù)。
1044錯誤:數(shù)據(jù)庫用戶權(quán)限不足,請聯(lián)系空間商解決
1045錯誤:數(shù)據(jù)庫服務(wù)器/數(shù)據(jù)庫用戶名/數(shù)據(jù)庫名/數(shù)據(jù)庫密碼錯誤,請聯(lián)系空間商檢查帳戶。
1054錯誤:程序文件跟數(shù)據(jù)庫有沖突,請使用正確的程序 文件上傳 上去覆蓋。
1146錯誤:數(shù)據(jù)表缺失,請恢復(fù)備份數(shù)據(jù).
1005:創(chuàng)建表失敗
1006:創(chuàng)建數(shù)據(jù)庫失敗
1007:數(shù)據(jù)庫已存在,創(chuàng)建數(shù)據(jù)庫失敗
1008:數(shù)據(jù)庫不存在,刪除數(shù)據(jù)庫失敗
1009:不能刪除數(shù)據(jù)庫文件導(dǎo)致刪除數(shù)據(jù)庫失敗
1010:不能刪除數(shù)據(jù)目錄導(dǎo)致刪除數(shù)據(jù)庫失敗
1011:刪除數(shù)據(jù)庫文件失敗
1012:不能讀取系統(tǒng)表中的記錄
1020:記錄已被其他用戶修改
1021:硬盤剩余空間不足,請加大硬盤可用空間
1022:關(guān)鍵字重復(fù),更改記錄失敗
1023:關(guān)閉時發(fā)生錯誤
1024:讀文件錯誤
1025:更改名字時發(fā)生錯誤
1026:寫文件錯誤
1032:記錄不存在
1036:數(shù)據(jù)表是只讀的,不能對它進(jìn)行修改
1037:系統(tǒng)內(nèi)存不足,請重啟數(shù)據(jù)庫或重啟服務(wù)器
1038:用于排序的內(nèi)存不足,請增大排序緩沖區(qū)
1040:已到達(dá)數(shù)據(jù)庫的最大連接數(shù),請加大數(shù)據(jù)庫可用連接數(shù)
1041:系統(tǒng)內(nèi)存不足
1042:無效的主機名
1043:無效連接
1044:當(dāng)前用戶沒有訪問數(shù)據(jù)庫的權(quán)限
1045:不能連接數(shù)據(jù)庫,用戶名或密碼錯誤
1048:字段不能為空
1049:數(shù)據(jù)庫不存在
1050:數(shù)據(jù)表已存在
1051:數(shù)據(jù)表不存在
1054:字段不存在
1065:無效的SQL語句,SQL語句為空
1081:不能建立Socket連接
1114:數(shù)據(jù)表已滿,不能容納任何記錄
1116:打開的數(shù)據(jù)表太多
1129:數(shù)據(jù)庫出現(xiàn)異常,請重啟數(shù)據(jù)庫
1130:連接數(shù)據(jù)庫失敗,沒有連接數(shù)據(jù)庫的權(quán)限
1133:數(shù)據(jù)庫用戶不存在
1141:當(dāng)前用戶無權(quán)訪問數(shù)據(jù)庫
1142:當(dāng)前用戶無權(quán)訪問數(shù)據(jù)表
1143:當(dāng)前用戶無權(quán)訪問數(shù)據(jù)表中的字段
1146:數(shù)據(jù)表不存在
1147:未定義用戶對數(shù)據(jù)表的訪問權(quán)限
1149:SQL語句語法錯誤
1158:網(wǎng)絡(luò)錯誤,出現(xiàn)讀錯誤,請檢查網(wǎng)絡(luò)連接狀況
1159:網(wǎng)絡(luò)錯誤,讀超時,請檢查網(wǎng)絡(luò)連接狀況
1160:網(wǎng)絡(luò)錯誤,出現(xiàn)寫錯誤,請檢查網(wǎng)絡(luò)連接狀況
1161:網(wǎng)絡(luò)錯誤,寫超時,請檢查網(wǎng)絡(luò)連接狀況
1062:字段值重復(fù),入庫失敗
1169:字段值重復(fù),更新記錄失敗
1177:打開數(shù)據(jù)表失敗
1180:提交事務(wù)失敗
1181:回滾事務(wù)失敗
1203:當(dāng)前用戶和數(shù)據(jù)庫建立的連接已到達(dá)數(shù)據(jù)庫的最大連接數(shù),請增大可用的數(shù)據(jù)庫連接數(shù)或重啟數(shù)據(jù)庫
1205:加鎖超時
1211:當(dāng)前用戶沒有創(chuàng)建用戶的權(quán)限
1216:外鍵約束檢查失敗,更新子表記錄失敗
1217:外鍵約束檢查失敗,刪除或修改主表記錄失敗
1226:當(dāng)前用戶使用的資源已超過所允許的資源,請重啟數(shù)據(jù)庫或重啟服務(wù)器
1227:權(quán)限不足,您無權(quán)進(jìn)行此操作
1235:MySQL版本過低,不具有本功能
2002:Can't connect to ...通常意味著沒有一個MySQL服務(wù)器運行在系統(tǒng)上或當(dāng)試圖連接mysqld服務(wù)器時,你正在使用一個錯誤的套接字文件或TCP/IP端口。

說明:以上只是常見錯誤號,并且解決辦法也不一定肯定管用!具體請參考MYSQL手冊(各大下載站均有下載)

更多詳細(xì)錯誤代碼
錯誤名稱 / 錯誤代碼 SQL狀態(tài)
ER_HASHCHK 1000 HY000
ER_NISAMCHK 1001 HY000
ER_NO 1002 HY000
ER_YES 1003 HY000
ER_CANT_CREATE_FILE 1004 HY000
ER_CANT_CREATE_TABLE 1005 HY000
ER_CANT_CREATE_DB 1006 HY000
ER_DB_CREATE_EXISTS 1007 HY000
ER_DB_DROP_EXISTS 1008 HY000
ER_DB_DROP_DELETE 1009 HY000
ER_DB_DROP_RMDIR 1010 HY000
ER_CANT_DELETE_FILE 1011 HY000
ER_CANT_FIND_SYSTEM_REC 1012 HY000
ER_CANT_GET_STAT 1013 HY000
ER_CANT_GET_WD 1014 HY000
ER_CANT_LOCK 1015 HY000
ER_CANT_OPEN_FILE 1016 HY000
ER_FILE_NOT_FOUND 1017 HY000
ER_CANT_READ_DIR 1018 HY000
ER_CANT_SET_WD 1019 HY000
ER_CHECKREAD 1020 HY000
ER_DISK_FULL 1021 HY000
ER_DUP_KEY 1022 23000
ER_ERROR_ON_CLOSE 1023 HY000
ER_ERROR_ON_READ 1024 HY000
ER_ERROR_ON_RENAME 1025 HY000
ER_ERROR_ON_WRITE 1026 HY000
ER_FILE_USED 1027 HY000
ER_FILSORT_ABORT 1028 HY000
ER_FORM_NOT_FOUND 1029 HY000
ER_GET_ERRNO 1030 HY000
ER_ILLEGAL_HA 1031 HY000
ER_KEY_NOT_FOUND 1032 HY000
ER_NOT_FORM_FILE 1033 HY000
ER_NOT_KEYFILE 1034 HY000
ER_OLD_KEYFILE 1035 HY000
ER_OPEN_AS_READONLY 1036 HY000
ER_OUTOFMEMORY 1037 HY001
ER_OUT_OF_SORTMEMORY 1038 HY001
ER_UNEXPECTED_EOF 1039 HY000
ER_CON_COUNT_ERROR 1040 08004
ER_OUT_OF_RESOURCES 1041 08004
ER_BAD_HOST_ERROR 1042 08S01
ER_HANDSHAKE_ERROR 1043 08S01
ER_DBACCESS_DENIED_ERROR 1044 42000
ER_ACCESS_DENIED_ERROR 1045 42000
ER_NO_DB_ERROR 1046 42000
ER_UNKNOWN_COM_ERROR 1047 08S01
ER_BAD_NULL_ERROR 1048 23000
ER_BAD_DB_ERROR 1049 42000
ER_TABLE_EXISTS_ERROR 1050 42S01
ER_BAD_TABLE_ERROR 1051 42S02
ER_NON_UNIQ_ERROR 1052 23000
ER_SERVER_SHUTDOWN 1053 08S01
ER_BAD_FIELD_ERROR 1054 42S22
ER_WRONG_FIELD_WITH_GROUP 1055 42000
ER_WRONG_GROUP_FIELD 1056 42000
ER_WRONG_SUM_SELECT 1057 42000
ER_WRONG_VALUE_COUNT 1058 21S01
ER_TOO_LONG_IDENT 1059 42000
ER_DUP_FIELDNAME 1060 42S21
ER_DUP_KEYNAME 1061 42000
ER_DUP_ENTRY 1062 23000
ER_WRONG_FIELD_SPEC 1063 42000
ER_PARSE_ERROR 1064 42000
ER_EMPTY_QUERY 1065 42000
ER_NONUNIQ_TABLE 1066 42000
ER_INVALID_DEFAULT 1067 42000
ER_MULTIPLE_PRI_KEY 1068 42000
ER_TOO_MANY_KEYS 1069 42000
ER_TOO_MANY_KEY_PARTS 1070 42000
ER_TOO_LONG_KEY 1071 42000
ER_KEY_COLUMN_DOES_NOT_EXITS 1072 42000
ER_BLOB_USED_AS_KEY 1073 42000
ER_TOO_BIG_FIELDLENGTH 1074 42000
ER_WRONG_AUTO_KEY 1075 42000
ER_READY 1076 00000
ER_NORMAL_SHUTDOWN 1077 00000
ER_GOT_SIGNAL 1078 00000
ER_SHUTDOWN_COMPLETE 1079 00000
ER_FORCING_CLOSE 1080 08S01
ER_IPSOCK_ERROR 1081 08S01
ER_NO_SUCH_INDEX 1082 42S12
ER_WRONG_FIELD_TERMINATORS 1083 42000
ER_BLOBS_AND_NO_TERMINATED 1084 42000
ER_TEXTFILE_NOT_READABLE 1085 HY000
ER_FILE_EXISTS_ERROR 1086 HY000
ER_LOAD_INFO 1087 HY000
ER_ALTER_INFO 1088 HY000
ER_WRONG_SUB_KEY 1089 HY000
ER_CANT_REMOVE_ALL_FIELDS 1090 42000
ER_CANT_DROP_FIELD_OR_KEY 1091 42000
ER_INSERT_INFO 1092 HY000
ER_UPDATE_TABLE_USED 1093 HY000
ER_NO_SUCH_THREAD 1094 HY000
ER_KILL_DENIED_ERROR 1095 HY000
ER_NO_TABLES_USED 1096 HY000
ER_TOO_BIG_SET 1097 HY000
ER_NO_UNIQUE_LOGFILE 1098 HY000
ER_TABLE_NOT_LOCKED_FOR_WRITE 1099 HY000
ER_TABLE_NOT_LOCKED 1100 HY000
ER_BLOB_CANT_HAVE_DEFAULT 1101 42000
ER_WRONG_DB_NAME 1102 42000
ER_WRONG_TABLE_NAME 1103 42000
ER_TOO_BIG_SELECT 1104 42000
ER_UNKNOWN_ERROR 1105 HY000
ER_UNKNOWN_PROCEDURE 1106 42000
ER_WRONG_PARAMCOUNT_TO_PROCEDURE 1107 42000
ER_WRONG_PARAMETERS_TO_PROCEDURE 1108 HY000
ER_UNKNOWN_TABLE 1109 42S02
ER_FIELD_SPECIFIED_TWICE 1110 42000
ER_INVALID_GROUP_FUNC_USE 1111 42000
ER_UNSUPPORTED_EXTENSION 1112 42000
ER_TABLE_MUST_HAVE_COLUMNS 1113 42000
ER_RECORD_FILE_FULL 1114 HY000
ER_UNKNOWN_CHARACTER_SET 1115 42000
ER_TOO_MANY_TABLES 1116 HY000
ER_TOO_MANY_FIELDS 1117 HY000
ER_TOO_BIG_ROWSIZE 1118 42000
ER_STACK_OVERRUN 1119 HY000
ER_WRONG_OUTER_JOIN 1120 42000
ER_NULL_COLUMN_IN_INDEX 1121 42000
ER_CANT_FIND_UDF 1122 HY000
ER_CANT_INITIALIZE_UDF 1123 HY000
ER_UDF_NO_PATHS 1124 HY000
ER_UDF_EXISTS 1125 HY000
ER_CANT_OPEN_LIBRARY 1126 HY000
ER_CANT_FIND_DL_ENTRY 1127 HY000
ER_FUNCTION_NOT_DEFINED 1128 HY000
ER_HOST_IS_BLOCKED 1129 HY000
ER_HOST_NOT_PRIVILEGED 1130 HY000
ER_PASSWORD_ANONYMOUS_USER 1131 42000
ER_PASSWORD_NOT_ALLOWED 1132 42000
ER_PASSWORD_NO_MATCH 1133 42000
ER_UPDATE_INFO 1134 HY000
ER_CANT_CREATE_THREAD 1135 HY000
ER_WRONG_VALUE_COUNT_ON_ROW 1136 21S01
ER_CANT_REOPEN_TABLE 1137 HY000
ER_INVALID_USE_OF_NULL 1138 42000
ER_REGEXP_ERROR 1139 42000
ER_MIX_OF_GROUP_FUNC_AND_FIELDS 1140 42000
ER_NONEXISTING_GRANT 1141 42000
ER_TABLEACCESS_DENIED_ERROR 1142 42000
ER_COLUMNACCESS_DENIED_ERROR 1143 42000
ER_ILLEGAL_GRANT_FOR_TABLE 1144 42000
ER_GRANT_WRONG_HOST_OR_USER 1145 42000
ER_NO_SUCH_TABLE 1146 42S02
ER_NONEXISTING_TABLE_GRANT 1147 42000
ER_NOT_ALLOWED_COMMAND 1148 42000
ER_SYNTAX_ERROR 1149 42000
ER_DELAYED_CANT_CHANGE_LOCK 1150 HY000
ER_TOO_MANY_DELAYED_THREADS 1151 HY000
ER_ABORTING_CONNECTION 1152 08S01
ER_NET_PACKET_TOO_LARGE 1153 08S01
ER_NET_READ_ERROR_FROM_PIPE 1154 08S01
ER_NET_FCNTL_ERROR 1155 08S01
ER_NET_PACKETS_OUT_OF_ORDER 1156 08S01
ER_NET_UNCOMPRESS_ERROR 1157 08S01
ER_NET_READ_ERROR 1158 08S01
ER_NET_READ_INTERRUPTED 1159 08S01
ER_NET_ERROR_ON_WRITE 1160 08S01
ER_NET_WRITE_INTERRUPTED 1161 08S01
ER_TOO_LONG_STRING 1162 42000
ER_TABLE_CANT_HANDLE_BLOB 1163 42000
ER_TABLE_CANT_HANDLE_AUTO_INCREMENT 1164 42000
ER_DELAYED_INSERT_TABLE_LOCKED 1165 HY000
ER_WRONG_COLUMN_NAME 1166 42000
ER_WRONG_KEY_COLUMN 1167 42000
ER_WRONG_MRG_TABLE 1168 HY000
ER_DUP_UNIQUE 1169 23000
ER_BLOB_KEY_WITHOUT_LENGTH 1170 42000
ER_PRIMARY_CANT_HAVE_NULL 1171 42000
ER_TOO_MANY_ROWS 1172 42000
ER_REQUIRES_PRIMARY_KEY 1173 42000
ER_NO_RAID_COMPILED 1174 HY000
ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE 1175 HY000
ER_KEY_DOES_NOT_EXITS 1176 HY000
ER_CHECK_NO_SUCH_TABLE 1177 42000
ER_CHECK_NOT_IMPLEMENTED 1178 42000
ER_CANT_DO_THIS_DURING_AN_TRANSACTION 1179 25000
ER_ERROR_DURING_COMMIT 1180 HY000
ER_ERROR_DURING_ROLLBACK 1181 HY000
ER_ERROR_DURING_FLUSH_LOGS 1182 HY000
ER_ERROR_DURING_CHECKPOINT 1183 HY000
ER_NEW_ABORTING_CONNECTION 1184 08S01
ER_DUMP_NOT_IMPLEMENTED 1185 HY000
ER_FLUSH_MASTER_BINLOG_CLOSED 1186 HY000
ER_INDEX_REBUILD 1187 HY000
ER_MASTER 1188 HY000
ER_MASTER_NET_READ 1189 08S01
ER_MASTER_NET_WRITE 1190 08S01
ER_FT_MATCHING_KEY_NOT_FOUND 1191 HY000
ER_LOCK_OR_ACTIVE_TRANSACTION 1192 HY000
ER_UNKNOWN_SYSTEM_VARIABLE 1193 HY000
ER_CRASHED_ON_USAGE 1194 HY000
ER_CRASHED_ON_REPAIR 1195 HY000
ER_WARNING_NOT_COMPLETE_ROLLBACK 1196 HY000
ER_TRANS_CACHE_FULL 1197 HY000
ER_SLAVE_MUST_STOP 1198 HY000
ER_SLAVE_NOT_RUNNING 1199 HY000
ER_BAD_SLAVE 1200 HY000
ER_MASTER_INFO 1201 HY000
ER_SLAVE_THREAD 1202 HY000
ER_TOO_MANY_USER_CONNECTIONS 1203 42000
ER_SET_CONSTANTS_ONLY 1204 HY000
ER_LOCK_WAIT_TIMEOUT 1205 HY000
ER_LOCK_TABLE_FULL 1206 HY000
ER_READ_ONLY_TRANSACTION 1207 25000
ER_DROP_DB_WITH_READ_LOCK 1208 HY000
ER_CREATE_DB_WITH_READ_LOCK 1209 HY000
ER_WRONG_ARGUMENTS 1210 HY000
ER_NO_PERMISSION_TO_CREATE_USER 1211 42000
ER_UNION_TABLES_IN_DIFFERENT_DIR 1212 HY000
ER_LOCK_DEADLOCK 1213 40001
ER_TABLE_CANT_HANDLE_FULLTEXT 1214 HY000
ER_CANNOT_ADD_FOREIGN 1215 HY000
ER_NO_REFERENCED_ROW 1216 23000
ER_ROW_IS_REFERENCED 1217 23000
ER_CONNECT_TO_MASTER 1218 08S01
ER_QUERY_ON_MASTER 1219 HY000
ER_ERROR_WHEN_EXECUTING_COMMAND 1220 HY000
ER_WRONG_USAGE 1221 HY000
ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1222 21000
ER_CANT_UPDATE_WITH_READLOCK 1223 HY000
ER_MIXING_NOT_ALLOWED 1224 HY000
ER_DUP_ARGUMENT 1225 HY000
ER_USER_LIMIT_REACHED 1226 42000
ER_SPECIFIC_ACCESS_DENIED_ERROR 1227 HY000
ER_LOCAL_VARIABLE 1228 HY000
ER_GLOBAL_VARIABLE 1229 HY000
ER_NO_DEFAULT 1230 42000
ER_WRONG_VALUE_FOR_VAR 1231 42000
ER_WRONG_TYPE_FOR_VAR 1232 42000
ER_VAR_CANT_BE_READ 1233 HY000
ER_CANT_USE_OPTION_HERE 1234 42000
ER_NOT_SUPPORTED_YET 1235 42000
ER_MASTER_FATAL_ERROR_READING_BINLOG 1236 HY000
ER_WRONG_FK_DEF 1237 42000
ER_KEY_REF_DO_NOT_MATCH_TABLE_REF 1238 HY000
ER_CARDINALITY_COL 1239 21000
ER_SUBSELECT_NO_1_ROW 1240 21000
ER_UNKNOWN_STMT_HANDLER 1241 HY000
ER_CORRUPT_HELP_DB 1242 HY000
ER_CYCLIC_REFERENCE 1243 HY000
ER_AUTO_CONVERT 1244 HY000
ER_ILLEGAL_REFERENCE 1245 42S22
ER_DERIVED_MUST_HAVE_ALIAS 1246 42000
ER_SELECT_REDUCED 1247 01000
ER_TABLENAME_NOT_ALLOWED_HERE 1248 42000
ER_NOT_SUPPORTED_AUTH_MODE 1249 08004
ER_SPATIAL_CANT_HAVE_NULL 1250 42000
ER_COLLATION_CHARSET_MISMATCH 1251 42000
ER_SLAVE_WAS_RUNNING 1252 HY000
ER_SLAVE_WAS_NOT_RUNNING 1253 HY000
ER_TOO_BIG_FOR_UNCOMPRESS 1254 HY000
ER_ZLIB_Z_MEM_ERROR 1255 HY000
ER_ZLIB_Z_BUF_ERROR 1256 HY000
ER_ZLIB_Z_DATA_ERROR 1257 HY000
ER_CUT_VALUE_GROUP_CONCAT 1258 HY000
ER_WARN_TOO_FEW_RECORDS 1259 01000
ER_WARN_TOO_MANY_RECORDS 1260 01000
ER_WARN_NULL_TO_NOTNULL 1261 01000
ER_WARN_DATA_OUT_OF_RANGE 1262 01000
ER_WARN_DATA_TRUNCATED 1263 01000
ER_WARN_USING_OTHER_HANDLER 1264 01000
ER_CANT_AGGREGATE_COLLATIONS 1265 42000
ER_DROP_USER 1266 42000
ER_REVOKE_GRANTS 1267 42000


拋出異常的愛 1 星期前
MySQL 備份和恢復(fù)
<script language="javascript" type="text" src="misc/cr.js" /></script>

作/譯者:葉金榮(Email: ),來源:http://imysql.cn,轉(zhuǎn)載請注明作/譯者和出處,并且不能用于商業(yè)用途,違者必究。

日期:2006/10/01

本文討論 MySQL 的備份和恢復(fù)機制,以及如何維護(hù)數(shù)據(jù)表,包括最主要的兩種表類型:MyISAM 和 Innodb,文中設(shè)計的 MySQL 版本為 5.0.22。

目前 MySQL 支持的免費備份工具有:mysqldump、mysqlhotcopy,還可以用 SQL 語法進(jìn)行備份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者備份二進(jìn)制日志(binlog),還可以是直接拷貝數(shù)據(jù)文件和相關(guān)的配置文件。MyISAM 表是保存成文件的形式,因此相對比較容易備份,上面提到的幾種方法都可以使用。Innodb 所有的表都保存在同一個數(shù)據(jù)文件 ibdata1 中(也可能是多個文件,或者是獨立的表空間文件),相對來說比較不好備份,免費的方案可以是拷貝數(shù)據(jù)文件、備份 binlog,或者用 mysqldump。
1、mysqldump
1.1 備份

mysqldump 是采用SQL級別的備份機制,它將數(shù)據(jù)表導(dǎo)成 SQL 腳本文件,在不同的 MySQL 版本之間升級時相對比較合適,這也是最常用的備份方法。
現(xiàn)在來講一下 mysqldump 的一些主要參數(shù):

* --compatible=name

它告訴 mysqldump,導(dǎo)出的數(shù)據(jù)將和哪種數(shù)據(jù)庫或哪個舊版本的 MySQL 服務(wù)器相兼容。值可以為 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用幾個值,用逗號將它們隔開。當(dāng)然了,它并不保證能完全兼容,而是盡量兼容。
* --complete-insert,-c

導(dǎo)出的數(shù)據(jù)采用包含字段名的完整 INSERT 方式,也就是把所有的值都寫在一行。這么做能提高插入效率,但是可能會受到 max_allowed_packet 參數(shù)的影響而導(dǎo)致插入失敗。因此,需要謹(jǐn)慎使用該參數(shù),至少我不推薦。
* --default-character-set=charset

指定導(dǎo)出數(shù)據(jù)時采用何種字符集,如果數(shù)據(jù)表不是采用默認(rèn)的 latin1 字符集的話,那么導(dǎo)出時必須指定該選項,否則再次導(dǎo)入數(shù)據(jù)后將產(chǎn)生亂碼問題。
* --disable-keys

告訴 mysqldump 在 INSERT 語句的開頭和結(jié)尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 語句,這能大大提高插入語句的速度,因為它是在插入完所有數(shù)據(jù)后才重建索引的。該選項只適合 MyISAM 表。
* --extended-insert = true|false

默認(rèn)情況下,mysqldump 開啟 --complete-insert 模式,因此不想用它的的話,就使用本選項,設(shè)定它的值為 false 即可。
* --hex-blob

使用十六進(jìn)制格式導(dǎo)出二進(jìn)制字符串字段。如果有二進(jìn)制數(shù)據(jù)就必須使用本選項。影響到的字段類型有 BINARY、VARBINARY、BLOB。
* --lock-all-tables,-x

在開始導(dǎo)出之前,提交請求鎖定所有數(shù)據(jù)庫中的所有表,以保證數(shù)據(jù)的一致性。這是一個全局讀鎖,并且自動關(guān)閉 --single-transaction 和 --lock-tables 選項。
* --lock-tables

它和 --lock-all-tables 類似,不過是鎖定當(dāng)前導(dǎo)出的數(shù)據(jù)表,而不是一下子鎖定全部庫下的表。本選項只適用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 選項。
* --no-create-info,-t

只導(dǎo)出數(shù)據(jù),而不添加 CREATE TABLE 語句。
* --no-data,-d

不導(dǎo)出任何數(shù)據(jù),只導(dǎo)出數(shù)據(jù)庫表結(jié)構(gòu)。
* --opt

這只是一個快捷選項,等同于同時添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 選項。本選項能讓 mysqldump 很快的導(dǎo)出數(shù)據(jù),并且導(dǎo)出的數(shù)據(jù)能很快導(dǎo)回。該選項默認(rèn)開啟,但可以用 --skip-opt 禁用。注意,如果運行 mysqldump 沒有指定 --quick 或 --opt 選項,則會將整個結(jié)果集放在內(nèi)存中。如果導(dǎo)出大數(shù)據(jù)庫的話可能會出現(xiàn)問題。
* --quick,-q

該選項在導(dǎo)出大表時很有用,它強制 mysqldump 從服務(wù)器查詢?nèi)〉糜涗浿苯虞敵龆皇侨〉盟杏涗浐髮⑺鼈兙彺娴絻?nèi)存中。
* --routines,-R

導(dǎo)出存儲過程以及自定義函數(shù)。
* --single-transaction

該選項在導(dǎo)出數(shù)據(jù)之前提交一個 BEGIN SQL語句,BEGIN 不會阻塞任何應(yīng)用程序且能保證導(dǎo)出時數(shù)據(jù)庫的一致性狀態(tài)。它只適用于事務(wù)表,例如 InnoDB 和 BDB。
本選項和 --lock-tables 選項是互斥的,因為 LOCK TABLES 會使任何掛起的事務(wù)隱含提交。
要想導(dǎo)出大表的話,應(yīng)結(jié)合使用 --quick 選項。
* --triggers

同時導(dǎo)出觸發(fā)器。該選項默認(rèn)啟用,用 --skip-triggers 禁用它。

其他參數(shù)詳情請參考手冊,我通常使用以下 SQL 來備份 MyISAM 表:

/usr/local/mysql/bin/mysqldump -uyejr -pyejr \
--default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob -x db_name > db_name.sql

使用以下 SQL 來備份 Innodb 表:

/usr/local/mysql/bin/mysqldump -uyejr -pyejr \
--default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob --single-transaction db_name > db_name.sql

另外,如果想要實現(xiàn)在線備份,還可以使用 --master-data 參數(shù)來實現(xiàn),如下:

/usr/local/mysql/bin/mysqldump -uyejr -pyejr \
--default-character-set=utf8 --opt --master-data=1 \
--single-transaction --flush-logs db_name > db_name.sql

它只是在一開始的瞬間請求鎖表,然后就刷新binlog了,而后在導(dǎo)出的文件中加入CHANGE MASTER 語句來指定當(dāng)前備份的binlog位置,如果要把這個文件恢復(fù)到slave里去,就可以采用這種方法來做。
1.2 還原

用 mysqldump 備份出來的文件是一個可以直接倒入的 SQL 腳本,有兩種方法可以將數(shù)據(jù)導(dǎo)入。

* 直接用 mysql 客戶端

例如:

/usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql


* 用 SOURCE 語法

其實這不是標(biāo)準(zhǔn)的 SQL 語法,而是 mysql 客戶端提供的功能,例如:

SOURCE /tmp/db_name.sql;

這里需要指定文件的絕對路徑,并且必須是 mysqld 運行用戶(例如 nobody)有權(quán)限讀取的文件。

2、 mysqlhotcopy
2.1 備份

mysqlhotcopy 是一個 PERL 程序,最初由Tim Bunce編寫。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 來快速備份數(shù)據(jù)庫。它是備份數(shù)據(jù)庫或單個表的最快的途徑,但它只能運行在數(shù)據(jù)庫文件(包括數(shù)據(jù)表定義文件、數(shù)據(jù)文件、索引文件)所在的機器上。mysqlhotcopy 只能用于備份 MyISAM,并且只能運行在 類Unix 和 NetWare 系統(tǒng)上。

mysqlhotcopy 支持一次性拷貝多個數(shù)據(jù)庫,同時還支持正則表達(dá)。以下是幾個例子:

root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \
db_name /tmp (把數(shù)據(jù)庫目錄 db_name 拷貝到 /tmp 下)
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \
db_name_1 ... db_name_n /tmp
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr \
db_name./regex/ /tmp

更詳細(xì)的使用方法請查看手冊,或者調(diào)用下面的命令來查看 mysqlhotcopy 的幫助:

perldoc /usr/local/mysql/bin/mysqlhotcopy

注意,想要使用 mysqlhotcopy,必須要有 SELECT、RELOAD(要執(zhí)行 FLUSH TABLES) 權(quán)限,并且還必須要能夠有讀取 datadir/db_name 目錄的權(quán)限。
2.2 還原

mysqlhotcopy 備份出來的是整個數(shù)據(jù)庫目錄,使用時可以直接拷貝到 mysqld 指定的 datadir (在這里是 /usr/local/mysql/data/)目錄下即可,同時要注意權(quán)限的問題,如下例:

root#cp -rf db_name /usr/local/mysql/data/
root#chown -R nobody:nobody /usr/local/mysql/data/ (將 db_name 目錄的屬主改成 mysqld 運行用戶)


3、 SQL 語法備份
3.1 備份

BACKUP TABLE 語法其實和 mysqlhotcopy 的工作原理差不多,都是鎖表,然后拷貝數(shù)據(jù)文件。它能實現(xiàn)在線備份,但是效果不理想,因此不推薦使用。它只拷貝表結(jié)構(gòu)文件和數(shù)據(jù)文件,不同時拷貝索引文件,因此恢復(fù)時比較慢。
例子:

BACK TABLE tbl_name TO '/tmp/db_name/';

注意,必須要有 FILE 權(quán)限才能執(zhí)行本SQL,并且目錄 /tmp/db_name/ 必須能被 mysqld 用戶可寫,導(dǎo)出的文件不能覆蓋已經(jīng)存在的文件,以避免安全問題。

SELECT INTO OUTFILE 則是把數(shù)據(jù)導(dǎo)出來成為普通的文本文件,可以自定義字段間隔的方式,方便處理這些數(shù)據(jù)。
例子:

SELECT * INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name;

注意,必須要有 FILE 權(quán)限才能執(zhí)行本SQL,并且文件 /tmp/db_name/tbl_name.txt 必須能被 mysqld 用戶可寫,導(dǎo)出的文件不能覆蓋已經(jīng)存在的文件,以避免安全問題。
3.2 恢復(fù)

用 BACKUP TABLE 方法備份出來的文件,可以運行 RESTORE TABLE 語句來恢復(fù)數(shù)據(jù)表。
例子:

RESTORE TABLE FROM '/tmp/db_name/';

權(quán)限要求類似上面所述。

用 SELECT INTO OUTFILE 方法備份出來的文件,可以運行 LOAD DATA INFILE 語句來恢復(fù)數(shù)據(jù)表。
例子:

LOAD DATA INFILE '/tmp/db_name/tbl_name.txt' INTO TABLE tbl_name;

權(quán)限要求類似上面所述。倒入數(shù)據(jù)之前,數(shù)據(jù)表要已經(jīng)存在才行。如果擔(dān)心數(shù)據(jù)會發(fā)生重復(fù),可以增加 REPLACE 關(guān)鍵字來替換已有記錄或者用 IGNORE 關(guān)鍵字來忽略他們。
4、 啟用二進(jìn)制日志(binlog)

采用 binlog 的方法相對來說更靈活,省心省力,而且還可以支持增量備份。

啟用 binlog 時必須要重啟 mysqld。首先,關(guān)閉 mysqld,打開 my.cnf,加入以下幾行:

server-id = 1
log-bin = binlog
log-bin-index = binlog.index

然后啟動 mysqld 就可以了。運行過程中會產(chǎn)生 binlog.000001 以及 binlog.index,前面的文件是 mysqld 記錄所有對數(shù)據(jù)的更新操作,后面的文件則是所有 binlog 的索引,都不能輕易刪除。關(guān)于 binlog 的信息請查看手冊。

需要備份時,可以先執(zhí)行一下 SQL 語句,讓 mysqld 終止對當(dāng)前 binlog 的寫入,就可以把文件直接備份,這樣的話就能達(dá)到增量備份的目的了:

FLUSH LOGS;

如果是備份復(fù)制系統(tǒng)中的從服務(wù)器,還應(yīng)該備份 master.info 和 relay-log.info 文件。

備份出來的 binlog 文件可以用 MySQL 提供的工具 mysqlbinlog 來查看,如:

/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001

該工具允許你顯示指定的數(shù)據(jù)庫下的所有 SQL 語句,并且還可以限定時間范圍,相當(dāng)?shù)姆奖悖敿?xì)的請查看手冊。

恢復(fù)時,可以采用類似以下語句來做到:

/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001 | mysql -uyejr -pyejr db_name

把 mysqlbinlog 輸出的 SQL 語句直接作為輸入來執(zhí)行它。

如果你有空閑的機器,不妨采用這種方式來備份。由于作為 slave 的機器性能要求相對不是那么高,因此成本低,用低成本就能實現(xiàn)增量備份而且還能分擔(dān)一部分?jǐn)?shù)據(jù)查詢壓力,何樂而不為呢?
5、 直接備份數(shù)據(jù)文件

相較前幾種方法,備份數(shù)據(jù)文件最為直接、快速、方便,缺點是基本上不能實現(xiàn)增量備份。為了保證數(shù)據(jù)的一致性,需要在靠背文件前,執(zhí)行以下 SQL 語句:

FLUSH TABLES WITH READ LOCK;

也就是把內(nèi)存中的數(shù)據(jù)都刷新到磁盤中,同時鎖定數(shù)據(jù)表,以保證拷貝過程中不會有新的數(shù)據(jù)寫入。這種方法備份出來的數(shù)據(jù)恢復(fù)也很簡單,直接拷貝回原來的數(shù)據(jù)庫目錄下即可。

注意,對于 Innodb 類型表來說,還需要備份其日志文件,即 ib_logfile* 文件。因為當(dāng) Innodb 表損壞時,就可以依靠這些日志文件來恢復(fù)。
6、 備份策略

對于中等級別業(yè)務(wù)量的系統(tǒng)來說,備份策略可以這么定:第一次全量備份,每天一次增量備份,每周再做一次全量備份,如此一直重復(fù)。而對于重要的且繁忙的系統(tǒng)來說,則可能需要每天一次全量備份,每小時一次增量備份,甚至更頻繁。為了不影響線上業(yè)務(wù),實現(xiàn)在線備份,并且能增量備份,最好的辦法就是采用主從復(fù)制機制(replication),在 slave 機器上做備份。
7、 數(shù)據(jù)維護(hù)和災(zāi)難恢復(fù)

作為一名DBA(我目前還不是,呵呵),最重要的工作內(nèi)容之一是保證數(shù)據(jù)表能安全、穩(wěn)定、高速使用。因此,需要定期維護(hù)你的數(shù)據(jù)表。以下 SQL 語句就很有用:

CHECK TABLE 或 REPAIR TABLE,檢查或維護(hù) MyISAM 表
OPTIMIZE TABLE,優(yōu)化 MyISAM 表
ANALYZE TABLE,分析 MyISAM 表

當(dāng)然了,上面這些命令起始都可以通過工具 myisamchk 來完成,在這里不作詳述。

Innodb 表則可以通過執(zhí)行以下語句來整理碎片,提高索引速度:

ALTER TABLE tbl_name ENGINE = Innodb;

這其實是一個 NULL 操作,表面上看什么也不做,實際上重新整理碎片了。

通常使用的 MyISAM 表可以用上面提到的恢復(fù)方法來完成。如果是索引壞了,可以用 myisamchk 工具來重建索引。而對于 Innodb 表來說,就沒這么直接了,因為它把所有的表都保存在一個表空間了。不過 Innodb 有一個檢查機制叫 模糊檢查點,只要保存了日志文件,就能根據(jù)日志文件來修復(fù)錯誤。可以在 my.cnf 文件中,增加以下參數(shù),讓 mysqld 在啟動時自動檢查日志文件:

innodb_force_recovery = 4

關(guān)于該參數(shù)的信息請查看手冊。
8、 總結(jié)

做好數(shù)據(jù)備份,定只好合適的備份策略,這是一個DBA所做事情的一小部分,萬事開頭難,就從現(xiàn)在開始吧!

mysql命令大全


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日韩一区精品视频在线看 | 亚洲精品一区二区中文 | 久久精品综合免费观看 | 国产香蕉在线观看 | 久久综合中文字幕一区二区 | 97久久久久 | 国内久久精品视频 | 成 人 a v免费视频 | 午夜精品在线免费观看 | 国产操穴| 免费女人18毛片a级毛片视频 | 亚洲精品www久久久久久 | 日本 欧美 国产 | 日韩精品一区二区在线观看 | 久久这里只有精品2 | 97视频资源站| 久久国内精品视频 | 好看的一级毛片 | 久热操| 亚洲 国产 路线1路线2路线 | 国产性tv国产精品 | 日日操狠狠操 | 中文字幕在线一区二区三区 | 在线欧美日韩 | 你懂的91 | 成人免费视频视频在线观看 免费 | 久久精品免看国产 | 精品国产第一国产综合精品 | 老司机午夜免费影院 | 美国一级毛片免费看成人 | 日本人hdxxxxvideo | 成人毛片免费在线观看 | 国产线路一 | 久久久久国产精品免费免费 | 欧美成人在线视频 | 日韩射吧 | 国产一级毛片外aaaa | 国产97公开成人免费视频 | 久久久久久穴 | 国产一区二区三区久久精品小说 | 久久久久国产 |