標籤: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的基本操作指令總結