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

來源:互聯網
上載者:User

標籤:des   更新   資料表   開始   ima   修改表   war   epo   images   

一、對資料庫的基本操作 
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 [email protected]‘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; -- 顯示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的基本操作指令總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.