Mysql 知識點彙總 2018

【查詢相同數據的SQL】

-- 查相同運單號   070050310570    070050310604     070050310659
select main_waybill_no,count(*) as count from overseas_port_warning_unload_detail group by main_waybill_no having count>1;



打開了之後在此輸入 mysql -h你的IP -uroot -p該數據庫的密碼

例如:mysql -h30.158.59.78 -uroot -pabc123

mysql -htom.xicp.net -uroot -pabc123

my.ini  必須是ASCLL編碼字符

啓動初始化命令
啓動服務
登錄即可,無需配置環境變量

最後一個錯誤提示的原因是plugin的問題,首先使用命令“select user,password,plugin from user”查看一下user表裏面的plugin是不是

都是mysql_native_plugin,不是的話,修改之。

mysqld --defaults-file="E:\mysql-5.7.17-winx64\my.ini" --console --skip-grant-tables

#登錄命令
mysql -uroot -p
#查看命令
show databases;
use mysql;
#修改數據庫系統密碼
UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
或者
SET PASSWORD FOR 'root'@'localhost' = 'password';
#刷新數據庫
FLUSH PRIVILEGES;
#退出
quit
------------------------------------------------------------------------------
c:mysql\bin\>mysqld -nt --install MySQL

mysql -uroot -p

mysql.sys

mysql -umysql.sys -p

sc delete mysql  #切底刪除MYSQL服務
mysqld-nt -remove #刪除

--- mysql 服務啓動命令
#停止服務命令
net stop mysql     

#啓動服務命令
net start mysql 
#查詢版本號
mysql -version

#來賦予所有用戶遠程連接權限,終於成功了.
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION;

#查看mysql 端口號
show variables like 'port';

#cmd下mysql 格式輸出混亂
命令不要用分號結尾用\G
select * from tbname \G

#使用pager設置顯示方式,使用pager可以設置調用os的more或者less等顯示查詢結果,和在os中使用more或者less查看大文件的效果一樣
pager more
pager less
\P less
#還原成stdout
nopager
#使用tee保存運行結果到文件
 tee d:\output.txt
 或者
 \T d:\output.txt
 #關閉記錄功能
 notee;  
 或者 \t
 
 如:select * from ts_user \T d:\output.txt
 -->;
 -->\t
 
 eg:
 #開啓記錄到文件功能
  \T d:\output.txt
  #執行sql
  select * from ts_user;
  #結束記錄,保存到文本
  \t
  
------------------------------------
 #執行文本中的腳步
source test.sql
#查看服務器版本和當前日期
select version(),current_date; 
select now(); 
select version(); 

#把mysql作爲一個簡單的計算器
select pi(); 
select pi()*10; 
#查看用戶
select user(); 
#使用load
load data local infile filePath into table tableName; 


#創建數據庫

#創建數據庫test
create database test;
primary key PK_positon (id) #設定主鍵

#創建表是先判斷表是否存在
create table if not exists students(……);
#create table table2 select * from table1 where 1<>1;
create table table2 select * from table1 where 1<>1;

#複製表
create table table2 select * from table1;
#對錶重新命名
alter table table1 rename as table2;
#修改列的類型
alter table table1 modify id int unsigned;//修改列id的類型爲int unsigned
alter table table1 change id sid int unsigned;//修改列id的名字爲sid,而且把屬性修改爲int unsigned

#創建索引
  alter table table1 add index ind_id (id);
  create index ind_id on table1 (id);
  create unique index ind_id on table1 (id);//建立唯一性索引
#刪除索引
  drop index idx_id on table1;
  alter table table1 drop index ind_id;
#聯合字符或者多個列(將列id與":"和列name和"="連接)
  select concat(id,':',name,'=') from students;
#limit(選出10到20條)<第一個記錄集的編號是0>
  select * from students order by id limit 9,10;
#MySQL不支持的功能
  事務,視圖,外鍵和引用完整性,存儲過程和觸發器
#MySQL會使用索引的操作符號
  <,<=,>=,>,=,between,in,不帶%或者_開頭的like
#使用索引的缺點
  1)減慢增刪改數據的速度;
  2)佔用磁盤空間;
  3)增加查詢優化器的負擔;
  當查詢優化器生成執行計劃時,會考慮索引,太多的索引會給查詢優化器增加工作量,導致無法選擇最優的查詢方案;
#分析索引效率
  方法:在一般的SQL語句前加上explain;
  分析結果的含義:
  1)table:表名;
  2)type:連接的類型,(ALL/Range/Ref)。其中ref是最理想的;
  3)possible_keys:查詢可以利用的索引名;
  4)key:實際使用的索引;
  5)key_len:索引中被使用部分的長度(字節);
  6)ref:顯示列名字或者"const"(不明白什麼意思);
  7)rows:顯示MySQL認爲在找到正確結果之前必須掃描的行數;
  8)extra:MySQL的建議;
#使用較短的定長列
  1)儘可能使用較短的數據類型;
  2)儘可能使用定長數據類型;
  a)用char代替varchar,固定長度的數據處理比變長的快些;
  b)對於頻繁修改的表,磁盤容易形成碎片,從而影響數據庫的整體性能;
  c)萬一出現數據表崩潰,使用固定長度數據行的表更容易重新構造。使用固定長度的數據行,每個記錄的開始位置都是固定記錄長度的倍數,可以很容易被檢測到,但是使用可變長度的數據行就不一定了;
  d)對於MyISAM類型的數據表,雖然轉換成固定長度的數據列可以提高性能,但是佔據的空間也大;
#使用not null和enum
  儘量將列定義爲not null,這樣可使數據的出來更快,所需的空間更少,而且在查詢時,MySQL不需要檢查是否存在特例,即null值,從而優化查詢;
  如果一列只含有有限數目的特定值,如性別,是否有效或者入學年份等,在這種情況下應該考慮將其轉換爲enum列的值,MySQL處理的更快,因爲所有的enum值在系統內都是以標識數值來表示的;
  
#使用optimize table
   對於經常修改的表,容易產生碎片,使在查詢數據庫時必須讀取更多的磁盤塊,降低查詢性能。具有可變長的表都存在磁盤碎片問題,這個問題對blob數據類 型更爲突出,因爲其尺寸變化非常大。可以通過使用optimize table來整理碎片,保證數據庫性能不下降,優化那些受碎片影響的數據表。 optimize table可以用於MyISAM和BDB類型的數據表。實際上任何碎片整理方法都是用mysqldump來轉存數據表,然後使用轉存後的文件並重新建數據 表;
  
#使用procedure analyse()
  可以使用procedure analyse()顯示最佳類型的建議,使用很簡單,在select語句後面加上procedure analyse()就可以了;例如:
  select * from students procedure analyse();
  select * from students procedure analyse(16,256);
  第二條語句要求procedure analyse()不要建議含有多於16個值,或者含有多於256字節的enum類型,如果沒有限制,輸出可能會很長;
  
#使用查詢緩存
  1)查詢緩存的工作方式:
  第一次執行某條select語句時,服務器記住該查詢的文本內容和查詢結果,存儲在緩存中,下次碰到這個語句時,直接從緩存中返回結果;當更新數據表後,該數據表的任何緩存查詢都變成無效的,並且會被丟棄。
  2)配置緩存參數:
   變量:query_cache _type,查詢緩存的操作模式。有3中模式,0:不緩存;1:緩存查詢,除非與 select sql_no_cache開頭;2:根據需要只緩存那些以select sql_cache開頭的查詢; query_cache_size:設置查詢緩存的最大結果集的大小,比這個值大的不會被緩存。
#調整硬件
  1)在機器上裝更多的內存;
  2)增加更快的硬盤以減少I/O等待時間;
  尋道時間是決定性能的主要因素,逐字地移動磁頭是最慢的,一旦磁頭定位,從磁道讀則很快;
  3)在不同的物理硬盤設備上重新分配磁盤活動;
#查詢日誌功能是否開啓
SHOW VARIABLES LIKE 'general%';
#開啓日誌
set GLOBAL general_log='ON';
#通用日誌查詢是否開啓
show variables like '%version%';
#日誌輸出格式
show variables like '%log_output%';
#慢日誌狀態
show global status like '%slow%';

select sleep(1);

#臨時開啓慢查詢日誌
set global slow_query_log = on;
#臨時設置慢查詢時間臨界點
set long_query_time = 1;
#現在起,所有執行時間超過1秒的sql都將被記錄到慢查詢文件中(我這裏就是 /data/mysql/mysql-slow.log)
#設置慢查詢存儲的方式
set globle log_output = file;

#查詢慢查詢日誌的開啓狀態和慢查詢日誌儲存的位置
show variables like '%quer%';
#永久設置慢查詢日誌開啓,以及設置慢查詢日誌時間臨界點
#mysql配置文件一般默認在 /mysql/my.ini

#對sql進行優化-------------------------------------------------------
#使用explain查詢sql的執行計劃

explain select comic_id,name,pen_name,cover,last_verify_time from comic;

#mysql 清屏功能,退出到cmd 命令上 cls 清除,mysql本身無清除命令

------------------------------------
創建授權:grant select on 數據庫.* to 用戶名@登錄主機 identified by \"密碼\"
修改密碼:mysqladmin -u用戶名 -p舊密碼 password 新密碼
刪除授權: revoke select,insert,update,delete om *.* fromtest2@localhost;

顯示數據庫:show databases;
顯示數據表:show tables;
顯示錶結構:describe 表名;

創建庫:create database 庫名;
刪除庫:drop database 庫名;
使用庫:use 庫名;

創建表:create table 表名 (字段設定列表);
刪除表:drop table 表名;
修改表:alter table t1 rename t2
查詢表:select * from 表名;
清空表:delete from 表名;
備份表: mysqlbinmysqldump -h(ip) -uroot -p(password) databasenametablename > tablename.sql
恢復表: mysqlbinmysql -h(ip) -uroot -p(password) databasenametablename < tablename.sql(操作前先把原來表刪除)

增加列:ALTER TABLE t2 ADD c INT UNSIGNED NOT NULL AUTO_INCREMENT,ADDINDEX (c);
修改列:ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b cCHAR(20);
刪除列:ALTER TABLE t2 DROP COLUMN c;

備份數據庫:mysql\bin\mysqldump -h(ip) -uroot -p(password) databasename> database.sql
恢復數據庫:mysql\bin\mysql -h(ip) -uroot -p(password) databasename< database.sql
複製數據庫:mysql\bin\mysqldump --all-databases >all-databases.sql
修復數據庫:mysqlcheck -A -o -uroot -p54safer

文本數據導入: load data local infile \"文件名\" into table 表名;
數據導入導出:mysql\bin\mysqlimport database tables.txt

第一招、mysql服務的啓動和停止
net stop mysql
net start mysql

第二招、登陸mysql

1.首先需要進入mysql的安裝文件夾bin目錄下:cd + C:\Program Files\MySQL\MySQL Server 5.5\bin
2.然後連接mysql語法如下: mysql -u用戶名-p用戶密碼
或鍵入命令mysql -uroot -p,回車後提示你輸入密碼,輸入12345,然後回車即可進入到mysql中了,mysql的提示符是:
mysql>
注意,如果是連接到另外的機器上,則需要加入一個參數-h機器IP,不加地址參數,則默認是連接本地地址。

第三招、增加新用戶
格式:grant 權限 on 數據庫.* to 用戶名@登錄主機 identified by "密碼"
如,增加一個用戶user1密碼爲password1,讓其可以在本機上登錄,並對所有數據庫有查詢、插入、修改、刪除的權限。首先用以root用戶連入mysql,然後鍵入以下命令:
grant select,insert,update,delete on *.* touser1@localhost Identified by "password1";
如果希望該用戶能夠在任何機器上登陸mysql,則將localhost改爲"%"。
如果你不想user1有密碼,可以再打一個命令將密碼去掉。
grant select,insert,update,delete on mydb.* touser1@localhost identified by"";

第四招: 操作數據庫
登錄到mysql中,然後在mysql的提示符下運行下列命令,每個命令以分號結束。
1、 顯示數據庫列表。
show databases;
缺省有兩個數據庫:mysql和test。mysql庫存放着mysql的系統和用戶權限信息,我們改密碼和新增用戶,實際上就是對這個庫進行操作。
2、 顯示庫中的數據表:
use mysql;
show tables;
3、 顯示數據表的結構:
describe 表名;
4、 建庫與刪庫:
create database 庫名;
drop database 庫名;
5、 建表:
use 庫名;
create table 表名(字段列表);
drop table 表名;
6、 清空表中記錄:
delete from 表名;
7、 顯示錶中的記錄:
select * from 表名;

第五招、導出和導入數據
1. 導出數據:
mysqldump --opt test > mysql.test
即將數據庫test數據庫導出到mysql.test文件,後者是一個文本文件
如:mysqldump -u root -p123456 --databases dbname >mysql.dbname
就是把數據庫dbname導出到文件mysql.dbname中。
2. 導入數據:
mysqlimport -u root -p123456 < mysql.dbname。
不用解釋了吧。
3. 將文本數據導入數據庫:
文本數據的字段數據之間用tab鍵隔開。
use test;
load data local infile "文件名" into table 表名;
1:使用SHOW語句找出在服務器上當前存在什麼數據庫:
mysql> SHOW DATABASES;
2:2、創建一個數據庫MYSQLDATA
mysql> CREATE DATABASE MYSQLDATA;
3:選擇你所創建的數據庫
mysql> USE MYSQLDATA; (按回車鍵出現Database changed時說明操作成功!)
4:查看現在的數據庫中存在什麼表
mysql> SHOW TABLES;
5:創建一個數據庫表
mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sexCHAR(1));
6:顯示錶的結構:
mysql> DESCRIBE MYTABLE;
7:往表中加入記錄
mysql> insert into MYTABLE values ("hyq","M");
8:用文本方式將數據裝入數據庫表中(例如D:/mysql.txt)
mysql> LOAD DATA LOCAL INFILE "D:/mysql.txt" INTOTABLE MYTABLE;
9:導入.sql文件命令(例如D:/mysql.sql)
mysql>use database;
mysql>source d:/mysql.sql;
10:刪除表
mysql>drop TABLE MYTABLE;
11:清空表
mysql>delete from MYTABLE;
12:更新表中數據
mysql>update MYTABLE set sex="f" where name='hyq';13:備份數據庫mysqldump -u root庫名>xxx.data14:

例2:連接到遠程主機上的MYSQL
  假設遠程主機的IP爲:110.110.110.110,用戶名爲root,密碼爲abcd123。則鍵入以下命令:   

  mysql-h110.110.110.110 -uroot -pabcd123   

  (注:u與root可以不用加空格,其它也一樣)   

  3、退出MYSQL命令:exit

(一) 連接MYSQL:

  1、首先:打開CMD命令窗,輸入cd mysql.exe所在路徑
      2、然後輸入: mysql -h主機地址 -P端口 -u用戶名-p用戶密碼

  (注:如果連接本地數據庫,默認可以不寫-h,如果數據庫端口默認的3306沒有被更改,也可以不寫-P;

     反之若遠程非本地(他人電腦上)的mysql必須寫-h地址,默認的3306端口若已被修改,也必須寫-P端口。)

  3、顯示了welcome to the monitor則成功連接數據庫。

1、例1:連接到本機上的MYSQL
  首先在打開DOS窗口,然後進入mysql安裝目錄下的bin目錄下,例如: D:\mysql\bin,再鍵入命令mysql -uroot-p,回車後提示你輸密碼,如果剛安裝好MYSQL,超級用戶root是沒有密碼的,故直接回車即可進入到MYSQL中了,MYSQL的提示符是:mysql>
2、例2:連接到遠程主機上的MYSQL
  假設遠程主機的IP爲:10.0.0.1,用戶名爲root,密碼爲123。則鍵入以下命令:
   mysql -h10.0.0.1 -uroot-p123
(注:u與root可以不用加空格,其它也一樣)
3、退出MYSQL命令
   exit (回車)

(二) 修改密碼:
   格式:mysqladmin -u用戶名 -p舊密碼 -password 新密碼
1、例1:給root加個密碼123。首先在DOS下進入目錄C:\mysql\bin,然後鍵入以下命令:
   mysqladmin -uroot -password123
  注:因爲開始時root沒有密碼,所以-p舊密碼一項就可以省略了。
2、例2:再將root的密碼改爲456
   mysqladmin -uroot -pab12password 456
(三) 增加新用戶:(注意:和上面不同,下面的因爲是MYSQL環境中的命令,所以後面都帶一個分號作爲命令結束符)
   格式:grant select on 數據庫.* to用戶名@登錄主機 identified by "密碼"
  例1、增加一個用戶test1密碼爲abc,讓他可以在任何主機上登錄,並對所有數據庫有查詢、插入、修改、刪除的權限。首先用以root用戶連入MYSQL,然後鍵入以下命令:
   grantselect,insert,update,delete on *.* to test1@"%" Identified by"abc";

  但例1增加的用戶是十分危險的,你想如某個人知道test1的密碼,那麼他就可以在internet上的任何一臺電腦上登錄你的mysql數據庫並對你的數據可以爲所欲爲了,解決辦法見例2。
  例2、增加一個用戶test2密碼爲abc,讓他只可以在localhost上登錄,並可以對數據庫mydb進行查詢、插入、修改、刪除的操作(localhost指本地主機,即MYSQL數據庫所在的那臺主機),這樣用戶即使用知道test2的密碼,他也無法從internet上直接訪問數據庫,只能通過MYSQL主機上的web頁來訪問了。
   grantselect,insert,update,delete on mydb.* to test2@localhost identifiedby "abc";
  如果你不想test2有密碼,可以再打一個命令將密碼消掉。
   grantselect,insert,update,delete on mydb.* to test2@localhost identifiedby "";
(四) 顯示命令
1、顯示數據庫列表:
   show databases;
  剛開始時才兩個數據庫:mysql和test。mysql庫很重要它裏面有MYSQL的系統信息,我們改密碼和新增用戶,實際上就是用這個庫進行操作。
2、顯示庫中的數據表:
   use mysql;      //打開庫
   show tables;
3、顯示數據表的結構:
   describe 表名;
4、建庫:
   create database 庫名;
5、建表:
   use 庫名;
   create table 表名(字段設定列表);
6、刪庫和刪表:
   drop database 庫名;
   drop table 表名;
7、將表中記錄清空:
   delete from 表名;
8、顯示錶中的記錄:
   select * from 表名;

MySQL導入導出命令

  首先cd進入mysql.exe所在路徑。若導出非本地(他人機器上)數據庫,必須加上-P端口、-h地址

  下列123導出無需連接數據庫,導入需先連接數據庫。

1.導出整個數據庫

  mysqldump -u 用戶名 -p 數據庫名 > 導出的文件名(文件名前可指定:導出sql文件的保存路徑)
  示例:mysqldump -u root -p fdm > F://fdm.sql
2.導出一個表
  mysqldump -u 用戶名 -p 數據庫名 表名> 導出的文件名(文件名前可指定:導出sql文件的保存路徑)
  示例:mysqldump -u root -p fdm p_code> F://fdm.sql

3.導出一個數據庫結構
  mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc>d:wcnc_db.sql
  -d 沒有數據 --add-drop-table 在每個create語句之前增加一個drop table

4.導入數據庫腳本
  連接mysql數據庫,
  如mysql -u root -p
  mysql>use 數據庫
  然後使用source命令,後面參數爲腳本文件(*.sql)
  mysql>source d:wcnc_db.sql  
  
 
 
 
 
 



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章