1.啟動和停止服務
一)啟動和停止
#啟動服務: $sudo service mysql start #停止服務: $sudo service mysql stop
二)創建和選擇數據庫
【創建數據庫】
mysql> create database testdb; Query OK, 1 row affected (0.01 sec)
mysql> create database testdb default character set 'utf8';
Query OK, 1 row affected (0.00 sec)
status命令查看數據庫狀態:
mysql> status; -------------- mysql Ver 14.14 Distrib 5.7.21, for Linux (i686) using EditLine wrapper Connection id: 13 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.7.21 MySQL Community Server (GPL) Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: latin1 Db characterset: latin1 Client characterset: utf8 Conn. characterset: utf8 UNIX socket: /var/run/mysqld/mysqld.sock Uptime: 5 hours 28 min 6 sec Threads: 1 Questions: 211 Slow queries: 0 Opens: 123 Flush tables: 1 Open tables: 116 Queries per second avg: 0.010
【選擇數據庫】
mysql> use testdb;
Database changed
【查看當前登錄的數據庫】
mysql> select database() mydb; +--------+ | mydb | +--------+ | testdb | +--------+ 1 row in set (0.00 sec)
mysql> desc t_users; +----------+-------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | NO | | NULL | | | owner | varchar(20) | NO | | NULL | | | descinfo | varchar(50) | YES | | NULL | | | sex | char(1) | NO | | 1 | | | birth | date | YES | | NULL | | | death | date | YES | | NULL | | | addtime | datetime | YES | | CURRENT_TIMESTAMP | | +----------+-------------+------+-----+-------------------+----------------+ 8 rows in set (0.00 sec)
【刪除數據庫】
mysql> drop database testdb; Query OK, 0 rows affected (0.00 sec)
【創建用戶和分配權限】
mysql> grant all privileges on testdb.* to 'test2'@'localhost' identified by '123456'; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> select host,user,authentication_string from user; +-----------+---------------+-------------------------------------------+ | host | user | authentication_string | +-----------+---------------+-------------------------------------------+ | % | root | *9AAE89836D1D658A0BED88FEB96A3DFF84C94D77 | | % | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | % | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | localhost | test | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | | localhost | test2 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | +-----------+---------------+-------------------------------------------+ 5 rows in set (0.00 sec)
【創建表】
從源文件引入創建:假設有個sql.txt
DROP TABLE IF EXISTS t_users; create table t_users ( id int(11) not null auto_increment, name varchar(20) not null comment '姓名', owner varchar(20) not null, descinfo varchar(50), sex char(1) not null default '1', birth date comment '生日', death date, addtime datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間', primary key (id) );
然后執行:
mysql> source ./sql.txt; Query OK, 0 rows affected, 1 warning (0.00 sec) Query OK, 0 rows affected (0.02 sec) mysql> show tables; +------------------+ | Tables_in_testdb | +------------------+ | t_users | +------------------+ 1 row in set (0.00 sec) mysql> desc t_users; +----------+-------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | NO | | NULL | | | owner | varchar(20) | NO | | NULL | | | descinfo | varchar(50) | YES | | NULL | | | sex | char(1) | NO | | 1 | | | birth | date | YES | | NULL | | | death | date | YES | | NULL | | | addtime | datetime | YES | | CURRENT_TIMESTAMP | | +----------+-------------+------+-----+-------------------+----------------+ 8 rows in set (0.00 sec) mysql> insert into t_users (name,owner,descinfo,birth,death) values ('php webs','test webs','test ok next boooks',curdate(),curdate()); Query OK, 1 row affected (0.01 sec) mysql> select t.* from t_users t; +----+----------+-----------+---------------------+-----+------------+------------+---------------------+ | id | name | owner | descinfo | sex | birth | death | addtime | +----+----------+-----------+---------------------+-----+------------+------------+---------------------+ | 1 | php webs | test webs | test ok next boooks | 1 | 2018-04-20 | 2018-04-20 | 2018-04-20 16:40:59 | +----+----------+-----------+---------------------+-----+------------+------------+---------------------+ 1 row in set (0.00 sec)
2.刪掉時候用別名
delete t from t_users t where t.title='John';
3.查詢及排序
默認asc升序 降序desc
SELECT name, birth FROM pet ORDER BY birth
結果:
查詢當前時間和mysql版本函數 curdate() 和 current_date:
mysql> select version(),curdate(); +-----------+------------+ | version() | curdate() | +-----------+------------+ | 5.7.21 | 2018-04-20 | +-----------+------------+ 1 row in set (0.00 sec)
mysql> select version(),current_date; +-----------+--------------+ | version() | current_date | +-----------+--------------+ | 5.7.21 | 2018-04-20 | +-----------+--------------+ 1 row in set (0.00 sec)
now(): 函數查詢當前時間
mysql> select version(),now(); +-----------+---------------------+ | version() | now() | +-----------+---------------------+ | 5.7.21 | 2018-04-20 15:53:04 | +-----------+---------------------+ 1 row in set (0.00 sec)
TIMESTAMPDIFF (year,birth,curdate()):日期計算使用 函數計算 查詢年齡:
mysql> SELECT name, birth, CURDATE(),TIMESTAMPDIFF(YEAR,birth,CURDATE()) AS age FROM pet;
結果:
is not null 查詢不為空的數據:
mysql> select t.* from t_users t where t.title is not null; +----+------------+--------------+-----------------+ | id | title | author | submission_date | +----+------------+--------------+-----------------+ | 1 | 學習 PHP | 菜鳥教程 | 2018-04-11 | | 31 | PHP webs | Doe | 2018-04-16 | +----+------------+--------------+-----------------+ 2 rows in set (0.00 sec)
day() 和month()函數的使用:查詢指定日期的數據:
mysql> select t.* from t_users t where day(t.submission_date)=11; +----+------------+--------------+-----------------+ | id | title | author | submission_date | +----+------------+--------------+-----------------+ | 1 | 學習 PHP | 菜鳥教程 | 2018-04-11 | +----+------------+--------------+-----------------+ 1 row in set (0.01 sec) mysql> select t.* from t_users t where month(t.submission_date)=4; +----+------------+--------------+-----------------+ | id | title | author | submission_date | +----+------------+--------------+-----------------+ | 1 | 學習 PHP | 菜鳥教程 | 2018-04-11 | | 31 | PHP webs | Doe | 2018-04-16 | +----+------------+--------------+-----------------+ 2 rows in set (0.00 sec)
mod(n,m) 取余函數的使用;
查詢下一個月:
mysql> select mod(month(curdate()),12)+1 as nextmonth; +-----------+ | nextmonth | +-----------+ | 5 | +-----------+ 1 row in set (0.00 sec)
如:想要查詢下一個月過生日的人;
mysql> select t.* from t_users where t.month(birth) = mod(month(curdate()),12)+1 ;
1 is null 返回false;
1 is not null 返回 true;
mysql> select 1 is not null; +---------------+ | 1 is not null | +---------------+ | 1 | +---------------+ 1 row in set (0.00 sec)
利用count()函數統計數據 以owner分組 group by
mysql> select owner,count(name) from t_users where name like 'C%' group by owner; +----------+-------------+ | owner | count(name) | +----------+-------------+ | C webs | 5 | | GOGGGOOK | 2 | | GOOOK | 1 | +----------+-------------+ 3 rows in set (0.00 sec)
max(col):查詢某列的最大值
mysql> select max(id) from t_users; +---------+ | max(id) | +---------+ | 17 | +---------+ 1 row in set (0.00 sec)
【統計每天訪問量】
mysql> select t.* from t1 t; +------+-------+------+ | year | month | day | +------+-------+------+ | 2000 | 1 | 1 | | 2000 | 1 | 20 | | 2000 | 1 | 30 | | 2000 | 2 | 2 | | 2000 | 2 | 22 | | 2000 | 2 | 23 | | 2000 | 2 | 22 | +------+-------+------+ 7 rows in set (0.01 sec) mysql> select year,month,bit_count(bit_or(1<<day)) as days from t1 group by year,month; +------+-------+------+ | year | month | days | +------+-------+------+ | 2000 | 1 | 3 | | 2000 | 2 | 3 | +------+-------+------+ 2 rows in set (0.00 sec)
4.Mysql使用正則表達式匹配模糊查詢 like的使用
Mysql提供了一個標准的SQL模式匹配,和基於擴展的正則表達式的模式匹配Unix工具(如vi,grep,sed)一樣。
SQL模式匹配可以使用:
“_“來匹配任意單個字符,
”%“可以用來匹配任意數量(包含0個字符)的字符。
在MySQL中,SQL模式匹配的大小寫默認是不敏感的,以下有一些例子,當你在使用SQL模式時,不要使用=或<>,而是使用LIKE或NOTLIKE。
要找到P%開頭的名字:
mysql> select t.* from t_users t where t.title like 'P%' -> ; +----+----------+--------+-----------------+ | id | title | author | submission_date | +----+----------+--------+-----------------+ | 31 | PHP webs | Doe | 2018-04-16 | +----+----------+--------+-----------------+ 1 row in set (0.00 sec)
查詢以%P結尾的名字:
mysql> select t.* from t_users t where t.title like '%PHP'; +----+------------+--------------+-----------------+ | id | title | author | submission_date | +----+------------+--------------+-----------------+ | 1 | 學習 PHP | 菜鳥教程 | 2018-04-11 | +----+------------+--------------+-----------------+ 1 row in set (0.00 sec)
使用“_”匹配 4個字符的名字:
mysql> select t.* from t_users t where t.title like '____'; +----+-------+--------+-----------------+ | id | title | author | submission_date | +----+-------+--------+-----------------+ | 32 | John | Doe | 2018-04-20 | | 33 | John | Doe | 2018-04-20 | | 34 | John | Doe | 2018-04-20 | | 35 | John | Doe | 2018-04-20 | | 36 | John | Doe | 2018-04-20 | | 37 | John | Doe | 2018-04-20 | +----+-------+--------+-----------------+ 6 rows in set (0.00 sec)
5.利用正則表達式REGEXP 和 NOT REGEXP
MySQL提供的其他模式匹配類型是使用擴展的正則表達式,當你使用這個類型來測試一個匹配,
要使用REGEXP和NOT REGEXP操作(或者RLIKE和NOT RLIKE,他們是同意詞)。
下面的列表描述了一些擴展正則表達式的特征:
"."匹配任意單個字符.
[a-z]:單個字符匹配類"[...]"匹配括號里的任意字符,例如,"[abc]"匹配"a","b",或"c",要指定字符范圍,可以使用"-",
例如,[a-z] 匹配任意字母,而[0-9]匹配任意數字。
"*" 匹配0個或多個在它前面的東西。例如,"x*" 匹配任意個x字符,"[0-9]*"匹配任意個數字,".*"匹配任意個字符。
一個REGEXP模式匹配成功的條件是,模式在測試值中的任意地方匹配即可。
(這與LIKE模式匹配不同,LIKE模式匹配成功需要匹配整個值)。
"^" 開頭作為模式匹配或用
"$" 作為模式的結尾。
為了驗證擴展的正則表達式是如何工作的,在這使用REGEXP對前面使用LIKE查詢進行重寫。
查詢以P開頭:
mysql> select * from t_users where title regexp '^P'; +----+----------+--------+-----------------+ | id | title | author | submission_date | +----+----------+--------+-----------------+ | 31 | PHP webs | Doe | 2018-04-16 | +----+----------+--------+-----------------+ 1 row in set (0.00 sec)
查詢以s結尾:
mysql> select * from t_users where title regexp 's$'; +----+----------+--------+-----------------+ | id | title | author | submission_date | +----+----------+--------+-----------------+ | 31 | PHP webs | Doe | 2018-04-16 | +----+----------+--------+-----------------+ 1 row in set (0.00 sec)
查詢title包含e字符的:
mysql> select * from t_users where title regexp 'e'; +----+------------+----------+-----------------+ | id | title | author | submission_date | +----+------------+----------+-----------------+ | 31 | PHP webs | Doe | 2018-04-16 | | 38 | nexJohn | Doe | 2018-04-20 | | 39 | nexJohn123 | Doe baok | 2018-04-20 | +----+------------+----------+-----------------+ 3 rows in set (0.00 sec)
利用...匹配查詢4個字符的名稱:如查詢以J開頭的 並且是...表示三個字符
如:要找到只包含3個字符的名字,使用“^"和“$"來匹配名字的開頭和結尾,且放3個“."在中間
mysql> select * from t_users where title regexp '^J...$'; +----+-------+--------+-----------------+ | id | title | author | submission_date | +----+-------+--------+-----------------+ | 32 | John | Doe | 2018-04-20 | | 33 | John | Doe | 2018-04-20 | | 34 | John | Doe | 2018-04-20 | | 35 | John | Doe | 2018-04-20 | | 36 | John | Doe | 2018-04-20 | | 37 | John | Doe | 2018-04-20 | +----+-------+--------+-----------------+ 6 rows in set (0.00 sec)
利用{n} ;n表示重復次數來替換上面的語句查詢:
mysql> select * from t_users where title regexp '^.{4}$'; +----+-------+--------+-----------------+ | id | title | author | submission_date | +----+-------+--------+-----------------+ | 32 | John | Doe | 2018-04-20 | | 33 | John | Doe | 2018-04-20 | | 34 | John | Doe | 2018-04-20 | | 35 | John | Doe | 2018-04-20 | | 36 | John | Doe | 2018-04-20 | | 37 | John | Doe | 2018-04-20 | +----+-------+--------+-----------------+ 6 rows in set (0.00 sec)