目录
复制表结构
完整复制表
部分复制表
数据库导入导出
外部文件导入数据库中
mysql命令行
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;