1. 程式人生 > >shell 環境下MySQL的基本操作指令總結

shell 環境下MySQL的基本操作指令總結

必須 font bdb variables 是否 能夠 process format arch

一、對數據庫的基本操作
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 [email protected]%‘ IDENTIFIED BY ‘Back123end‘; //用戶名backend,密碼Back123end

FLUSH PRIVILEGES;

grant select,update,insert,delete,create,index,show databases on *.* to [email protected]%‘; //第一個 * 符號代表所有數據庫,第二個 * 符號代表所有數據表,backend表示數據庫用戶名。%符號代表所有主機

GRANT CREATE, INSERT,SELECT,SHOWDATABASES,INDEX,ALTER,UPDATE ON `db_backend`.* TO [email protected]%‘; //給任何主機上的backend用戶賦予db_backend數據庫所有表的對應權限。

方法二:直接創建並賦予權限:

Grant all privileges on *.* to [email protected]%‘ identified by ‘123456‘ with grant option;

2、查看mysql用戶權限

方法一:直接查詢mysql數據庫的user表;

方法二: show grants for 你的用戶; 或者 show grants for [email protected];

3、移除一個用戶的權限

revoke insert,update,delete,alter,select ON *.* from [email protected] IDENTIFIED BY ‘123‘;

revoke alter on *.* from [email protected]%’;

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; -- 顯示create database 語句是否能夠創建指定的數據庫。
13. show engines; -- 顯示安裝以後可用的存儲引擎和默認引擎。
14. show innodb status; -- 顯示innoDB存儲引擎的狀態。
15. show logs; -- 顯示BDB存儲引擎的日誌。
16. show warnings; -- 顯示最後一個執行的語句所產生的錯誤、警告和通知。
17. show errors; -- 只顯示最後一個執行語句所產生的錯誤。
18. show [storage] engines; --顯示安裝後的可用存儲引擎和默認引擎。

2.語句技巧

(1)查詢時將時間戳格式化顯示:

SELECT FROM_UNIXTIME(1234567890, ‘%Y-%m-%d %H:%i:%S‘) FROM table_name

(2)最高效的刪除重復記錄方法 ( 因為使用了ROWID)例子:

DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID) FROM EMP X WHERE X.EMP_NO = E.EMP_NO);

(3)列轉行技巧:

SELECT COUNT(CASE WHEN id=1 THEN 1 ELSE NULL END ) AS `one_num`,COUNT(CASE WHEN id=2 THEN 1 ELSE NULL END ) AS `two_num`,COUNT(CASE WHEN id=3 THEN 1 ELSE NULL END ) AS `tree_num` FROM test;

//統計id為1的記錄數,id為2的記錄數以及id為3的記錄數。

表數據:

技術分享

執行該語句的結果:

技術分享

shell 環境下MySQL的基本操作指令總結