Mysql資料庫重要知識點(知了堂學習心得)

来源:https://www.cnblogs.com/yangyangfubin/archive/2018/01/02/8179172.html
-Advertisement-
Play Games

Mysql資料庫知識點 1.管理資料庫語句: 使用資料庫: use test; 添加資料庫: create database 資料庫名; create database test; 修改資料庫: alter database 資料庫名; alter database test; 刪除資料庫: dro ...


Mysql資料庫知識點

1.管理資料庫語句:

使用資料庫:

use test;

添加資料庫:

create database 資料庫名;

create database test;

修改資料庫:

alter database 資料庫名;

alter database test;

刪除資料庫:

drop database 資料庫名;

drop database test;

查看所有資料庫:

show databases;

2.管理表語句:

添加數據表:

create table 表名(

  列名 數據類型 數據約束,

  列名 數據類型 數據約束

);

create table student(

  name varchar(20) not null,

  age int(4)

)

修改數據表:

alter table 表名;

1)在表中增加新欄位

alter table student add colunm name varchar(20);

2)刪除表中的欄位

alter table student drop name;

3)修改表中欄位的類型

alter table student modify name varchar(10);

刪除數據表:

drop table 表名;

drop table student;

查看所有表:

show tables;

3.管理數據語句:

插入數據:

insert into 表名 (列1,列2...)  values (值1,值2...);

insert into student (name,age) values ('張三',20);

更新數據:

update 表名 set 列=修改值 where 條件;

update student set  name='李四' where name='張三';

刪除數據:

delete from 表名 where 條件;

delete from student where name='李四';

查詢數據:

selete *  from 表名 where 條件;

selete * from student where name='張三';

4.各種查詢語句:

查詢時指定別名:

1) selete id AS '編號',name AS '姓名' from student;

2) selete id '編號',name '姓名' from student;(AS可以省略)

查詢時合併列:

需求:查詢每個學生的總分

selete name AS '姓名',(servlet+mysql) AS '總成績' from student;

註意:合併列的欄位必須是數值類型的欄位

查詢時去除重覆(distinct):

需求:查詢有哪些地區的學生

selete DISTINCT address from student;

另一種語法

selete DISTINCT(address) from student;

條件查詢

邏輯條件: and  or

需求:查詢學生的id為1,且姓名為張三的學生

selete * from student where id=1 and name='張三';(交集)

需求:查詢學生的id為2,或姓名為張三的學生

selete * from student where id=2 or name='張三';(並集)

比較條件: >  <  >=  <=  =  <>  (between and--在...之間 包前包後)

需求:查詢servlet分數大於80分的學生

selete * from student where servlet>80;

需求:查詢mysql分數小於或等於85分的學生

selete * from student where mysql<=85;

需求:查詢servlet分數大於或等於80分,且小於或等於85分的學生

selete * from student where servlet>=80 AND servlet<=85;

代替上面語句的語法

selete * from student where servlet BETWEEN 80 AND 85;

需求:查詢年齡不等於30的學生

selete * from student where age<>30;

判空條件: is null,   is not null,   =’’,   <>’’

Null:表示沒有數據

空字元:表示有數據

需求:查詢沒有性別數據的學生(數據‘男’或‘女’)

selete* from student where gender IS NULL OR gender='';

需求:查詢有性別數據的學生

selete * from student where gender IS NOT NULL AND gender<>'';

模糊條件: like

模糊替代符號:

%:替代任意個字元

_:替代一個字元

需求:查詢姓“李”的學生

SELECT * FROM student WHERE NAME LIKE '李%';

需求:查詢姓名中包含‘四’字的學生

SELECT * FROM student WHERE NAME LIKE '%四%';

需求:查詢姓‘李’,全名只有兩個字的學生

SELECT * FROM student WHERE NAME LIKE '李_';

聚合函數查詢(用於統計結果)

Max()取最大值  min()取最小值  avg()取平均值  count()統計標的記錄數量 sum()求和

需求:查詢servlet的最高分

SELECT MAX(servlet) FROM student;

需求:查詢mysql的最低分

SELECT MIN(mysql) FROM student;

需求:查詢servlet的平均分

SELECT AVG(servlet) FROM student;

需求:查詢當前有幾個學生

SELECT COUNT(*) FROM student;

需求:查詢servlet成績的總和

SELETE SUM(servlet) from student;

分頁查詢(limit)

Limit起始行數,查詢的行數

起始行數從0開始

需求:查詢第1,2條數據

SELECT * FROM student LIMIT 0,2;

分頁查詢需知道:當前頁碼,每頁顯示條數

結論分頁查詢當前頁數據:select * from student limit (當前頁碼-1)*每頁顯示條數,每頁顯示條數;

需求:學生共20條數據,每頁顯示5條,共4頁

查詢第3頁(第11到15條)的學生數據:select * from student limit 10,5;

查詢後排序(order by)

DESC:降序。數值從大到小,字母z-a

ASC:升序。數值從小到大,字母a-z

預設情況下,按照插入的順序排序

需求:按照id的升序排序

select * from student order by id asc;

需求:按照servlet成績降序排序

select * from student order by servlet desc;

多個排序條件的情況:先按照前面的條件排序,當出現重覆記錄,再按照後面的條件排序

需求:按照age升序,再按照servlet成績升序排序

select * from student order by age asc,servlet asc;

分組查詢(group by)

需求:查詢每個地區有多少人

SELECT address,COUNT(*) FROM student GROUP BY address;

需求:統計男女的人數

註意:where條件必須放在group by 分組之前

SELECT gender,COUNT(*) FROM student WHERE gender IS NOT NULL AND gender<>'' GROUP BY gender;

分組後篩選(having)

需求:查詢哪些地區的人數是大於2個的地區

查詢哪些地區多少人 2)篩選人數大於2的地區

註意:having使用在group by分組之後,對分組後的條件進行篩選

SELECT address,COUNT(*) FROM student GROUP BY address HAVING COUNT(*)>2;

5.數據約束(給表添加數據約束,從而約束用戶操作表數據的行為

1)預設值約束(default)

create table test(

  name varchar(20),

  gender varchar(20) default ‘男’

)

需求:當不插入gender的時候,分配一個‘男’的預設值

註意:1)當沒有插入gender欄位的時候,分配一個預設值

2)非空約束(not null)

create table test(

  name varchar(20) not null,

  gender varchar(20)

)

需求;name欄位一定要有值(不能不插入數據,不能是null),這是給name添加非空約束

1)非空約束,不能不插入值

Insert into test(gender) values(‘男’);

2)非空約束,不能插入null

Insert into test(name,gender) values(null,’男’);

3)唯一約束(unique)

create table test(

  Id int unique,

  name varchar(20)

)

需求:id的值不能出現重覆。這時就要給id添加一個唯一約束

1)不能插入重覆的值

2)唯一約束,可以插入多個null。所以唯一約束不能約束null

Insert into test(id,name) values(1,’張三’);

4)主鍵約束(primary key)(唯一+非空)

註意;

1)通常情況下,我們會給每張表都設置一個主鍵欄位,用來標記記錄的唯一性

2)但是不建議把業務含義欄位作為主鍵,因為隨著業務的變化,業務欄位可能出現重覆

3)建議給每張表都獨立添加一個叫id的欄位,把這個id欄位設置成主鍵,用來作為記錄的唯一性

create table test(

  Id int primary key,

  name varchar(20)

)

1)唯一性

2)非空性

5)自增長約束(auto_increment)

create table test(

  Id int primary key auto_increment,

  name varchar(20)

)

自增長約束:初始值為0,每次遞增1

使用truncate table 刪除數據的時候,可以把自增長的初始值置為0

6)外鍵約束

員工表(副表:被別的表約束的表,外鍵設置在副表)

Create table employee(

  Id int primary key auto_increment,

  name varchar(20),

  deptId int,

  添加外鍵約束(foreign key)

  Constraint employee_dept_fk foreign key(deptId) references dept(id)

                 外鍵名                               外鍵欄位                

)

部門表(主表:約束別人的表)

Create table dept(

  Id int primary key auto_increment,

  Name varchar(20)

)

外鍵約束在什麼情況下會起作用?

插入數據:當往副表插入了主表中不存在的數據時,外鍵起作用

修改數據:當往副表中修改主表中不存在的數據時,外鍵起作用

刪除數據:副表中有關聯主表數據的情況下,當刪除主表數據時,外鍵起作用

當有了外鍵之後,應該如何管理數據呢?

插入數據:先插入主表的數據,再插入副表數據

修改數據:先修改主表數據,再修改副表數據

刪除數據:先刪除副表數據,再刪除主表數據

7)級聯技術(cascade)

級聯:當有了外鍵的時候,我們希望修改或刪除數據的時候,修改或刪除主表數據時,同時能夠影響副表的數據,這時就可以使用級聯

Create table employee(

  Id int primary key auto_increment,

  name varchar(20),

  deptId int,

  添加外鍵約束(foreign key)

  添加級聯修改:on update cascade

  添加級聯修改:on delete cascade

  Constraint employee_dept_fk foreign key(deptId) references dept(id) on update cascade on delete cascade

                 外鍵名                               外鍵欄位 

);

部門表(主表:約束別人的表)

Create table dept(

Id int primary key auto_increment,

Name varchar(20)

);

6.資料庫設計的三大範式

第一範式;要求表的每個欄位必須獨立的不可分割的單元

學生表: student name ---違反第一範式

               張三|狗娃

     王涵|張小涵

查詢:現用名中包含‘張’的學生

Select * from student where name like ‘%張%’;

學生表: student name old_name  ---符合第一範式

                    張三    狗娃

       王涵             張小涵

第二範式:在第一範式的基礎上,要求表的除主鍵以外的欄位都和主鍵有依賴關係

一張表只表達一個意思

員工表:employee

員工編號   員工姓名   部門名稱    訂單名稱   ---違反第二範式

 

員工表:employee

員工編號   員工姓名   部門名稱     ---符合第二範式

            訂單表:

            訂單編號 訂單名稱

第三範式:在第二範式的基礎上,要求表的除主鍵以外的欄位都只能和主鍵有直接決定的依賴關係

員工表:employee

員工編號   員工姓名  部門編號  部門名稱 ---違反第三範式(出現數據冗餘)

               1        張三       1        軟體開發部

               2        李四       1        軟體開發部

員工表:employee

員工編號   員工姓名  部門編號   ---符合第三範式

 1        張三       1

 2        李四       1

部門表:dept

部門編號   部門名稱

1          軟體開發部

8)多表查詢

1.交叉連接查詢(笛卡爾乘積:4*3=12,產生笛卡爾積的原因是沒有足夠的連接條件)(一般不用)

需求:查詢員工及其部門名稱

SELECT employee.name,dept.name

FROM employee,dept;

2.內連接查詢(使用最多)

多表查詢的步驟:1)確定查詢哪些表

               2)確定查詢哪些欄位

               3)確定連接條件(規則:條件=表數量-1)

SELECT employee.name,dept.name

FROM employee,dept

WHERE employee.deptId=dept.id;

另一種語法

SELECT e.name,d.name

FROM employee e

INNER JOIN dept d

ON e.deptId=d.id;

3.左外連接查詢(左表數據全部顯示,如果右邊不滿足,則顯示null)

需求:查詢部門及其部門的員工

SELECT d.name,e.name

FROM dept d

LEFT OUTER JOIN employee e

ON d.id=e.deptId;

4.右外連接查詢(右表數據全部顯示,如果左邊不滿足,則顯示null)

SELECT d.name,e.name

FROM employee e

RIGHT OUTER JOIN dept d

ON e.deptId=d.id;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.為何選擇Debian 作為一般用戶,系統是拿來用的,普及、穩定是首選,流行版本Ubuntu基於Debian,Mint基於Ubuntu,國產Deepin基於Debian。 2.獲取和安裝 Debian最新的穩定版是 9.3,代號stretch。最近一次更新於2017年12月09日。 訪問https ...
  • 解決辦法 在Windows下運行最新版的Apache和php7都需要Visual C++Redistributable 2015,而之前的版本不需要那麼高的,這個組件是運行Visual Studio 2015所建立的C++應用的必要組件,安裝一次即可解決環境問題,那麼去微軟官網下載安裝程式,安裝一遍 ...
  • 1.關機重啟命令 (1)shutdown命令:shutdown [選項] 時間 選項:-c 取消前一個關機命令 -h 關機 -r 重啟 例:shutdown -h now #立刻關機,root用戶 +10& #10分鐘後關機 20:30& #定義絕對重啟時間 (2)其他關機命令(不一定正確保存):h ...
  • Mac OS X一直能夠讀取NTFS驅動器,但隱藏在Mac OS X中是隱藏的選項,以支持格式化為NTFS的驅動器(NTFS代表新技術文件系統,是Microsoft Windows專有的文件系統格式)。在Mac上啟用NTFS寫入支持是有相當技術性的,並沒有得到蘋果公司的正式支持,因此它是一個實驗性的 ...
  • 從 1970 年開始,vi 和 vim 就成為了程式員最喜愛的文本編輯器之一。5年前,我寫了一個問自己名為 “每個程式員都應該知道的 100 個 vim 命令” 這次算是之前那篇文章的改進版,希望你會喜歡。 基礎 在文件中移動 剪切、複製和粘貼 搜索 替換 大小寫 讀寫文件 文件瀏覽器 和 Unix ...
  • 今天依舊是SQL Server資料庫。。。 1. 在月銷售情況表中刪除銷售價格在10元以下的商品月銷售信息 2. 查詢編號為G001、G002、G003三種商品的銷售情況,包括商店號gno、商品號sno、年份Yr、月份Mth、銷售數量count(*),並按銷售數量降序排列 3. 查詢各商店的每月詳細 ...
  • 1、安裝jdk 測試jdk是否已經安裝 [root@node002 ~]# java -version-bash: java: command not found 創建解壓目錄 [root@node002 ~]# mkdir -p /usr/local/java 上傳jdk 解壓jdk [root@ ...
  • 建庫、建表 1、建庫 (1)SQL語句命令建庫: Create database資料庫名稱 (該方法創建的資料庫沒有設置編碼亂碼) 1 2 3 4 5 -- 創建資料庫時,設置資料庫的編碼方式 -- CHARACTER SET:指定資料庫採用的字元集,utf8不能寫成utf-8 -- COLLATE ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...