mysql 5.7 增刪改查及別名的用法


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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM