文章目錄
- 前言
- 一、MySQL是什么?
- 二、資料庫的常見概念
- 三、資料庫存盤資料的特點
- 四、SQL語言的分類
- 1.)DML
- 2.)DDL
- 3.)DCL
- 五、資料庫的基本操作
- 5.1.)創建資料庫
- 5.2)創建表
- 5.3)描述各種資料型別
- 5.4)修改表的定義
- 5.5)向表中插入、更新、洗掉資料
- 六、資料庫查詢
- 6.1)基本的SELECT陳述句
- 6.2)過濾和排序資料
- 6.3)分組函式
- AVG(平均值)和SUM (合計)函式
- MIN(最小值)和 MAX(最大值)函式
- COUNT(計數)函式
- 合計函式-upper/lower
- 字串相關函式
- 數學相關函式
- 時間和日期相關函式
- 6.4)分組查詢
- 6.5)多表查詢
- 七、約束
- 7.1.什么是約束?
- 7.2六種約束:
- 7.3.PRIMARY KEY 約束
- 7.4.FOREIGN KEY 約束
- 7.5.CHECK 約束
- 7.6.觸發器
- 總結
前言
講完Java基礎后,后臺老師就直接開奔資料庫,花了兩天的時間滔滔不絕的帶過MySQL資料庫基礎,鄙人也按照慣例寫一下小小的筆記來鞏固加深一下自己的印象,
不知不覺已經熱愛上寫博客文章了,對于現在的自己相對于從前來說也是一種突破吧,廢話不多說了,開工,
一、MySQL是什么?
- 簡單地說:資料庫(Database或DB)是存盤、管理資料的容器,
- 嚴格地說:資料庫是“按照某種資料結構對資料進行組織、存盤和管理的容器”,
- 總結:資料永遠是資料庫的核心.
二、資料庫的常見概念
- DB:資料庫,存盤資料的容器.
- DBMS:資料庫管理系統,又稱位資料庫軟體或資料庫產品,用于創建或管理DB.
- SQL:結構化結構查詢語言,用于和資料庫通信的,是幾乎所有的主流資料庫軟體通用戶的語言,不是某個資料庫軟體特有的,
- 所謂安裝資料庫服務器,知識在機器上裝了一個資料庫管理程式,這個管理程式可以管理多個資料庫,一般開發人員針對每一個應用創建一個資料庫;
- 為保存應用中物體的資料,一般會在資料庫創建多個表,以保存程式中的物體的資料;
- 資料庫服務器、資料庫和表的關系如圖所示:

三、資料庫存盤資料的特點
- 資料存放到表中,然后表再放到庫中,
- 一個庫中可以又多張表,每張表具有唯一的表名來標識自己,
- 表中有一個或多個列,列又稱為欄位,相當于Java中的屬性,
- 表中,每一行資料,相當于java中的物件,
你比如說下面這張圖描繪的很清晰:

需要注意的是:
- 表的一行稱之為一條記錄;
- 表中一條記錄對應一個java物件的資料,
四、SQL語言的分類
- DML(Data Manipulation Language):資料操縱陳述句,用于添加、洗掉、修改、查詢資料庫記錄,并檢查資料完整性,
- DDL(Data Definition Language):資料定義陳述句,用于庫和表的創建、修改、洗掉,
- DCL(Data Control Language):資料庫控制陳述句,用于定義用戶的訪問權限和安全級別,
1.)DML
用途:DML用于查詢于修改資料記錄,包括如下SQL陳述句:
- INSERT:添加資料到資料庫中,
- UPDATE :修改資料庫中的資料,
- DELETE:洗掉資料庫中的資料,
- SELECT:選擇(查詢)資料.
2.)DDL
用途:DDL用于定義資料庫的結構,比如創建、修改或洗掉 資料庫物件,包括如下SQL陳述句:
- CREATE TABLE:創建資料庫表.
- ALTER TABLE:更改表結構、添加、洗掉、修改列長度.
- DROP TABLE:洗掉表.
- CREATE INDEX:在表上建立索引.
- DROP INDEX:洗掉索引.
3.)DCL
用途:DCL用來控制資料庫的訪問,包括如下SQL陳述句:
- GRANT:授予訪問權限.
- REVOKE:撤銷訪問權限.
- COMMIT :提交事務處理.
- ROLLBACK: 事務處理回退.
- SAVEPOINT:設定保存點.
- LOCK:對資料庫的特定部分進行鎖定.
五、資料庫的基本操作
5.1.)創建資料庫
基本陳述句
CREATE DATABASE [IF NOT EXISTS] <資料庫名>
[[DEFAULT] CHARACTER SET <字符集名>]
[[DEFAULT] COLLATE <校對規則名>];
也可以直接簡便的創建資料庫:
CREATE DATABASE [IF NOT EXISTS] <資料庫名>
或者你還可以更簡單的創建資料庫:


OK 完成,
但是需要注意的是:
- IF NOT EXISTS:在創建資料庫之前進行判斷,只有該資料庫目前尚不存在時才能執行操作,此選項可以用來避免資料庫已經存在而重復創建的錯誤,
- [DEFAULT] CHARACTER SET:指定資料庫的默認字符集,
- [DEFAULT] COLLATE:指定字符集的默認校對規則,
5.2)創建表
陳述句:
CREATE TABLE table_name
(
field1 datatype DEFAULT NULL,
field2 datatype COMMENT NULL,
field3 datatype,
)
- 注意:創建表之前,要先使用use db 陳述句使用庫,
那么各引數意思分別表示啥意思?之間又有啥關系呢?
character set 代表字符集
collate 代表校對規則
field:指定列名, datatype:指定列型別,
注意:創建表時,要根據需保存的資料創建相應的列,并根據資料的型別定義相應的列型別,實作添加自增長陳述句,主鍵欄位后加auto increment(只適用MySQL),
例如user物件
id int
name string
password string
birthday date

5.3)描述各種資料型別
先上一張圖:

char 和varchar型別;說明:用來保存mysql中較短的字串,

- char : 固定長度的字符 ;它的特點是比較耗費空間但是效率高,M可以省略,默認為1
- varchar :可變長度的字符,它的特點與char相反,比較節省空間,但是效率低,
緊接著是timestamp 和datatime型別;說明:用來保存日期型別,

- 創建表: 兩個欄位型別分別為timestamp,datetime,
- 入庫是now()
- 查看表資料內容
- 查看時區:
show variables like 'time_zone' - 修改時區:
set time_zone='+9:00'
5.4)修改表的定義
使用ALTER TABLE 陳述句追加、修改、或者洗掉列的語法,
添加陳述句:
ALTER TABLE table
ADD (column datatype [DEFAULT expr]
[, column datatype]...);
修改表陳述句:
ALTER TABLE table
MODIFY (column datatype [DEFAULT expr]
[, column datatype]...);
洗掉表的陳述句:
ALTER TABLE table
DROP column;
- 修改表的名稱:Rename table 表名 to 新表名
- 修改表的字符集:
alter table student character set utf8;
5.5)向表中插入、更新、洗掉資料
- 使用INSERT 陳述句向表中插入資料,

- 使用這種語法一次只能向表中插入一條資料
插入資料
- 為每一列添加一個新值,
- 按列的默認順序列出各個列的值,
- 再INSERT 子句中隨意列出列名和他們的值,
- 字符和日期資料應包含在單引號中,
比如說:
INSERT INTO
departments(department_id, department_name,
manager_id, location_id)
VALUES (70, 'Public Relations', 100, 1700);
1 row created.
INSERT INTO
employees(employee_id,last_name,email,hire_date,job_id) VALUES
(300,’Tom’,’tom@126.com’,to_date
(‘2012-3- 21’,’yyyy-mm-dd’),’SA_RAP’);
1 row created.
UPDATE 陳述句語法
- 使用UPDATE 陳述句更新資料
比如說:

- 可以一次更新多條資料,
- 如果需要回滾護具,需要保證在DML前,進行設定: SET AUTOCOMMIT = FALSE;
更新資料
- 使用 WHERE字句指定需要更新的資料,
UPDATE employees
SET department_id = 70
WHERE employee_id = 113;
- 如果省略WHERE字句,則表中的所有資料都將被更新,
UPDATE employees
SET department_id = 110;
比如說我在表里新增加三條資料

然后新建查詢-輸入
update user
set salary ='5000';
那么所有salary列的資料全部變成了5000



DELETE陳述句
使用DELETE 陳述句從表中洗掉資料,

table 是表名 WHERE 是約束-操作限制條件,
洗掉資料:舉個栗子,
- 使用WHERE字句洗掉指定的記錄,
DELETE FROM departments
WHERE department_name = 'Finance';
- 同理如果省略WHERE字句,則表中的全部資料都將被洗掉,
DELETE FROM copy_emp;
六、資料庫查詢
6.1)基本的SELECT陳述句

- SELECT ——標識選擇哪些列,
- FROM ——標識從哪歌表中選擇,
選擇全部列
select * from departments;
選擇特定的列
select department_id,location_id from departments;
注意:
- SQL語言 大小寫不敏感,
- SQL可以寫在一行或者多行,
- 關鍵字不能被縮寫也不能分行,
- 各字句一般要分行寫,
- 使用縮進提高陳述句的可讀性,
6.2)過濾和排序資料
概述:
- 使用WHERE字句,將不能滿足條件的進行過濾掉,

- WHERE字句緊隨FROM字句,
BETWEEN用法:
SELECT last_name, salary FROM employees
WHERE salary BETWEEN 2500 AND 3500;
標識查詢 員工表-資料為薪資在2500到3500之間的員工姓名,
IN 用法:使用 IN運算顯示串列中的值,
SELECT employee_id, last_name,
salary, manager_id FROM employees
WHERE manager_id IN (100, 101, 201);
標識查詢 id 為100,101,201 的員工id,
LIKE 查詢約束
-
使用LIKE運算選擇類似的值,
-
選擇條件可以包含字符或數字:
–%代表零各或多個字符(任意個字符),
–_ 代表一個字符,
ORDER BY 字句 -
使用ORDER BY 子句排序,
----ASC(ascend):升序,
----DESC(descend):降序, -
ORDER BY 子句在SELECT陳述句的 結尾,
6.3)分組函式
組函式型別
- AVG()
- COUNT()
- MAX()
- MIN()
- SUM()
AVG(平均值)和SUM (合計)函式
可以對資料型資料使用AVG和SUM函式,
SELECT AVG(salary), MAX(salary),
MIN(salary), SUM(salary)
FROM employees
WHERE job_id LIKE '%REP%';
MIN(最小值)和 MAX(最大值)函式
可以對資料型資料使用MIN和MAX函式,
SELECT MIN(hire_date),MAX(hire_date)
FROM employee;
COUNT(計數)函式
COUNT(*) 回傳表中記錄總數,適用于任意資料型別,

合計函式-upper/lower
- upper/lower函式將文本轉換為大寫/小寫形式,
例如:
Select upper/lower(列名) from tablename
[WHERE where_definition]
字串相關函式

數學相關函式

時間和日期相關函式

這些函式老師演示過各種例子,比如說拿其中的數學和字串來說:
--CHARSET回傳字串字符集
select CHARSET('xywang');
輸出結果utf-8,
--CONCAT拼接字串
select CONCAT('%','xwyang','%')
輸出結果:%xwyang%,
--mysql的下標從1,沒有找到回傳0,回傳substring在string中出現的位置
select INSTR('123456789','23')
select INSTR('23','12345678')
輸出結果:2 0
--轉換成大寫
select UCASE('Apppp');
select UPPER('Apppp');
--轉換成小寫
select LOWER('AAAAp');
--左邊起取length個字符
SELECT LEFT('12345678',4);
--uft8一個漢字3位
--Gbk 一個漢字兩位
--LENGTH 回傳占的位數
SELECT LENGTH('aaaa張');
6.4)分組查詢
GROUP BY 子句


6.5)多表查詢
6.5.1 Mysql連接
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
- 在WHERE子句中寫入連接條件,
- 在串列中有相同列時,在列名之間加上表名前綴,
6.5.2.區分重復的列名
- 使用表名前綴在多個表中區分相同的列,
- 在不同表中具有相同列名的列可以用表的別名 加以區分,
- 如果使用了表別名,則在select陳述句中需要使 用表別名代替表名,
- 表別名最多支持32個字符長度,但建議越少越好,
6.5.3表的別名
- 使用別名可以簡化查詢,
- 使用表名前綴可以提高執行效率,
比如說:
SELECT bt.id,NAME,boyname FROM beauty bt,boys b;
WHERE bt.`boyfriend_id`=b.id ;
這里的查詢bt 就是一個表的別名,查詢bt.id 和名字, 從bt 和 b 表中, where條件加主外鍵連接, id,
使用ON 子句創建連接
- 自然連接中是以具有相同名字的列為連接條件的,
- 可以使用 ON 子句指定額外的連接條件,
- 這個連接條件是與其它條件分開的,
- ON 子句使陳述句具有更高的易讀性,
七、約束
7.1.什么是約束?
- 為了保證資料的一致性和完整性,SQL規范以約 束的方式對表資料進行額外的條件限制,
- 約束是表級的強制規定,
- 可以在創建表時規定約束(通過 CREATE TABLE 陳述句,或者在表創建之后也可以(通 過 ALTER TABLE 陳述句).
約束
7.2六種約束:

- 根據約束資料列的限制,約束可分為:
—單列約束:每個約束只約束一列,
— 多列約束:每個約束可約束多列資料, - 根據約束作用范圍,約束可分為:
—列級約束只能作用在一個列上,跟在列的定義后面,
—表級約束可以作用在多個列上,不與列一起,而是 單獨定義,
NOT NULL約束
- 非空約束用于確保當前列的值不為空值,非空約束只能出現在表物件的列上,
- Null型別特征:
-----所有的型別的值都可以是null,包括int、
float等資料型別,
------空字串””不等于null,0也不等于null,
UNIQUE約束
- 同一個表可以有多個唯一約束,多個列組合的約束, 在創建唯一約束的時候,如果不給唯一約束名稱,就 默認和列名相同,
- MySQL會給唯一約束的列上默認創建一個唯一索引,
示例代碼:
CREATE TABLE USER( id INT NOT NULL, NAME VARCHAR(25),
PASSWORD VARCHAR(16),
#使用表級約束語法
CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD)
);
- 添加唯一約束:示例
ALTER TABLE USER
ADD UNIQUE(NAME,PASSWORD);
ALTER TABLE USER
ADD CONSTRAINT uk_name_pwd UNIQUE(NAME,PASSWORD);
ALTER TABLE USER
MODIFY NAME VARCHAR(20) UNIQUE;
- 洗掉約束:
ALTER TABLE USER
DROP INDEX uk_name_pwd;
7.3.PRIMARY KEY 約束
- 主鍵約束相當于唯一約束+非空約束的組合,主鍵約束列不允許重復,也不允許出現空值,
- 如果是多列組合的主鍵約束,那么這些列都不允許為空值,并且組合的值不允許重復,
- 每個表最多只允許一個主鍵,建立主鍵約束可以在列級別創建,也可以在表級別上創建,
- MySQL的主鍵名總是PRIMARY,當創建主鍵約束時,系統默認會在所在的列和列組合上建立對應的唯一索引,
示例代碼:
CREATE TABLE emp4(
id INT AUTO_INCREMENT
PRIMARY KEY, NAME VARCHAR(20)
);
這是列級模式,↑
CREATE TABLE emp5(
id INT NOT NULL AUTO_INCREMENT,
NAME VARCHAR(20),
pwd VARCHAR(15),
CONSTRAINT emp5_id_pk PRIMARY KEY(id)
);
這是表級模式,↑
7.4.FOREIGN KEY 約束
- 外鍵約束是保證一個或兩個表之間的參照完整性, 外鍵是構建于一個表的兩個欄位或是兩個表的兩個欄位之間的參照關系,
- 從表的外鍵值必須在主表中能找到或者為空,當主 表的記錄被從表參照時,主表的記錄將不允許洗掉, 如果要洗掉資料,需要先洗掉從表中依賴該記錄的數 據,然后才可以洗掉主表的資料,
- 還有一種就是級聯洗掉子表資料,
- 注意:外鍵約束的參照列,在主表中參考的只能是主鍵或唯一鍵約束的列,
7.5.CHECK 約束
- MySQL可以使用check約束,但check約束對資料 驗證沒有任何作用,添加資料時,沒有任何錯誤或 警告
示例代碼:
CREATE TABLE temp(
id INT AUTO_INCREMENT,
NAME VARCHAR(20),
age INT CHECK(age > 20), PRIMARY KEY(id)
);
7.6.觸發器
示例代碼:
CREATE TRIGGER 觸發器名稱 BEFORE/AFTER INSERT/UPDATE ON 表名
FOR EACH ROW
BEGIN
DECLARE msg varchar(100);
IF NEW.列名 (過濾條件 )
THEN
SET msg = CONCAT(‘您輸入的:’,NEW.列名,' 為無效的,');
SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = msg;
END IF;
END;
總結
以上就是今天MySQL復習,老師要講的內容,簡單的整理了一下,
本文僅僅簡單介紹了MySQL的基礎知識,對于專業以及身處的知識并未涉及到,而這些基礎知識確實可以為之后的實戰打下基礎,提供了大量能使我們快速便捷地處理資料的函式和方法,好了,打字不容易,如果本文對你有幫助的話別忘了一鍵三連噢,我是海海不掉頭發,
要成功不需要什么特別的才能,只要把你能做的小事做得好就行了,——維龍
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/202485.html
標籤:AI
上一篇:Java語言使用JDBC連接Mysql資料庫的詳細步驟,以及詳細解釋(一)
下一篇:Mysql MVVC筆記
