(1)實體與實體之間有3中對應關係,這些關係也需要儲存下來,關係型資料庫主要是儲存關係
(2)在開發中需要對儲存的資料進行一些處理,用到內建的一些函式
(3)檢視用於完成查詢語句的封裝
(4)事務可以保證複雜的增刪改查操作有效----在操作中去使mysql資料有效
關係介紹:
關係在資料庫中是非常重要的,多個資料表之間是有關係的,表之間的關係可以通過某種屬性進行對應,這樣就可以使用這個關係進行對資料的查詢
學生表的屬性: id name
成績表的屬性: id score
科目表的屬性:id title
成績表中有id和分數,每乙個分數都會對應多個名字,每乙個分數也會對應多個科目,所以是1對多的關係,所以需要建立外來鍵連線其他的表,成績表中需要建立外來鍵來連線學生表和成績表
成績表的建立語句如下:
create table scores(
id int primary key auto_increment,
stuid int,
subid int,
score decimal(5, 2))外來鍵
怎麼保證關係列資料的有效性呢:可以通過外來鍵約束進行資料的有效性驗證,為stuid,subid新增外來鍵約束。
create table scores(
id int primary key auto_increment,
stuid int,
subid int,
score decimal(5, 2)
foreign key (stuid) references students(id)
foreign key (subid) references subjects(id)
);外來鍵的級聯操作
(1)在刪除students表的資料時,如果這個id值在scores中已經存在,則會拋異常
(2)可以建立表時指定級聯操作,也可以在建立表後在修改外來鍵的級聯操作
語法: alter table scores add constraint stu_sco foreign key(stuid)
外來鍵操作主要是為了關聯多張資料表。
把所有的表放到一起查詢,並將結果顯示在同乙個結果集中:
當查詢結果**於多張表時,需要使用連線查詢,關鍵:找到表間的關係,當前的關係是:
students表的id------scores表的stuid
subjects表的id------scores表的subid
eg: select students.name,subjects.title,scores.score from scores inner join students on scores.stuid=students.id inner join subjects on scores.subid=subjects.id;
結論: 當需要對有關係的多張表進行查詢時,需要使用連線join
連線查詢:
連線查詢分類如下:
表a inner join 表b:表a與表b匹配的行為出現在結果中
表a left join表b:表a與表b匹配的行為出現在結果中,外加表a中獨有的資料,未對應的資料使用null填充
表a right join 表b:表a與表b匹配的行為會出現在結果中,外加表b中獨有的資料,未對應的資料使用null填充
在查詢或條件中推薦使用 「表名.列名」 的語法,
如果多個表中列名不重複可以省略 「表名」 部分
如果表的名稱太長,可以在表名後面使用『as』簡寫名,為表起個臨時的簡寫名稱
內建函式:
(1)字串函式:對資料中的字串進行操作
(2)數學函式:
–絕對值abs(n): select abs(-32)
–求m除以n的餘數mod(m, n),同運算子%: select mod(10, 3); select 10%3–
–位址floor(n),表示不大於n的最大整數
–天花板ceiling(n),表示不小於n的最大整數
–求四捨五入值round(n, d) ,n表示原始,d表示小數字置,預設為0
–求x得y次冪pow(x,y)
–獲取圓周率pi(),select rand()
(3)日期函式檢視:對sql語句得乙個封裝,結果是以表的形式呈現
檢視的意義:對於複雜的查詢,在多次使用後,維護是一件非常麻煩的事情,定義檢視本質就是對查詢的乙個封裝----把查詢的結果以乙個新的表呈現
定義檢視:create view 檢視名 as (查詢**)
eg: create view 檢視名 as select students.*, scores.score from scores inner join students on scores.stuid = students.id
------檢視建立完畢之後,需要查詢—和普通表的查詢方式是一樣的:
select * from 檢視名
mysql中的事務:當乙個業務邏輯需要多個sql完成時,如果其中某條sql語句出錯,則希望整個操作都撤回,使用事務可以完成退回的功能,保證業務邏輯的正確性
需要記住:事務四大特性(acid)
原子性(atomicity):事務中的全部操作在資料庫中是不可分割的,要麼都執行,要麼都不執行
一致性(consistency):幾個並行執行的事務,其執行結果必須與按某一順序序列執行的結果相一致
隔離性(isolation):事務執行不受其他事務干擾,事務執行的中間結果對其他事務必須是透明的
永續性(durability):對於任意已提交事務,系統必須保證該事務對資料庫的改變不被丟失,即使資料庫出現故障
事務的支援:表的型別是innodb或bdb型別
事務語句:
開啟:begin 預設是開啟的
提交:commit 需要手動操作
撤回:rollback 不需要實現sql語句的時候可以撤回操作
這個在python互動中會經常用到
查詢的總結:
關係的儲存:使用外來鍵–>建立連線(多張表),查詢的時候使用連線查詢就可以
連線查詢: 用於多張張之間的查詢
內建函式
檢視:用於對sql語句進行封裝操作
事務:四性,保持業務邏輯的正確性
mysql高階操作 MySQL資料庫的高階操作
1.資料備份與還原 1 備份 mysqldump mysqldump u username p password dbname tbname1 tbname2.filename.sql mysqldump u root p mydb2 c mysql dump mydb2 dump.sql 2 恢復...
MySQL資料庫高階查詢
mysql查詢 子查詢 exists和not exists子查詢 exists子查詢 在執行create 或drop語句前,可以使用exists判斷該資料庫物件是否存在,返回值是true或false。drop table if exists temp exists也可以作為where語句的子查詢 s...
MySQL資料庫的高階操作
1.資料備份與還原 1 備份 mysqldump mysqldump u username p password dbname tbname1 tbname2.filename.sql mysqldump u root p mydb2 c mysql dump mydb2 dump.sql 2 恢復...