MySQL常用命令大全(二)

(1)    命令語法

insert into <表名>[(<字段名1>[..<字段名n>])]values(值1)[,(值n)]

(2)    建立一個簡單的測試表test

CREATE TABLE `test` (   `id` int(4) NOT NULL AUTO_INCREMENT,  `name` char(20) NOT NULL,  PRIMARY KEY (`id`)) ;mysql> desc test;+-------+----------+------+-----+---------+----------------+| Field | Type     | Null | Key | Default | Extra          |+-------+----------+------+-----+---------+----------------+| id    | int(4)   | NO   | PRI | NULL    | auto_increment || name  | char(20) | NO   |     | NULL|                |+-------+----------+------+-----+---------+----------------+

插入值

insert into test(id,name) values(1,'oldboy');insert into test(id,name) values(1,'oldboy');

insert

into

testid,name

values1‘oldboy’

固定不能

固定不變

表明,指定列

插入值1,字符串’’

查詢

mysql> select * from test;+----+--------+| id | name   |+----+--------+|  1 | oldboy |+----+--------+1 row in set (0.00 sec)

第二種方法:

id列可以不指定,不指定就自己增長

insert into test(name) values('oldgirl');  mysql> select * from test;+----+---------+| id | name|+----+---------+|  1 | oldboy  ||  2 | oldgirl |+----+---------+2 rows in set (0.00 sec)

第三種方法,可以不指定列,後面按照循序插入

mysql> insert into test values(3,'inca');Query OK, 1 row affected (0.00 sec) mysql> select * from test;+----+---------+| id | name|+----+---------+|  1 | oldboy  ||  2 | oldgirl ||  3 | inca|+----+---------+3 rows in set (0.00 sec)

批量插入:

mysql> insert into test values(4,'zuma'),(5,'kaka');Query OK, 2 rows affected (0.00 sec)Records: 2Duplicates: 0  Warnings: 0 mysql> select * from test;+----+---------+| id | name|+----+---------+|  1 | oldboy  ||  2 | oldgirl ||  3 | inca    ||  4 | zuma||  5 | kaka|+----+---------+5 rows in set (0.00 sec)

清空所有值

mysql> truncate table test;Query OK, 0 rows affected (0.00 sec) mysql> select * from test;Empty set (0.00 sec)

一條命令解決以上所有配置

mysql> insert into test values (1,'oldboy'),(2,'oldgirl'),(3,'inca'),(4,'zuma'),(5,'kaka');Query OK, 5 rows affected (0.01 sec)Records: 5Duplicates: 0  Warnings: 0 mysql> select * from test;+----+---------+| id | name|+----+---------+|  1 | oldboy  ||  2 | oldgirl ||  3 | inca    ||  4 | zuma    ||  5 | kaka    |+----+---------+5 rows in set (0.00 sec)

查詢數據

查詢表的所有數據行

1.命令句法:select<字段1,字段2…>frin
<
表名>where<表達式>

其中,select,from,where是不能隨便改的,是關鍵字,支持大小寫

2.列:查看錶test中所有數據

a.進入指定庫後查詢

如果不進入庫可以使用

mysql> select * from oldboy.test;mysql> select user,host,password from mysql.user;


+-----------+---------------------------+-------------------------------------------+| user| host                      | password|+-----------+---------------------------+-------------------------------------------+| root| localhost                 | *7495041D24E489A0096DCFA036B166446FDDD992 || root| 127.0.0.1                 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || wordpress | 192.168.1.%               | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || cyh| 10.1.1.%                  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || bbs| 172.16.1.1/255.255.255.0  | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || blog| localhost                 | *7495041D24E489A0096DCFA036B166446FDDD992 || oldboy| localhost                 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || oldboy| 192.168.1.%/255.255.255.0 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 || abc| localhost                 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |+-----------+---------------------------+-------------------------------------------+

只查詢前2行內容

mysql> select * from test limit 2;+----+---------+| id | name    |+----+---------+|  1 | oldboy  ||  2 | oldgirl |+----+---------+2 rows in set (0.00 sec)

從第二條開始查,查找2

mysql> select * from test limit 1,2;+----+---------+| id | name|+----+---------+|  2 | oldgirl ||  3 | inca    |+----+---------+2 rows in set (0.00 sec)

按照條件查詢

mysql> select * from test where id=1;+----+--------+| id | name|+----+--------+|  1 | oldboy |+----+--------+1 row in set (0.00 sec)

提示:mysql> select * from test where name=’oldboy’;
<==
查詢字符串要加引號

mysql> select * from test where name='oldboy';+----+--------+| id | name   |+----+--------+|  1 | oldboy |+----+--------+1 row in set (0.00 sec)

提示:查找字符串類型的條件的值要帶單引號,數字值不帶引號。

查詢多個條件

mysql> select * from test where name='oldgirl' and id=2;+----+---------+| id | name    |+----+---------+|  2 | oldgirl |+----+---------+1 row in set (0.00 sec)

範圍查詢

mysql> select * from test where id>2;+----+------+| id | name |+----+------+|  3 | inca ||  4 | zuma ||  5 | kaka |+----+------+3 rows in set (0.00 sec)mysql> select * from test where id>2 and id<5;+----+------+| id | name |+----+------+|  3 | inca ||  4 | zuma |+----+------+2 rows in set (0.35 sec)

或者的意思

mysql> select * from test where id>2 or id<5;+----+---------+| id | name    |+----+---------+|  1 | oldboy  ||  2 | oldgirl ||  3 | inca    ||  4 | zuma    ||  5 | kaka    |+----+---------+5 rows in set (0.34 sec)

排序

什麼都不加相當於升序

mysql> select * from test;相當於mysql> select * from test order by id asc;     寫法倒序mysql> select * from test order by id desc;  倒序


 

例子:創建學生表

drop table student;create table student(Sno int(10) NOT NULL COMMENT '學號',Sname varchar(16) NOT NULL COMMENT '姓名',Ssex char(2) NOT NULL COMMENT '性別',Sage tinyint(2)  NOT NULL default '0' COMMENT '學生年齡',Sdept varchar(16)  default NULL  COMMENT '學生所在系別', PRIMARY KEY  (Sno) ,key index_Sname (Sname)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

插入內容

create table course(Cno int(10) NOT NULL COMMENT '課程號',Cname varchar(64) NOT NULL COMMENT '課程名',Ccredit tinyint(2) NOT NULL COMMENT '學分',PRIMARY KEY  (Cno) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

插入內容

CREATE TABLE `SC` (   SCid int(12) NOT NULL auto_increment COMMENT '主鍵',  `Cno` int(10) NOT NULL COMMENT '課程號',  `Sno` int(10) NOT NULL COMMENT '學號',  `Grade` tinyint(2) NOT NULL COMMENT '學生成績',  PRIMARY KEY  (`SCid`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;

插入內容

INSERT INTO course values(1001,'Linux中高級運維',3);INSERT INTO course values(1002,'Linux高級架構師',5);INSERT INTO course values(1003,'MySQL高級Dba',4);INSERT INTO course values(1004,'Python運維開發',4);INSERT INTO course values(1005,'Java web開發',3);

插入內容

INSERT INTO SC(Sno,Cno,Grade)  values(0001,1001,4);INSERT INTO SC(Sno,Cno,Grade) values(0001,1002,3);INSERT INTO SC(Sno,Cno,Grade)  values(0001,1003,1);INSERT INTO SC(Sno,Cno,Grade)  values(0001,1004,6);

INSERT INTO SC(Sno,Cno,Grade)  values(0002,1001,3);INSERT INTO SC(Sno,Cno,Grade)  values(0002,1002,2);INSERT INTO SC(Sno,Cno,Grade)  values(0002,1003,2);INSERT INTO SC(Sno,Cno,Grade)  values(0002,1004,8);INSERT INTO SC(Sno,Cno,Grade)  values(0003,1001,4);INSERT INTO SC(Sno,Cno,Grade)  values(0003,1002,4);INSERT INTO SC(Sno,Cno,Grade)  values(0003,1003,2);INSERT INTO SC(Sno,Cno,Grade)  values(0003,1004,8);INSERT INTO SC(Sno,Cno,Grade)  values(0004,1001,1);INSERT INTO SC(Sno,Cno,Grade)  values(0004,1002,1);INSERT INTO SC(Sno,Cno,Grade)  values(0004,1003,2);INSERT INTO SC(Sno,Cno,Grade)  values(0004,1004,3);INSERT INTO SC(Sno,Cno,Grade)  values(0005,1001,5);INSERT INTO SC(Sno,Cno,Grade)  values(0005,1002,3);INSERT INTO SC(Sno,Cno,Grade)  values(0005,1003,2);INSERT INTO SC(Sno,Cno,Grade)  values(0005,1004,9);

檢查,查看錶格式或者表內容

mysql>desc SC; or select * from SC;

需求:統計學號、姓名、選的課程、學分

select
student.Sno,student.Sname,course.Cname,SC.Grade from student,course,SC where
student.Sno=SC.Sno and course.Cno=SC.Cno order by student.Sname;

 

優化

sql語句優化

explain 查看是否含有建立索引的語句mysql> explain select * from test where name='oldboy';在一個語句前面加上explain相當於模擬查詢

創建索引

mysql> create index index_name on test(name);| name| char(20) | NO   | MUL | NULL    |              mysql> explain select * from test where name='oldboy'\G*************************** 1. row ***************************           id: 1  select_type: SIMPLE        table: test         type: refpossible_keys: index_name          key: index_name      key_len: 60          ref: const         rows: 1   查詢行數,表示當前只查詢了1行        Extra: Using where; Using index1 row in set (0.00 sec)

原圖:

mysql> explain select * from test where name='oldboy'\G*************************** 1. row ***************************           id: 1  select_type: SIMPLE        table: test         type: ALLpossible_keys: NULL          key: NULL      key_len: NULL          ref: NULL         rows: 5        Extra: Using where1 row in set (0.00 sec)

幫助

mysql>
help explain  
包含EXPLAIN的用法


 

使用explain命令優化SQL語句(select語句)的基本流程

1、 抓慢查詢SQL語法方法

每隔2,秒輸入mysql> SHOW FULL PROCESSLIST; 如果出現2次說明是慢查詢mysql> SHOW  FULL PROCESSLIST;

2、 分析慢查詢日誌

配置參數記錄慢查詢語句log_query_time = 2log_queries_not_using_indexeslog-slow-queries = /data/3306/slow.log

3、 對需要建索引的條件列建立索引

大表不能高峯期建立索引,300萬條記錄(如果訪問已經慢了,可以直接創建)

4、 分析慢查詢SQL的工具mysqlala(每天早上發郵件)

切割慢查詢日誌,去重分析後發給大家,如果併發太大可以按小時,去重。

1mv 然後flush進程

2cp複製,然後利用>清空。

3)定時任務

mv /data/3306/slow.log /opt/$(date +%F)_slow.logmysqladmin -uroot -poldboy -S /data/3306/mysql.sock flush-logs

 


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