从0学开发笔记-数据库基础
生活随笔
收集整理的這篇文章主要介紹了
从0学开发笔记-数据库基础
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
數(shù)據(jù)庫的概念
數(shù)據(jù)庫的概念
用于存儲和管理數(shù)據(jù)的倉庫
數(shù)據(jù)庫的特點(diǎn)
- 持久化存儲數(shù)據(jù)結(jié)構(gòu)。其實數(shù)據(jù)庫就是一個文件系統(tǒng)
- 方便存儲和管理數(shù)據(jù)
- 使用了統(tǒng)一的方式操作數(shù)據(jù)庫 --SQL
常見的數(shù)據(jù)庫軟件
-
MySQL服務(wù)啟動
- 手動
- cmd->service.msc 打開服務(wù)的窗口
- 使用管理員打開cmd
- net start mySQL :啟動mySQL的服務(wù)
- net stop MySQL:關(guān)閉mysql服務(wù)
-
MySQL登錄
- mysql -uroot -proot
- mysql -hip -uroot -proot
- mysql --host=ip --user==root --password=連接目標(biāo)的密碼
-
MySQL退出
- exit
- quit
-
MySQL的目錄結(jié)構(gòu)
- MySQL的安裝目錄
- 配置文件 my,ini
- MySQL的數(shù)據(jù)目錄
- 幾個概念
- 數(shù)據(jù)庫:文件夾
- 表: 文件
- 數(shù)據(jù): 文件里面存儲的數(shù)據(jù)
- 幾個概念
- MySQL的安裝目錄
SQL
-
什么是SQL?
- Structured Qurery Languange :結(jié)構(gòu)化查詢語言
其實就是定義了操作所有關(guān)系行數(shù)據(jù)庫的規(guī)則。每一種數(shù)據(jù)庫操作的方式存在不一樣的地方,稱為“方言”
- Structured Qurery Languange :結(jié)構(gòu)化查詢語言
-
SQL通用語法
- SQL語句可以單行或多行,以【分號】結(jié)尾
- 可使用空格和縮進(jìn)來增強(qiáng)語句的可讀性
- MySQL數(shù)據(jù)庫的SQL語句不區(qū)分大小寫,關(guān)鍵字使用大寫
- 單行注釋: – 注釋內(nèi)容(通用,帶空格) 或 #注釋內(nèi)容 (sql特有的)
- 多行注釋 /* 注釋 */
-
SQL分類
- DDL(Date Definition Language)數(shù)據(jù)定義語言
- 用來定義數(shù)據(jù)庫對象:數(shù)據(jù)庫,表,列等,關(guān)鍵字:create,drop,alter等
- DML(Date Manipulation Language)數(shù)據(jù)操作語言
- 用來對數(shù)據(jù)庫中表的數(shù)據(jù)進(jìn)行增刪改。關(guān)鍵字insert,delete,update 等
- DCL(Data Control Language)數(shù)據(jù)控制語言(了解)
- 用來定義數(shù)據(jù)庫的方法權(quán)限和安全級別,以及創(chuàng)建用戶。關(guān)鍵字:GRANT。REVOKE等
- 用來定義數(shù)據(jù)庫的方法權(quán)限和安全級別,以及創(chuàng)建用戶。關(guān)鍵字:GRANT。REVOKE等
- DDL(Date Definition Language)數(shù)據(jù)定義語言
DDL:操作數(shù)據(jù)庫、表
- 操作數(shù)據(jù)庫:CRUD
- C(creat):創(chuàng)建
- 創(chuàng)建數(shù)據(jù)庫:
- creat database 數(shù)據(jù)庫名稱
- 創(chuàng)建數(shù)據(jù)庫,判斷不存在,再創(chuàng)建
- creat database if not exists 數(shù)據(jù)庫名稱
- 創(chuàng)建數(shù)據(jù)庫,并指定字符集
- create database 數(shù)據(jù)庫名稱 character set 字符集合;
- 創(chuàng)建db4數(shù)據(jù)庫,判斷是否存在,并指定字符集為gbk
- creat database db4 if not exists db4 character set gbk;
- 創(chuàng)建數(shù)據(jù)庫:
- R(Retrieve):查詢
- 查詢所有數(shù)據(jù)的名稱
- show databases;
- 查詢某個數(shù)據(jù)庫的字符集:查詢某個數(shù)據(jù)庫的創(chuàng)建語句
- show creat database 數(shù)據(jù)庫名稱;
- 查詢所有數(shù)據(jù)的名稱
- U(Update):修改
- 修改數(shù)據(jù)庫的字符集
- alter database 數(shù)據(jù)庫名稱 character set 字符集名稱
- 修改數(shù)據(jù)庫的字符集
- D(Delete):刪除
- 刪除數(shù)據(jù)庫
- drop database 數(shù)據(jù)庫名稱;
- 判斷數(shù)據(jù)庫存在,再刪除
- drop database if exists 數(shù)據(jù)庫名稱;
- 刪除數(shù)據(jù)庫
- 使用數(shù)據(jù)庫
- 查詢當(dāng)前正在使用的數(shù)據(jù)庫名稱
- select database();
- 使用數(shù)據(jù)庫(進(jìn)入到當(dāng)前的某一個數(shù)據(jù)庫中)
- use 數(shù)據(jù)庫名稱;
- 查詢當(dāng)前正在使用的數(shù)據(jù)庫名稱
- C(creat):創(chuàng)建
- 操作表
-
C(creat):創(chuàng)建
-
語法:
- create table 表名(列名1 數(shù)據(jù)類型1, 列名1 數(shù)據(jù)類型1...., 列名1 數(shù)據(jù)類型1)
- 注意:最后一列,不需要加逗號(,)
- 數(shù)據(jù)庫類型:
- int 整數(shù)類型
- age int,
- double: 小數(shù)類型
- score double(5,2)
- date:日期,只包含年月日,yyyy-MM-dd
- datetime:日期,包含年月日時分秒 yyyy-MM-dd HH:mm:ss
- timestamp: 時間戳類型 包含年月日時分秒 yyyy-MM-dd HH:mm:ss
- 如果將來不給這個字段賦值,或者賦值為null,則默認(rèn)使用當(dāng)前的系統(tǒng)時間,來自動賦值
- varchar:字符串
- name varchar(20):姓名最大20個字符
- int 整數(shù)類型
- create table 表名(列名1 數(shù)據(jù)類型1, 列名1 數(shù)據(jù)類型1...., 列名1 數(shù)據(jù)類型1)
-
創(chuàng)建表:create table stud(id int, name varchar(32),age int, score double(4,1),birthday date, inserttime timestamp) ;
-
復(fù)制表:create table 表名 like 被復(fù)制的表名;
-
-
R(Retrieve):查詢
- 查詢某個數(shù)據(jù)庫中所有的表名稱
- show tables
- 查詢表結(jié)構(gòu)
- desc 表名
- 查詢某個數(shù)據(jù)庫中所有的表名稱
-
U(Update):修改
- 修改表名
- alter table 表名 rename to 新的表名;
- 修改表的字符集名稱
- alter table 表名 character set 字符集名稱;
- 添加一列
- alter table 表名 add 列名 數(shù)據(jù)類型;
- 修改列名稱 類型
- alter table 表名 change 列名 新列名 新數(shù)據(jù)類型;
- alter table 表名 modify 列名 新數(shù)據(jù)類型
- 刪除列
- alter table 表明 drop 列名
- 修改表名
-
D(Delete):刪除
- drop table 表名;
- drop table if exists 表名;
-
DML 增刪改表中數(shù)據(jù)
- 添加數(shù)據(jù):
- 語法:
- insert into 表名(列名1, 列名2,...,列名n) values(值1,值2,....,值n);
- 注意:
- 列名和值要一一對應(yīng)
- 如果表名后,不定義列名,則默認(rèn)給所有列添加值
- insert into 表名 values(值1,值2,...,值3)
- 除了數(shù)字類型,其他類型需要使用引號(單雙都可以)引起來
- 語法:
- 刪除數(shù)據(jù):
- 語法:
- delete from 表名 [where 條件]
- 注意:
- 如果不加條件,則刪除表中所有記錄
- 如果要刪除所有記錄
- delete from 表名; – 不推薦使用。有多少條記錄就會執(zhí)行多少次刪除操作
- TRUNCATE TABLE 表名; – 推薦使用,效率更高 先刪除表, 然后再創(chuàng)建一張一樣的表
- 語法:
- 修改數(shù)據(jù):
- 語法:
- update 表名 set 列名1 = 值1, 列名2=值2, ...[where 條件];
- 注意:
- 如果不加任何條件,則會將表中所有記錄全部修改
- 語法:
DQL 查詢表中的記錄
-
select * from 表名
-
語法:
- select --查詢的意思
- 字段列表
- from
- 表名列表
- where
*條件列表 - group by
- 分組字段
- having
- 分組之后的條件
- order by
- 排序
- limit
- 分頁限定
- select --查詢的意思
-
基礎(chǔ)查詢
- 多個字段的查詢
- select 字段名1, 字段名2... from 表名;
- 注意:
- 如果查詢所有字段,則可使用*來代替字段列表
- 注意:
- select 字段名1, 字段名2... from 表名;
- 去除重復(fù)
- distinct
- 計算列
- 一般可以使用四則運(yùn)算計算一些列的值。(一般只會進(jìn)行數(shù)值型的計算)
- ifnull(表達(dá)式1, 表達(dá)式2) :null參與的運(yùn)算,計算結(jié)果都為null
- 表達(dá)式1:哪個字段需要判斷是否為null
- 表達(dá)式2:如果該字段為null后的替換值
- 起別名
- as :as也可以省略
- 多個字段的查詢
-
條件查詢
- where 子句后跟條件
- 運(yùn)算符
- >、 <、 <=、 >= 、=、<>
- BETWEEN...AND
- IN(集合)
- LIKE : 模糊查詢
- 占位符:
- _ : 單個任意字符
- %:多個任意字符
- 查詢姓馬的有哪些?like
- SELECT * FROM student WHERE name like '馬%';
- 查詢姓名第二個字是化的人
- SELECT * FROM student WHERE name like “_化%”;
- 查詢姓名是三個字的人
- SELECT * FROM student WHERE name like “___”;
- 查詢姓名包含“德”的人
- SELECT * FROM student WHERE name like “%德%”;
- 占位符:
- IS NULL
- and 或&&
- or 或 ||
- not 或 !
DQL 查詢語句
-
排序查詢
- 語法:order by 子句
- order by 排序字段1 排序方式 1, 排序字段2 排序方式2;
- 排序方式:
- ASC:升序(默認(rèn))
- DESC:降序
- 注意:
- 如果有多個排序條件,則當(dāng)前面的條件一樣時,才會判斷第二條件
- 語法:order by 子句
-
聚合函數(shù):將一列數(shù)據(jù)作為一個整體,進(jìn)行【縱向】的計算
- count:計算個數(shù)
- 一般選擇非空列:主鍵
- COUNT(*) : 所有列中只要有一列沒有非空,那么就按照這列算總數(shù)
- SELECT COUNT(name) FROM student
- max:計算最大值
- SELECT MAX(math) FROM student;
- min:計算最小值
- SELECT MIN(math) FROM student;
- sum:求和
- SELECT SUM(math) FROM student;
- avg:計算平均值
- SELECT AVG(math) FROM student;
- 注意:聚合函數(shù)的計算,會排出NULL值
- 解決方案:
- 選擇不包含非空的列進(jìn)行計算
- IFNULL函數(shù)
- 解決方案:
- count:計算個數(shù)
-
分組查詢
- 語法:GROUP BY 分組字段
- 按照性別分組,分別查詢男、女同學(xué)的平均分,人數(shù)
- SELECT sex, AVG(math) ,COUNT(id) FROM student GROUP BY sex;
- 按照性別分組,分別查詢男、女同學(xué)的平均分,人數(shù) 要求【分?jǐn)?shù)低于70分的人,不參與分組】
- SELECT sex, AVG(math), COUNT(id) FROM student WHERE math >70 GROUP BY sex;
- 按照性別分組,分別查詢男、女同學(xué)的平均分,人數(shù) 要求【分?jǐn)?shù)低于70分的人,不參與分組】,分組之后,人數(shù)要大于2個人
- SELECT sex, AVG(math), COUNT(id) FROM student WHERE math >70 GROUP BY sex HAVING COUNT(id)>2;
- SELECT sex, AVG(math), COUNT(id) 人數(shù) FROM student WHERE math >70 GROUP BY sex HAVING 人數(shù)>2;
- 按照性別分組,分別查詢男、女同學(xué)的平均分,人數(shù)
- 注意:
- 分組之后查詢的字段:分組字段、聚合函數(shù) 不要加其他字段(沒有意義)
- where和 having的區(qū)別:
- where在【分組之前】進(jìn)行限定,如果不滿足條件,則不參與分組;having在【分組之后】進(jìn)行限定,如果不滿足結(jié)果,則不會被查詢出來
- where后不可以跟聚合函數(shù),having后可以跟聚合函數(shù)
- 語法:GROUP BY 分組字段
-
分頁查詢
- 語法:limit 開始的索引,每頁查詢的條數(shù);
- SELECT * FROM student LIMIT 0,3; :顯示第一頁
- SELECT * FROM student LIMIT 3,3; :顯示第二頁
- 開始索引的公式 = (當(dāng)前的頁碼 - 1) * 每頁顯示的條數(shù)
- LIMIT是一個MySQL的【方言】
- 語法:limit 開始的索引,每頁查詢的條數(shù);
總結(jié)
以上是生活随笔為你收集整理的从0学开发笔记-数据库基础的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言编译kbhit出现问题,在VC++
- 下一篇: Redis持久化中的AOF(Append