阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

shell 环境下MySQL的基本操作指令总结

131次阅读
没有评论

共计 6982 个字符,预计需要花费 18 分钟才能阅读完成。

一、对数据库的基本操作 
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 相关存放目录

二、对表的基本操作
show tables // 列出所有表

创建一个名为 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 行数据了)

eg:

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

drop table tab_name   // 删除名为 tab_name 的数据表 
describe tab_name     // 显示名为 tab_name 的表的数据结构 
show columns from tab_name   // 同上 
delete from tab_name;    // 删除表所有数据,不会重置自增的 ID
TRUNCATE TABLE `db_name`.`tab_name`;    // 截断表重置自增的 id 为 0
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

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

INSERT INTO 表名称 VALUES (值 1, 值 2,….)

(1)INSERT INTO table_name (列 1, 列 2,…) VALUES (值 1, 值 2,….)

例如:INSERT INTO `mydb`.`mytable` (`id`,`name`) VALUES (‘1′,’aa’);

(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 字段更新到对应的唯一主键对应的记录中。

SHOW TABLE STATUS WHERE Name = ‘table_name’;    // 查看表的详细信息:

三、修改表结构
ALTER TABLE tab_name ADD PRIMARY KEY (col_name);                      // 设置主键
col_name ALTER TABLE tab_name DROP PRIMARY KEY (col_name);   // 删除主键
Alter table tab_name add col_name varchar(20);   // 新增字段
alter table tab_name drop col_name;                    // 删除字段

alter table tab_name modify col_name varchar(40) not null;   // 修改字段属性, 若加上 not null 则要求原字段下没有数据  
alter table tab_name rename to new_tab_name;      // 修改表名
alter table tab_name change old_col new_col varchar(40);     // 修改字段名, 必须为当前字段指定数据类型等属性,否则不能修改 
create table new_tab_name like old_tab_name;     // 用一个已存在的表来建新表,但不包含旧表的数据

ALTER TABLE `db_name`.`tab_name` ADD INDEX `index_name` (`col_name`);   // 新增索引

ALTER TABLE `db_name`.`tab_name` ADD INDEX `index_name` (`id`, `name`);  // 新增组合索引

CREATE  TABLE  table1  LIKE  table2;     // 创建表 table1 复制表 table2 的结果

INSERT  INTO  table1  SELECT  *  FROM  table2;        // 往表 table1 插入表 table2 的数据

CREATE TABLE newadmin AS (SELECT username, password FROM admin);      // 创建一个表复制另一个表的一些字段

四、用户与用户权限管理

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’;

FLUSH PRIVILEGES;

五、数据的备份与恢复

1. 导出整个数据库(shell 下使用)

mysqldump -u 用户名 -p 数据库名 > 导出的文件名

mysqldump -u root -p db_name > test.sql

2. 导出一个表(shell 下使用)

       mysqldump -uUSER -pPASSWORD –no-data DATABASE TABLE > table.sql     // 导出表结构

mysqldump -u 用户名 -p 数据库名 表名 > 导出的文件名     // 导出表结构和数据

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

3. 导出一个数据库结构(shell 下使用)

mysqldump -u root -p -d –add-drop-table db_name > test.sql

-d 没有数据 –add-drop-table 在每个 create 语句之前增加一个 drop table

4. 导入数据库(mysql 控制台)

mysql>use 数据库

mysql>source /home/pt/test.sql

六、分区操作

查看分区: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; – 显示安装后的可用存储引擎和默认引擎。

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:系统元数据(字段名等) 字符集

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/148540.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计6982字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中