一、对数据库的基本操作 
show databases;                      //列出数据库
use database_name;               //使用database_name数据库
create database data_name;   //创建名为data_name的数据库
drop database data_name;     //删除一个名为data_name的数据库
use dbname; status                 //查看数据库dbname的详细信息

alter database db_name character set  utf8;  //修改数据库编码

show variables like '%dir%';    // 查看mysql相关存放目录

mysql -uroot -proot -e "select * from test.item;"   #在系统中使用mysql命令执行sql语句

二、对表的基本操作

1、列出所有表

show tables;

2、查看表的详细信息:

show table status where name = 'table_name';

3、优化表格,将已删除的数据的空间释放出来(delete操作删除数据后,空间并没有释放,而是等待新数据去填充),仅对MyISAM, BDB和InnoDB引擎表起作用。语句执行过程中,MySQL会锁定表。

optimize table  table_name;

4、查询某个数据库某个表的字段信息

select * from information_schema.columns where TABLE_SCHEMA='数据库' and TABLE_NAME='表名'

5、查询data_base.20171112_login的所有字段名

select COLUMN_NAME from information_schema.columns where table_schema='data_base' and table_name='20171112_login'

6、创建一个名为tab_name的新表

create table tab_name(
id int(10) not null auto_increment primary key,
name varchar(40),
pwd varchar(40)
) charset=gb2312; eg: CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

//id自增的时候从7开始(表示前面已经有6行数据了)

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1

7、删除名为tab_name的数据表

drop table tab_name

8、显示名为tab_name的表的数据结构 
describe tab_name

show columns from tab_name

9、删除表所有数据,不会重置自增的ID

delete from tab_name;    
truncate table  `db_name`.`tab_name`;    //截断表重置自增的id为0

10、插入与更新表内容

(1)插入

insert into table_name (列1, 列2,...) values (值1, 值2,....)

insert into report.user_live (date,pid,osid,level) values ('2017-07-26','3','0','2')

insert into 表名称 values (值1, 值2,....)

insert into report.user_live  values ('2017-07-26','3','0','2')

insert into table_name (列1, 列2,...) values (值1, 值2,....) on duplicate key update field=values(field);    //field是字段名称,如果插入是,主键已经重复,则更新给出字段。

例如:insert into report.user_live (date,pid,osid,level) values('2017-07-26','3','0','2') on duplicate key update level = values(level);

插入这行数字时,主键是(date,pid,osid)复合主键,并且该主键的数据已经存在且唯一,此时出入多一行数据,则键非主键level字段更新到对应的唯一主键对应的记录中。

往表table1插入表table2的数据,前提是两个表结构一致,或者要插入的字段一致

insert  into  table1  select  *  from table2;

(2)更新
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

例如:UPDATE `mydb`.`mytable` SET `myname` = 'xst' WHERE `id` = '3';

以下实例将更新 id 为 3 的 content 字段值的 "C++" 替换为 "Python":

update db.table set content=replace(content, 'C++', 'Python') where id='3';

三、修改表结构

修改表名
alter table tab_name rename to new_tab_name;

重命名数据表

RENAME TABLE `test`.`mytest` TO `test`.`mytest_back`;

修改字段名,必须为当前字段指定数据类型等属性,否则不能修改 
alter table tab_name change old_col new_col varchar(40);

 用一个已存在的表来建新表,但不包含旧表的数据
create table new_tab_name like old_tab_name;

创建表table1复制表table2的结果

create  table  table1  like  table2;

新增字段
alter table tab_name add col_name varchar(20);

删除字段
alter table tab_name drop col_name;

修改字段属性,若加上not null则要求原字段下没有数据       

alter table tab_name modify col_name varchar(40) not null;

新增索引

ALTER TABLE `db_name`.`tab_name` ADD INDEX `index_name` (`col_name`);

新增组合索引

ALTER TABLE `db_name`.`tab_name` ADD INDEX `index_name` (`id`, `name`);

设置主键

alter table tab_name add primary key (col_name);

删除主键
alter TABLE tab_name drop primary key (col_name);

创建一个表复制另一个表的一些字段

create table newadmin as ( select username, password from admin );

修改数据库默认字符集

ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];

修改表的默认字符集

ALTER TABLE tab_name DEFAULT CHARACTER SET character_name [COLLATE...];

例如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

修改字段的字符集

ALTER TABLE tab_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];

例如:ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;

把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集

ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]

例如:ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

四、用户与用户权限管理

1、赋予用户权限

方法一:先创建用户再赋予权限:

USE `mysql`;

CREATE USER 'backend'@'%' IDENTIFIED BY 'Back123end'; //用户名backend,密码Back123end

FLUSH PRIVILEGES;

grant select,update,insert,delete,create,index,show databases on *.* to 'backend'@'%';  //第一个 * 符号代表所有数据库,第二个 * 符号代表所有数据表,backend表示数据库用户名。%符号代表所有主机

GRANT CREATE, INSERT,SELECT,SHOWDATABASES,INDEX,ALTER,UPDATE ON `db_backend`.* TO 'backend’@'%';    //给任何主机上的backend用户赋予db_backend数据库所有表的对应权限。

方法二:直接创建并赋予权限:

Grant all privileges on *.*  to  'backend'@'%' identified by '123456' with grant option;

2、查看mysql用户权限

方法一:直接查询mysql数据库的user表;

方法二: show grants for 你的用户;  或者  show grants for root@'localhost';

3、移除一个用户的权限

revoke insert,update,delete,alter,select ON *.* from 'xbb'@'localhost' IDENTIFIED BY '123';

revoke alter on *.*  from ‘backend’@’%’;

4、删除用户

drop user username;

5、更改mysql数据库root用户密码

UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE user='root';

在之前的版本中,密码字段的字段名是 password,5.7版本改为了 authentication_string,所以修改语句如下:

update mysql.user set authentication_string = password('test123'), password_expired = 'N', password_last_changed = now() where user = 'root';

update mysql.user set plugin="mysql_native_password" where user='root';     //该字段默认为 "auth_socket",不用密码就能登录该用户

FLUSH PRIVILEGES;

五、数据的备份与恢复

1.导出

  shell:

  mysqldump -u root -p dbname > test.sql    #导出整个数据库,包括结构和数据

mysqldump -u root -pXXXXXX --no-data dbname  tablename > table.sql     //导出表结构

  mysqldump -u root -p dbname  tablename > test.sql      //导出表结构和数据

  mysqldump -u root -p -d –add-drop-table db_name > test.sql   #导出数据库结构,-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table

  mysql -h 127.0.0.1 -P 3306 -uroot -pXXXXXX -D dbname -e "select * from table" > /tmp/test.xls
  mysql --default-character-set=utf8 -uroot -pXXXXXX -e "select * from db.table" > /tmp/test.txt
  mysql --default-character-set=utf8 -uroot -pXXXXXX -e "select * from db.table into outfile '/tmp/test.csv' fields terminated by ',' enclosed by '\"' escaped by '\\\' lines terminated by '\n';"

  mysql客户端:

  show variables like '%secure%'; #查询数据库配置的导出目录权限是否开启,若开启则使用secure_file_priv设置的目录(如果使用其他目录会报权限问题)
  select * from db.table into outfile '/tmp/file.txt'; #导出的文件类型可为.xls,.csv,.txt等
  select * from db.table into outfile '/tmp/file.csv' character set gbk;
  select * from db.table into outfile '/tmp/file.csv' fields terminated by ',' optionally enclosed by '"' lines terminated by '\n';

2.导入

  shell:

  mysql -h127.0.0.1  -uroot -pXXXXXX < /tmp/test.sql
  mysql-ib --default-character-set=utf8 -u root -pXXXXXX -e "load data infile '/tmp/test.csv' into table $db.$table character set UTF8 fields terminated by ',' enclosed by '\"' escaped by '\\\' lines terminated by '\n';"

  mysql客户端:  

  use dbname;  source /home/pt/test.sql

  load data local infile '/tmp/data.txt' into table db.table;
  load data local infile '/tmp/data.txt' into table db.table fields terminated by ',' optionally enclosed by '"' lines terminated by '\n'
  load data local infile '/tmp/data.txt' into table db.table (col1,col2); #导入某个表的col1和col2两列的数据
  load data infile '/tmp/data.txt' into table db.table ignore 1 lines; #忽略文件头部的起始标题行

 

  涉及的字段说明:
  fields terminated by ',' -- 字段以逗号分隔
  optionally enclosed by '"' -- 双引号包裹字段
  lines terminated by '\n' -- 换行符为'\n'

   其他:

  因为msyql中的文件多是utf-8的编码,这个时候我们需要把utf8的编码转化为gbk的编码(从test1.xls转到test2.xls):
  iconv -c -f utf8 -t gbk test1.xls > test2.xls

六、分区操作

查看分区:SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'table_name';

删除分区:ALTER TABLE table_name DROP PARTITION p_name;

FLUSH TABLE;

 

七、其他

1.Show 语句用法

show tables或show tables from database_name; -- 显示当前数据库中所有表的名称。 
2. show databases; -- 显示mysql中所有数据库的名称。 
3. show columns from table_name from database_name; 或show columns from database_name.table_name; -- 显示表中列名称。 
4. show grants for user_name; -- 显示一个用户的权限,显示结果类似于grant 命令。 
5. show index from table_name; -- 显示表的索引。 
6. show status; -- 显示一些系统特定资源的信息,例如,正在运行的线程数量。 
7. show variables; -- 显示系统变量的名称和值。 
8. show processlist; -- 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。 
9. show table status; -- 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。 
10. show privileges; -- 显示服务器所支持的不同权限。 
11. show create database database_name; -- 显示create database 语句是否能够创建指定的数据库。 
12. show create table table_name; -- 显示创建表的语句。 
13. show engines; -- 显示安装以后可用的存储引擎和默认引擎。 
14. show innodb status; -- 显示innoDB存储引擎的状态。 
15. show logs; -- 显示BDB存储引擎的日志。 
16. show warnings; -- 显示最后一个执行的语句所产生的错误、警告和通知。 
17. show errors; -- 只显示最后一个执行语句所产生的错误。 
18. show [storage] engines; --显示安装后的可用存储引擎和默认引擎。

19.show create database db_name;   //查看数据库编码

20.show create table tab_name;    //查看数据表编码

21.show full columns from tab_name;   //查看数据表字段编码

2.Infobright相关

将MySQL数据导出csv文件:

SELECT * FROM `20170913_login` INTO OUTFILE '/mydata/csv/20170913_login.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';

导入cs文件到Infobright中:

load data infile '/mydata/csv/20170913_login.csv' into table `login` fields terminated by ',' optionally enclosed by '"' lines terminated by '\n';

导入IB后,中文变成乱码的解决方法:

1、在IB中执行:show variables like "%char%";

mysql> show variables like "%char%";
+--------------------------+-----------------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /data/infobright-4.0.7-x86_64/share/mysql/charsets/ |
+--------------------------+-----------------------------------------------------+
8 rows in set (0.01 sec)

2、在MySQL中执行:show variables like "%char%";
mysql> show variables like "%char%";
+--------------------------+----------------------------------------------------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /data1/mysql_root/base/mysql_wrapper_5_6_28_20160902_tlinux_ts85/mysql/share/charsets/ |
+--------------------------+----------------------------------------------------------------------------------------+
8 rows in set (0.00 sec)

发现IB中的变量character_set_database和变量character_set_server的编码跟MySQL中的编码不一样;

在IB中执行:
SET character_set_database = utf8 ;
SET character_set_server = utf8 ;

系统变量:
– character_set_server:默认的内部操作字符集
– character_set_client:客户端来源数据使用的字符集
– character_set_connection:连接层字符集
– character_set_results:查询结果字符集
– character_set_database:当前选中数据库的默认字符集
– character_set_system:系统元数据(字段名等)字符集

shell 环境下MySQL的基本操作指令总结的更多相关文章

  1. [原] KVM 环境下MySQL性能对比

    KVM 环境下MySQL性能对比 标签(空格分隔): Cloud2.0 [TOC] 测试目的 对比MySQL在物理机和KVM环境下性能情况 压测标准 压测遵循单一变量原则,所有的对比都是只改变一个变量 ...

  2. windows 环境下mysql 如何修改root密码

    windows 环境下mysql 如何修改root密码 以windows为例: 无法开启服务,将mysql更目录下的data文件夹清空,然后调用 mysqld --initialize 开启mysql ...

  3. win10环境下MySql(5.7.21版本)安装过程

    windows10上安装mysql(详细步骤) 2016年09月06日 08:09:34 阅读数:60405 环境:windwos 10(1511) 64bit.mysql 5.7.14 时间:201 ...

  4. docker环境下mysql参数修改

    原文:docker环境下mysql参数修改 需要修改log_bin为on,看了好几个博客说都需要删掉容器重新生成,然而并非如此, 我们可以用docker cp 命令将docker的文件"下载 ...

  5. Linux环境下MySql安装和常见问题的解决

    MySql安装 首先当然是要连接上linux服务器咯,然后就是下面的命令甩过去,梭哈,一通运行就是啦   梭哈 下载: sudo wget http://dev.mysql.com/get/mysql ...

  6. Windows环境下Mysql 5.7读写分离之使用mysql-proxy练习篇

    本文使用mysql-proxy软件,结合mysql读写分离,实现实战练习. 前期准备: 三台机器: 代理机,IP:192.168.3.33 mysql Master,IP:192.168.3.32 m ...

  7. windowns环境下mysql 安装教程

    windowns环境下mysql 安装教程 一:这里以绿色版安装为例(解压就可以使用) 下载地址: 下载页面:https://dev.mysql.com/downloads/mysql/  2:点击 ...

  8. 【Data Cluster】真机环境下MySQL数据库集群搭建

    真机环境下MySQL-Cluster搭建文档  摘要:本年伊始阶段,由于实验室对不同数据库性能测试需求,才出现MySQL集群搭建.购置主机,交换机,双绞线等一系列准备工作就绪,也就开始集群搭建.起初笔 ...

  9. 四步法分析定位生产环境下MySQL上千条SQL中的问题所在

    第一步:通过以下两种方式之一来打开慢查询功能 (1)方式一:通过修改mysql的my.cnf文件 如果是5.0或5.1等版本需要增加以下选项: log-slow-queries="mysql ...

随机推荐

  1. JAVA关于字符串&&字符数组处理的小题目

    JAVA关于字符串&&字符数组的小题目 第二题:分析以下需求,并用代码实现 1.键盘录入一个大字符串,再录入一个小字符串 2.统计小字符串在大字符串中出现的次数 3.代码运行打印格式: ...

  2. PYTHON使用入门

    一 写在开头1.1 本文内容PYTHON语言的基础知识. 二 Q & A2.1 为什么选择PYTHON?软件质量:在很大程度上,PYTHON更注重可读性.一致性和软件质量,从而与脚本语言世界中 ...

  3. HTML(六)HTML iframe 使用postMessage方法进行跨文档消息传递

    什么是iframe HTML内联框架元素 <iframe> 表示嵌套的浏览上下文,有效地将另一个HTML页面嵌入到当前页面中. <iframe id="inlineFram ...

  4. jQuery AJAX 方法 success()后台传来的4种数据

    JAVA中的四种JSON解析方式详解 jQuery AJAX 方法 success()后台传来的4种数据 1.后台返回一个页面 js代码 /**(1)用$("#content-wrapper ...

  5. 微信获取企业token流程

    1.获取服务商Accesstoken(每10分钟企业微信会推送一次,两个小时后过期) 2.根据suitid.accesstoken.第三方企业corpid.第三方企业permanentcode,得到第 ...

  6. [再寄小读者之数学篇](2014-06-20 求极限-L'Hospital 法则的应用)

    设 $f\in C[0,+\infty)$, $a$ 为实数, 且存在有限极限 $$\bex \vlm{x}\sez{f(x)+a\int_0^x f(t)\rd t}. \eex$$ 证明; $f( ...

  7. EffectiveC++ 第2章 构造/析构/赋值运算

    我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」. Chapter 2 构造 / 析构 / 赋值 条款 05:了解C++ ...

  8. python之用unittest实现接口参数化示例

    示例中获取参数的方法有三种: 1. 从文件(txt)中读取参数 2. 从Excel中读取参数 3. 在代码中直接写参数 def login(username,password): return 'ok ...

  9. mapState

    store.js import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ ...

  10. 《剑指offer》整数中1出现的次数

    本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结: