mysql 經典入門教程_MySQL 經典入門教程

MySQL 經典入門教程

1 定義

數據庫中的表:一行叫一條記錄。每一列叫一個屬性,或一個字段。

主鍵:表中的某個特殊字段,具有唯一的確定的值,可以根據該字段唯一的確定一條記錄

外鍵:表中的某個字段的值為另一張表(也可以是自身)中的某個字段的值。

2 MySQL 的數據類型

2.1 數值

TINYINT 小整型

INT/INTEGER 整型

BIGINT 長整型

FLOAT 小數

DOUBLIE 雙精度小數

2.2 日期

DATE YYYY-MM-DD

TIME HH:MM:SS

YEAT YYYY

DATETIME 混合

TIMESTAMP 高精度

2.3 字符串

CHAR 定長字符串

VARCHAR 不定長

BLOB 二進制文件

LONGBLOB 長二進制文件

TEXT 長文本數據

LONGTEXT 長文本數據

注:以上僅總結了常用類型,并不是所有類型

3 SQL語句

3.1 數據庫的創建

CREATE DATABASE 數據庫名 [參數]

例如創建一個名為test的數據庫,設置字符集為utf-8

CREATE DATABASE test CHARACTER SET utf8;

出現下面的內容即說明創建成功。

Query OK, 0 rows affected (0.00 sec)

你可以使用下面的語句查看新創建的數據庫

SHOW DATABASES;

選擇需要操作的數據庫

USE test;

執行完上面的語句后出現Database changed,

你所有的操作都將在test數據庫中進行。

3.2 創建表

CREATE TABLE 表名 (

列名 列數據屬性 [約束],

列名 列數據屬性,

... ...

);

例如創建一個users表id是主鍵,自增長。

PRIMARY KEY:約束 主鍵約束

AUTO_INCREMENT:約束 自增長

CREATE TABLE users( id INTEGER PRIMARY KEY AUTO_INCREMENT, account VARCHAR(50), pwd VARCHAR(50), );

3.3 插入數據

INSERT INTO 表名 VALUES (值1, 值2,...,NULL,...);

這種插入方式一定要將所有的值都寫上,如果為空的話寫NULL。值與列要一一對應

主鍵如果設置為自增的話寫NULL

也可以指定所要插入數據的列,向下面這樣。

INSERT INTO 表名 (列1, 列2,...) VALUES (值1, 值2,....);

按回車后出現

Query Ok, 1 row affected (0.05 sec)

說明成功。否則請檢查SQL語句。

例如向剛剛創建的users表中插入一條數據

INSERT INTO users VALUES(NULL,'admin','admin');

第一列是id,主鍵自增,不需要插入。

3.4 查詢數據

SELECT * FROM 表名 [WHERE 條件] [參數];

例如查詢users表里的所有數據的 account 列。

SELECT account FROM users;

3.4.1 WHERE 查詢

可以給FROM后面的表起一個別名。例如:

SELECT tn.id,tn.account FROM tablename AS tn WHERE tn.id = 1;

3.4.2 WHERE 后的條件語句

WHERE后面可以寫多種條件語句。

1. 關系語句: =,>,=,<=

2. 邏輯語句: AND,OR,NOT

3. IS NULL: 是否為空

4. BETWEEN:在兩者之間

WHERE u.id BETWEEN 11 AND 15;

id 在11-15之間。

5. IN:在..之中

WHERE u.account IN (值1,值2,...);

查詢 account 在(值1,值2,...)之中的數據

5. LIKE:模糊匹配

WHERE u.id LIKE '通配符';

通配符

'%':替代零個或多個字符

'_':替代一個字符

WHERE u.account LIKE '%A%';查詢account字段中含有'A'的數據。

[charlist]:字符列中的任何單一字符

WHERE u.account LIKE '[ASD]%'; 查詢以A S D 開頭的數據。

[!charlist]:不在字符列中的任何單一字符

WHERE u.account LIKE '[!ASD]%'; 查詢不以A S D 開頭的數據

3.4.3 聚合函數

SELECT AVG(列名) FROM 表名

1. AVG(列名):返回某一列的平均值

2. COUNT(列名):返回匹配指定條件的行數

3. FIRST(列名):返回指定的字段中第一個記錄的值。

4. LAST(列名):返回指定的字段中最后一個記錄的值。

5. MAX(列名):返回一列中的最大值。NULL 值不包括在計算中。

6. MIN(列名):返回一列中的最小值。NULL 值不包括在計算中。

7. SUM(列名):返回數值列的總數(總額)。

8. UCASE(列名):把字段的值轉換為大寫。

9. LCASE(列名):把字段的值轉換為小寫。

10. MID(列名,開始位置,截取長度):用于從文本字段中提取字符。

SELECT MID(account,1,3) as uname FROM users;

11. LEN(列名):返回文本字段中值的長度。

12. ROUND(列名,小數位數):用于把數值字段舍入為指定的小數位數。

13. CURDATE():返回當前日期。YYYY-MM-DD。

14. CURTIME():返回當前時間。HH:MM:SS。

15. NOW():返回當前時間。YYYY-MM-DD HH:MM:SS。

16. YEAR(d),MONTH(d),DAY(d):分別返回參數的年,月,日。

17. ADDDATE(d,n):在d的時間上加n天。

18. SUBDATE(d,n):在d的時間上減n天。

19. DATE_FORMAT(d,f):格式化時間d。

%a 縮寫星期名

%b 縮寫月名

%c 月,數值

%D 帶有英文前綴的月中的天

%d 月的天,數值(00-31)

%e 月的天,數值(0-31)

%f 微秒

%H 小時 (00-23)

%h 小時 (01-12)

%I(大寫的i) 小時 (01-12)

%i 分鐘,數值(00-59)

%j 年的天 (001-366)

%k 小時 (0-23)

%l(小寫的L) 小時 (1-12)

%M 月名

%m 月,數值(00-12)

%p AM 或 PM

%r 時間,12-小時(hh:mm:ss AM 或 PM)

%S 秒(00-59)

%s 秒(00-59)

%T 時間, 24-小時 (hh:mm:ss)

%U 周 (00-53) 星期日是一周的第一天

%u 周 (00-53) 星期一是一周的第一天

%V 周 (01-53) 星期日是一周的第一天,與 %X 使用

%v 周 (01-53) 星期一是一周的第一天,與 %x 使用

%W 星期名

%w 周的天 (0=星期日, 6=星期六)

%X 年,其中的星期日是周的第一天,4 位,與 %V 使用

%x 年,其中的星期一是周的第一天,4 位,與 %v 使用

%Y 年,4 位

%y 年,2 位

3.4.4 分組查詢

GROUP BY 語句用于結合聚合函數,根據一個或多個列對結果集進行分組。

SELECT 列名, 聚合函數 FROM 表名 WHERE 條件 GROUP BY 列名

例如根據用戶表中的role屬性分組統計每組的人數

SELECT role, COUNT(id) FROM users GROUP BY role;

3.4.5 分組過濾

在 SQL 中增加 HAVING 子句原因是,WHERE 關鍵字無法與合計函數一起使用。

例如根據用戶表中的role屬性分組統計每組的人數,查找人數大于10的role

SELECT role, COUNT(id) FROM users GROUP BY role HAVING COUNT(id)>10;

3.4.6 結果排序

ORDER BY 語句用于根據指定的列對結果集進行排序。

默認為升序,降序使用關鍵字DESC。

例如根據用戶表中的role屬性分組統計每組的人數,按照人數降序排列

SELECT role, COUNT(id) count FROM users GROUP BY role ORDER BY count DESC;

3.5 更新數據

UPDATE 表名 SET 列名 = 新值 WHERE 條件

WHERE的修改條件是可選的,不寫的話修改表的所有數據

例如修改users表里的數據,將admin用戶的密碼改為root

UPDATE users SET pwd = 'root' WHERE account = 'admin';

3.6 刪除數據

DELETE FROM 表名 WHERE 條件

WHERE的修改條件是可選的,不寫的話刪除表的所有數據

4 表屬性的修改

4.1 表重命名

ALTER TABLE 表名 RENAME 新表名;

4.2 添加新的一列

ALTER TABLE 表名 ADD 列名 列數據類型 [AFTER 插入位置]

例如在users表的pwd字段后面添加一個role字段類型是INTEGER

ALTER TABLE users ADD role INTEGER AFTER pwd;

4.3 修改列

ALTER TABLE 表名 CHANGE 列名稱 新列名稱 新數據類型;

例如修改users表里的pwd字段改為password,類型是varchar(20)

ALTER TABLE users CHANGE pwd password varchar(20);

5 完整性約束

約束:對表中的列添加的一些限制條件。只有滿足這些條件時才能數據才能插入。

5.1 實體完整性

主鍵不能為空

5.2 參照完整性

外鍵的值必須是某張表中存在的值,可以為空

5.3 用戶自定義完整性

唯一性約束,某一列雖然不為主鍵,但是依然不能重復。

5.4 添加約束

ALTER TABLE 表名 ADD CONSTRAINT 約束名 約束類型(列名);

例如,給users表的role列添加外鍵約束,引用自roles表的id列

ALTER TABLE users ADD CONSTRAINT uq_phone FOREIGN KEY (`role`) REFERENCES `roles` (`id`);

5.5 常見約束類型

1. PRIMARY KEY: 主鍵

2. CHECK:限制列中的值的范圍。MySQL好像不支持

3. UNIQUE:唯一性約束

4. NOT NULL:非空約束

5. FOREIGN KEY:外鍵約束

6 范式

函數依賴:如果A依賴B,那么當確定A值后,B值也就確定了。

例如,在一張表中由于主鍵是唯一確定且不重復的。所以,當主鍵的值確定了,那么其他列的值也就確定了。我們便說,其他列都依賴主鍵。

完全函數依賴:如果B函數依賴于A,并且對于A的任何一個真子集A1,都有 B不依賴與A1,稱A對B完全函數依賴。

部分函數依賴:如果B函數依賴于A,但是B不完全函數依賴于A,稱B對A部分函數依賴。

例如,在一張表中,有兩列,一列是用戶名,而另一列里某些行里記錄的是用戶的id,而某些行里在這一列里記錄的是用戶所在部門的id,那么用戶名列便部分函數依賴于id列,因為存在某些行依賴于id列的子集(記錄是部門id的行)。

傳遞函數依賴:如果A函數依賴于B,B函數依賴于C,則稱A傳遞函數依賴于C。

6.1 1NF(第一范式)

確保列不可分,即每一列只描述一個屬性,即達到1NF

6.2 2NF(第二范式)

在1NF的基礎上消除部分函數依賴即達到2NF。即每一個非主屬性(非主鍵列)完全函數依賴于主鍵。

例如,可以將上面部分函數依賴的例子中的表,改成兩張表,一張用戶表,一張部門表,所有的用戶名列都完全依賴于主鍵。便達到2NF。

6.3 3NF(第三范式)

在2NF的基礎上消除傳遞函數依賴便達到3NF。即每一個非主屬性(非主鍵列)即不部分依賴于主鍵,也不傳遞依賴于主鍵。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370540.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370540.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370540.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

druid連接池初始化慢_7、SpringBoot -連接池(Durid)

一導入相關核心包<dependencies>二 在application.ymlspring三、配置Druid Datasource(可選)Configuration五、監控訪問 http://localhost:8080/druid&#xff0c; 使用上面配置的賬號密碼。四、自動配置原理源代碼Configuration說明DataSourceProperties 配置相關 首先找…

負載均衡與反向代理

如果用域名 映射多了Ip &#xff1b; 外網應該用來實現 GSLB 1 輪詢pstream nginxDemo { server 127.0.0.1:8081; server 127.0.0.1:8082; } 最少鏈接web請求會被轉發到連接數最少的服務器上。 upstream nginxDemo { least_conn; server 127.0.…

使用工廠方法模式設計最佳實踐

在前面的“設計模式”示例中&#xff0c;我們解釋了當今常用的“工廠”模式。 在本節中&#xff0c;我們將了解具有更多抽象的更高級的解決方案。 該模式稱為工廠方法設計模式。 定義&#xff1a; Factory方法模式提供了一種用于創建對象的方法&#xff0c;但是將對象創建委托…

偏導數

引入 一元函數導數&#xff1a; 在一元函數中&#xff0c;我們已經知道導數就是函數的變化率&#xff08;對于一個一元函數&#xff0c;x增大了多少&#xff0c;y增大了多少&#xff0c;這個就是變化率&#xff09;。對于二元函數我們同樣要研究它的“變化率”。在xOy平面內&am…

qt繪制一圈圓_Qt繪制圓

最近開始折騰Qt了&#xff0c;手頭上的一個項目需要用到Qt來繪制一些簡單圖像。記錄下Qt繪制圓的過程&#xff1a;對于以A為圓心&#xff0c;半徑為R的圓&#xff0c;外部有一個外切的正方形&#xff0c;正方形上有B點。如下圖所示&#xff1a;對于void QPainter::drawArc(int …

前端基礎之HTML

HTML介紹 Web服務本質 import socketsk socket.socket()sk.bind(("127.0.0.1", 8080)) sk.listen(5)while True:conn, addr sk.accept()data conn.recv(8096)conn.send(b"HTTP/1.1 200 OK\r\n\r\n")conn.secd(b"<h1>Hello world!</h1&g…

指令引用了 內存 該內存不能為read 一直彈窗_【翻譯】使用Rust測試ARM和X86內存模型

原文標題: The Story of Tail Call Optimizations in Rust 原文標題: Examining ARM vs X86 Memory Models with Rust原文鏈接: https://www.nickwilcox.com/blog/arm_vs_x86_memory_model/公眾號&#xff1a; Rust碎碎念蘋果公司最近宣布&#xff0c;他們將要把筆記本和桌面電…

Docker應用二:docker常用命令介紹

Docker常用命令使用介紹 docker中常用的命令: 1、docker search image_name:搜查鏡像 2、docker pull image_name:從鏡像庫中拉去鏡像 3、docker run image_name:運行容器 --restartalways:容器退出后重新啟動 --name:自定容器名字 --d:后臺運行容器 --i:交互模式 --t:打開一個…

關于Ubuntu使用筆記

Ubuntu vm tools 安裝 sudo apt install open-vm-tools-desktop 在安裝程序時Ubuntu會將安裝目錄鎖定&#xff0c;安裝結束后會解除鎖定&#xff0c;中斷安裝后無法再安裝其他軟件解決方案 E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavail…

具有可執行Tomcat的獨立Web應用程序

在部署應用程序時&#xff0c;簡單性是最大的優勢。 您將了解到&#xff0c;尤其是在項目發展且需要在環境中進行某些更改時。 將整個應用程序打包到一個獨立且自足的JAR中似乎是個好主意&#xff0c;尤其是與在目標環境中安裝和升級Tomcat相比。 過去&#xff0c;我通常將Tomc…

css網頁中設置背景圖片的方法詳解

在css代碼中設置背景圖片的方法&#xff0c;包括背景圖片、背景重復、背景固定、背景定位等 用css設置網頁中的背景圖片&#xff0c;主要有如下幾個屬性&#xff1a; 1&#xff0c;背景顏色 {">說明&#xff1a;參數取值和顏色屬性一樣 注意&#xff1a;在HTML當中&am…

node-sass安裝不成功的問題

SASS_BINARY_SITEhttps://npm.taobao.org/mirrors/node-sass/ npm install node-sass 簡單粗暴的執行上述的命令。轉載于:https://www.cnblogs.com/czaiz/p/6918114.html

npm升級依賴包_Taro跨端開發之依賴管理

昨天跑的好好項目,今天跑不起來我們在開發周期比較長的前端項目的時候,必然會遇到依賴管理的問題. 我們在開發項目的時候,我們用了大量的三方庫.這些三方的依賴庫時不時的會更新自己的代碼.第三方依賴庫的代碼更新會很容易造成代碼運行的不穩定, 比如昨天還跑的好好的項目,另一…

QOTD:Java線程與Java堆空間

以下問題很常見&#xff0c;并且與OutOfMemoryError有關&#xff1a;在JVM線程創建過程和JVM線程容量期間無法創建新的本機線程問題。 這也是我向新技術候選人&#xff08;高級職位&#xff09;提出的典型面試問題。 我建議您在查看答案之前嘗試提供自己的答復。 題&#xff1…

sql查詢重復項

select * from [表A] where id in (select id from [表A] group by id having count(id) >1 )轉載于:https://www.cnblogs.com/wuyujie/p/7885017.html

java util logging_簡單日志記錄,使用java.util.logging

jspservletJavaBean模式下,可以做個簡單的日志記錄,日志文件保存在服務器.(Tomcat)package controller;import java.io.File;import java.io.IOException;import java.util.logging.FileHandler;import java.util.logging.Level;import java.util.logging.Logger;import javax.…

超級高鐵

超級高鐵 作者&#xff1a;武培&#xff0c;高培焱 作品來源&#xff1a;實踐 美國電動汽車公司特斯拉和美國科技公司ET3都公布了“真空管鋼運輸”計劃&#xff0c;特斯拉將其命名為“超級高鐵”&#xff0c;ET3因列車外觀酷似膠囊因而稱之為“吃膠囊”列車。根據ET3公司的介紹…

使用Spring @Autowired List的責任鏈

在Spring 3.1中&#xff0c;有一種方法可以自動填充類型化的List&#xff0c;這在您想在代碼中稍微進行去耦和清理時非常方便。 為了向您展示它是如何工作的&#xff0c;我將實現一個簡單的責任鏈&#xff0c;該責任鏈將為通過的用戶打印一些問候。 讓我們從我們擁有的&#…

設計模式 建造者模式 與 Spring Bean建造者 BeanDefinitionBuilder 源碼與應用

建造者模式 定義: 將一個復雜對象的構建與它的表示分離&#xff0c;使得同樣的構建過程可以創建不同的表示主要作用: 在用戶不知道對象的建造過程和細節的情況下就可以直接創建復雜的對象如何使用: 用戶只需要給出指定復雜對象的類型和內容, 建造者模式負責按順序創建復雜對象…

java 布隆過濾器_什么是布隆過濾器(Bloom Filter)?

在日常工作中&#xff0c;有一個比較常見的需求&#xff0c;就是需要判斷一個元素是否在集合中。例如以下場景&#xff1a;給定一個IP黑名單庫&#xff0c;檢查指定IP是否在黑名單中&#xff1f;在接收郵件的時候&#xff0c;判斷一個郵箱地址是否為垃圾郵件&#xff1f;在文字…