MySQL學習:
關於MySQL基本概念
數據庫(DataBase)
簡稱DB:按照某一特定數據結構來組織,存儲數據的倉庫。
數據庫管理系統(DataBase Management System)
簡稱DBMS,是爲了建立,操作和維護數據庫而設計的一個程序,介於用戶和數據庫之間。
SQL分類
- DDL(Data Definition Language-數據定義語句)
用來定義數據庫的對象,如數據表、視圖、索引等
如: create、alter、drop - DML (Data Manipulation Language-數據操縱語句)
在數據庫表中更新,增加和刪除記錄
如 insert、delete、update— 增刪改 - DCL (Data Control Language-數據控制語句)
指用於設置用戶權限和控制事務語句
如grant,revoke,if…else,while,begin transaction - DQL(Data Query Language select-數據查詢語句)
數據庫的操作
創建數據庫
create database 數據庫名;
create database 數據庫名 character set 字符集;
create database 數據庫名 character set 字符集 collate 校對規則;
查看數據庫
show databases; --查看所有的數據庫
show create database 數據庫名; --顯示數據庫創建
選擇數據庫
use 數據庫名;
修改數據庫
alter database 數據庫名 character 字符集;
刪除數據庫
drop database 數據庫名;
查看當前數據庫
select database(); --查看當前使用的數據庫
數據表的操作
在介紹數據表之前,說一下數據類型。
- 字符串類型
varchar、char - 大數據類型
blob、text - 數值型
tinyint、smallint、int、bigint、float、double - 邏輯型
bit - 日期型
date、time、datetime、timestamp
創建數據表
create table 表名
(
field1 datatype (auto_increment), --說明此列每增加一行時自動增量。
field2 datatype (unique), --定義唯一約束
field3 datatype (not null), --定義非空約束
field4 datetype (default 1), --指定默認值爲1
primary key(field1) --指定爲主鍵
)character set 字符集 collate 校對規則;
每個表只允許一個AUTO_INCREMENT列,而且它必須被索> 引。
可以使用last_insert_id()語句來獲取最後一個AUTO_INCREMENT值。
查看數據表
show tables; --查看所有的數據表
show create table 數據表; --查看錶的創建過程
desc 數據表; --查看數據表結構
修改數據表
--add:添加列
alter table 表名 add 列名 列類型 (列的約束) ;
--modify:修改列
alter table 表名 modify 變量名 數據類型;
--change:修改列名
alter table 表名 change 原名 新名 新數據類型;
--drop:刪除列
alter table 表名 drop 列名;
--修改表名
alter table 原表名 to 新表名;
--修改表的字符集
alter table 表名 character set 字符集;
刪除數據表
DROP TABLE 數據表名;
重命名數據表
RENAME TABLE 舊錶名 TO 新表名;
-- 重命名多個表名
RENAME TABLE 舊錶名1 TO 新表名1,
舊錶名2 TO 新表名2,
舊錶名3 TO 新表名3;
對數據表的數據操作
CRUD ————增刪改查
增數據
- 一般寫法
insert into 表名(列1,列2,列3...) values(值1,值2,值3...);
- 簡單寫法
insert into 表名 values(值1,值2,值3...);
注意:
省略的列必須滿足以下兩個條件:
1、該列定義爲允許NULL值(無值或空值)。
2、在表定義中給出默認值。
- 批量插入
insert into 表名 values(值1,值2,值3...),(值4,值5,值6...),(值7,值8,值9...);
- 查看錶中的所有數據
select * from 表名;
補充:
要提高整體性能,可以在 INSERT 和 INTO 之間添加關鍵字 LOW_PRIORITY,指示MySQL降低INSERT語句的優先級。
INSERT LOW_PRIORITY INTO
刪數據
使用DELETE時要加WHERE關鍵字,否則會刪除表中的所有行。
delete from 表名 [where 條件];
delete from 表名; --刪除全部記錄
delete from 表名 where [...] --刪除滿足條件的記錄
truncate 表名; --刪除全部數據
注:
delete 刪除數據 和 truncate 刪除數據 有什麼區別?
delete:(DML)一條一條刪除表中的數據
truncate:(DDL)先刪除表再重建表
當數據較少時,delete比較高效。
當數據較多時,truncate比較高效。
同時也要注意:DELETE刪除整行而不是整列,如果要刪除整列要使用UPDATA語句。
改數據
如果更改數據的時候沒加where條件,會改變表中的所有數據。
update 表名
set 列名1=值1,列名2=值2,...
where 條件;
- 如果要刪除某一列的數據,可以直接把它設置爲NULL。
UPDATE customers
SET cost_email = NULL
WHERE cust_id = 10005;
查數據
--查看錶中所有的數據
select * from 表名;
--查看錶中列n,m的數據
select 列名n,列名m from 表名;
--表別名
select 別名.列名1,別名.列名2 from 表名 as 別名;
--列表名
select 列名1 (as) 別名1,列名2 (as) 別名2 from 表名;
--去掉重複的值(distinct)
select distinct 列名 from 表名;
--運算查詢
select *,(列名運算) (as 別名) from 表名;
--條件查詢
select 列名 from 表名 where (條件);
-
like
_:表示一個字符。
%:表示多個字符。 -
in
在某個範圍中獲得值。
eg:select * from 表名 where 列n in (...);
-
order by
asc:(默認)升序
desc:降序
eg:select * from 表名 order by 列名 desc;
-
update
修改表中的數據
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
-
聚合函數
sum() : 求和
avg() : 求平均值
count() : 統計數量
max()/min() : 最大/最小值
eg :
select sum() from 表名;
select 列 from 表名 having (聚合函數)
總的來說,就是:
子句 | 說明 | 是否必須使用 |
---|---|---|
SELECT | 要返回的列或表達式 | 是 |
FROM | 從中檢索數據的表 | 僅在從表選擇數據時使用 |
WHERE | 行級過濾 | 否 |
GROUP BY | 分組說明 | 僅在按組計算聚集時使用 |
HAVING | 組級過濾 | 否 |
ORDER BY | 輸出排序順序 | 否 |
LIMIT | 要檢索的行數 | 否 |