Linux下MySQL的操作(最全)


注意:這里以mariadb為例

 

啟動mysql服務

systemctl start mariadb

  

登錄mysql

mysql -u root -p 

  

 

SQL語言分類

- 數據定義語言:簡稱【DDL】(Data Definition Language),用來定義數據庫對象:數據庫,表,列等。
關鍵字:create,alter,drop等
- 數據操作語言:簡稱【DML】(Data Manipulation Language),用來對數據庫中表的記錄進行更新。關鍵
字:insert,delete,update等
- 數據控制語言:簡稱【DCL】(Data Control Language),用來定義數據庫的訪問權限和安全級別,及創建
用戶;關鍵字:grant等
- 數據查詢語言:簡稱【DQL】(Data Query Language),用來查詢數據庫中表的記錄。關鍵字:select,
from,where等

  

如果要了解標准的內容,比較推薦的方法是【泛讀SQL92】(因為它涉及了SQL最基礎和最核心的一些內容),然
后增量式的閱讀其他標准。

 

DDL語句

數據庫操作:database

創建數據庫

create database 數據庫名;
create database 數據庫名 character set 字符集;

  

查看數據庫
查看數據庫服務器中的所有的數據庫:

show databases;

  

查看某個數據庫的定義的信息:

show create database 數據庫名;

  

刪除數據庫(慎用)

drop database 數據庫名稱;

  

其他數據庫操作命令

切換數據庫:

use 數據庫名;

  

查看正在使用的數據庫:

select database();

  

 

 

 

表操作:table

創建表

create table 表名(
 字段名 類型(長度) 約束,
 字段名 類型(長度) 約束
);

  

比如創建一個用戶表

 

單表約束:

主鍵約束:primary key
- 唯一約束:unique
- 非空約束:not null

  

主鍵約束 = 唯一約束 + 非空約束

查看表
查看數據庫中的所有表:

show tables;

  

查看表結構:

desc 表名;

  

刪除表

drop table 表名;

  

修改表

alter table 表名 add 列名 類型(長度) 約束;   --修改表添加列.
alter table 表名 modify 列名 類型(長度) 約束;  --修改表修改列的類型長度及約束.
alter table 表名 change 舊列名 新列名 類型(長度) 約束;  --修改表修改列名.
alter table 表名 drop 列名;          --修改表刪除列.
rename table 表名 to 新表名;         --修改表名
alter table 表名 character set 字符集;    --修改表的字符集

  

 


字段類型
常用的類型有:

 

 

 DML語句

插入記錄:insert

insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入所有列
insert into 表 (列名1,列名2,列名3..) values select (列名1,列名2,列名3..) from 表
insert into 表 values select * from 表

  

注意:
1. 列名數與values后面的值的個數相等
2. 列的順序與插入的值得順序一致
3. 列名的類型與插入的值要一致.
4. 插入值得時候不能超過最大長度.
5. 值如果是字符串或者日期需要加引號’’ ,一般是單引號

  

 

注意插入的時候如果沒有申明列,那么需要插入每一列,不然會報錯:column count doesn`t match value count at row xx.

 

更新記錄:update

update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 條件;

  

注意:
1. 列名的類型與修改的值要一致.
2. 修改值得時候不能超過最大長度.
3. 值如果是字符串或者日期需要加’’

 

刪除記錄:delete

delete from 表名 [where 條件];

  

刪除表中所有記錄使用【delete from 表名】,還是用【truncate table 表名】?

刪除方式:
- delete :一條一條刪除,不清空auto_increment記錄數。
- truncate :直接將表刪除,重新建表,auto_increment將置為零,從新開始。

  

DQL語句

 

DQL語法順序
完整DQL語法順序

SELECT DISTINCT
 < select_list >
FROM
 < left_table > < join_type >
JOIN < right_table > ON < join_condition >
WHERE
 < where_condition >
GROUP BY
 < group_by_list >
HAVING
 < having_condition >
ORDER BY
 < order_by_condition >
LIMIT < limit_number >

  

簡單查詢

查詢所有的商品

select * from product;

  

* 表示表的所有字段,也可以指定具體字段,甚至可以給字段取別名

select pname ,price from product;

  

別名查詢,使用的as關鍵字,as可以省略的

select * from product as p; 

  

去掉重復值

select distinct price from product;

  

運算查詢

select pname,price+10 from product;

  

數據庫的運算查詢是很消耗時間的,不建議在數據庫這樣操作,應該將數據在后台程序進行操作,數據庫只處理數據,不應該處理邏輯。

 

條件查詢

查詢商品價格>60元的所有的商品信息

select * from product where price > 60;

  

符號說明

> ,<,=,>=,<=,<>
like 使用占位符 _ 和 % _代表一個字符 %代表任意個字符.
  select * from product where pname like '%新%';
in在某個范圍中獲得值(exists).
  select * from product where pid in (2,5,8);

  

 

 排序

查詢所有的商品,按價格進行排序.(asc-升序,desc-降序)

默認就是asc

select * from product order by price;

  

聚合函數(組函數)

特點:只對單列進行操作

常用的聚合函數

sum():求某一列的和
avg():求某一列的平均值
max():求某一列的最大值
min():求某一列的最小值
count():求某一列的元素個數

  

獲得所有商品的價格的總和:

select sum(price) from product;

  

獲得所有商品的個數

select count(*) from product;

  

分組

根據cid字段分組,分組后統計商品的個數

select cid,count(*) from product group by cid;

  

根據cid分組,分組統計每組商品的平均價格,並且平均價格> 60;

select cid,avg(price) from product group by cid having avg(price)>60;

  

注意事項

select語句中的列(非聚合函數列),必須出現在group by子句中
group by子句中的列,不一定要出現在select語句中
聚合函數只能出現select語句中或者having語句中,一定不能出現在where語句中。

  

分頁查詢

分頁分為邏輯分頁和物理分頁

邏輯分頁:將數據庫中的數據查詢到內存之后再進行分頁。
物理分頁:通過LIMIT關鍵字,直接在數據庫中進行分頁,最終返回的數據,只是分頁后的數據。

  

lIMIT 關鍵字不是 SQL92 標准提出的關鍵字,它是 MySQL 獨有的語法。
通過 limit 關鍵字, MySQL 實現了物理分頁

SELECT * FROM table LIMIT [offset,] rows 

  

子查詢

子查詢允許把一個查詢嵌套在另一個查詢當中。
子查詢,又叫內部查詢,相對於內部查詢,包含內部查詢的就稱為外部查詢。
子查詢可以包含普通select可以包括的任何子句,比如:distinct、 group by、order by、limit、join和
union等;
但是對應的外部查詢必須是以下語句之一:select、insert、update、delete

  

其他查詢語句

union 集合的並集(不包含重復記錄)
unionall 集合的並集(包含重復記錄

  

 

 SQL解析順序

SELECT DISTINCT
 < select_list >
FROM
 < left_table > < join_type >
JOIN < right_table > ON < join_condition >
WHERE
 < where_condition >
GROUP BY
 < group_by_list >
HAVING
 < having_condition >
ORDER BY
 < order_by_condition >
LIMIT < limit_number >

  

然而它的執行順序是這樣的

1 FROM <left_table>
2 ON <join_condition>
3 <join_type> JOIN <right_table>  第二步和第三步會循環執行
4 WHERE <where_condition>  第四步會循環執行,多個條件的執行順序是從左往右的。
5 GROUP BY <group_by_list>
6 HAVING <having_condition>
7 SELECT 分組之后才會執行SELECT
8 DISTINCT <select_list>
9 ORDER BY <order_by_condition>
10 LIMIT <limit_number> 前9步都是SQL92標准語法。limit是MySQL的獨有語法。

 

關於sql解析還有很多,另開一個篇章專門介紹吧


免責聲明!

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



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