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