目录
MySQL可方便的通过客户端工具或命令行进行操作:
Drop Database If Exists 'n1'
Create Database 'n1'
Drop Table If Exists n1.t1
Create Table n1.t1( ... )
复制表结构
mysql中可通过create table as 和create table like来复制表结构:
- create table t2 as select * from t1 [where 1=2 或 limit 0];
as创建出来的新表(t2)缺少源表(t1)的索引信息,只有表结构相似(如bigint可能会变成int),没有索引。
注意:这个语句其实只是把select语句的结果建一个表。因此,可以复制表(全部内容或选定的内容)
- create table t2 like t1;
like 创建出来的新表包含源表的完整表结构和索引信息。
完整复制表
真正的完整复制一个表:
CREATE TABLE newT LIKE oriT;
INSERT INTO newT SELECT * FROM oriT;
-- 也可以跨数据库操作:
CREATE TABLE newDB.newT LIKE oriDB.oriT;
部分复制表
部分复制(修改)一个表:
-- 拷贝一个表中其中的一些字段。
CREATE TABLE newT AS
(
SELECT username, password FROM oriT
);
-- 修改字段名
CREATE TABLE newT AS
(
SELECT id, username AS uname, password AS pass FROM oriT
);
-- 拷贝一部分数据。
CREATE TABLE newT AS
(
SELECT * FROM oriT WHERE username like 's%'
)
数据库导入导出
使用mysqldump命令(在cmd命令行中执行),可方便导出数据库文件
1)导出所有数据库
mysqldump -u{user} -p -A > c:\out.sql
2)导出数据和表结构
mysqldump -u{user} -p {db_name} > c:\out.sql
将数据库 mydb 导出到 c:\out.sql 文件中。
c:\> mysqldump -h localhost -u root -p mydb >c:\out.sql
将数据库 mydb 中的 mytable 导出到 c:\out.sql 文件中。
c:\> mysqldump -h localhost -u root -p mydb mytable>c:\out.sql
将数据库 mydb 的表结构导出到 c:\out.sql 文件中。
c:\> mysqldump -h localhost -u root -p mydb -d --add-drop-table >c:\out.sql
-
-d 只到表结构(没有数据)
-
--add-drop-table 在每个create语句之前增加一个drop table
外部文件导入数据库中
1)使用“source”命令(在mysql中)
mysql>source c:\out.sql
2)使用“<”符号(在cmd命令行中)
c:\> mysql -u root –p < c:\out.sql
mysql命令行
通过mysql命令行,可方便地登录数据库,做各种数据库操作。
登录:mysql -h <ip> -u<user> -p<pass> -P 3306
如:mysql -h 192.168.1.100 -u root -p -P 3306
执行-e后面sql语句,并把结果保存到文件
mysql -uroot -p -e "use mysql; show tables;" > c:\out.txt
进入命令行后(mysql>)后,就可使用sql语句进行各种操作(创建、删除表)与查询了,除常规Sql操作语句(创建、修改、删除、查询等)外,还有:
-
show databases; 显示所有数据库名
-
show tables; 显示所有表名
-
show create table table_name; 显示完整的表创建命令
-
show full columns from table_name; 显示列详细信息(包括权限)
-
show table status; 显示表的状态
-
show full processlist; 当前所有连接的详细情况(没有full,只显示前100个连接)
-
use <db_name>; 切换当前数据库
-
describe <table_name>; 显示列的详细信息(列名、类型、是否空、键、默认值等)
-
select version();
-
select database(); 显示当前数据库名
-
SELECT CURRENT_DATE; 显示‘年-月-日’
-
select now();或select current_timestamp(); 显示‘年-月-日 时分秒’
-
quit或\q:退出
-
show status like '%<var>%'; 查看状态,var如下:
-
Aborted_clients 由于客户没有正确关闭连接已经死掉,已经放弃的连接数量。
-
Aborted_connects 尝试已经失败的MySQL服务器的连接的次数。
-
Connections 试图连接MySQL服务器的次数。
-
Created_tmp_tables 当执行语句时,已经被创造了的隐含临时表的数量。
-
Delayed_insert_threads 正在使用的延迟插入处理器线程的数量。
-
Delayed_writes 用INSERT DELAYED写入的行数。
-
Delayed_errors 用INSERT DELAYED写入的发生某些错误(可能重复键值)的行数。
-
Flush_commands 执行FLUSH命令的次数。
-
Handler_delete 请求从一张表中删除行的次数。
-
Handler_read_first 请求读入表中第一行的次数。
-
Handler_read_key 请求数字基于键读行。
-
Handler_read_next 请求读入基于一个键的一行的次数。
-
Handler_read_rnd 请求读入基于一个固定位置的一行的次数。
-
Handler_update 请求更新表中一行的次数。
-
Handler_write 请求向表中插入一行的次数。
-
Key_blocks_used 用于关键字缓存的块的数量。
-
Key_read_requests 请求从缓存读入一个键值的次数。
-
Key_reads 从磁盘物理读入一个键值的次数。
-
Key_write_requests 请求将一个关键字块写入缓存次数。
-
Key_writes 将一个键值块物理写入磁盘的次数。
-
Max_used_connections 同时使用的连接的最大数目。
-
Not_flushed_key_blocks 在键缓存中已经改变但是还没被清空到磁盘上的键块。
-
Not_flushed_delayed_rows 在INSERT DELAY队列中等待写入的行的数量。
-
Open_tables 打开表的数量。
-
Open_files 打开文件的数量。
-
Open_streams 打开流的数量(主要用于日志记载)
-
Opened_tables 已经打开的表的数量。
-
Questions 发往服务器的查询的数量。
-
Slow_queries 要花超过long_query_time时间的查询数量。
-
Threads_connected 当前打开的连接的数量。
-
Threads_running 不在睡眠的线程数量。
-
Uptime 服务器工作了多少秒。
-
SELECT...INTO OUTFILE可以非常快速地把一个表转储到服务器上,语句将表的内容导出为一个‘目标文件’(创建到服务器主机上,因此必须拥有文件写入权限;同时,“目标文件”不能是一个已经存在的文件)
SELECT [列名] FROM table [WHERE 语句] INTO OUTFILE '目标文件' [OPTION];
“OPTION”参数为可选参数选项,其可能的取值有:
-
FIELDS TERMINATED BY '分隔符':设置字段之间的分隔符,可以为单个或多个字符。默认值是“\t”。
-
FIELDS ENCLOSED BY '字符':设置括住字段的符号,只能为单个字符。默认不使用任何符号。
-
FIELDS OPTIONALLY ENCLOSED BY '字符':设置括住CHAR、VARCHAR和TEXT等字符型字段的值。默认情况下不使用任何符号。
-
FIELDS ESCAPED BY '字符':设置转义字符,只能为单个字符。默认值为“\”。
-
LINES STARTING BY '字符串':设置每行数据开头的字符,可以为单个或多个字符。默认情况下不使用任何字符。
-
LINES TERMINATED BY '字符串':设置每行数据结尾的字符,可以为单个或多个字符。默认值是“\n”。
-
FIELDS和LINES两个子句都是自选的,但是如果两个子句都被指定了,FIELDS必须位于LINES的前面。
select * into outfile 'out.txt' fields terminated by ',' lines terminated by '\n' starting by '\t' from my_table;