自定義View系列教程00–推翻自己和過(guò)往,重學(xué)自定義View
自定義View系列教程01–常用工具介紹
自定義View系列教程02–onMeasure源碼詳盡分析
自定義View系列教程03–onLayout源碼詳盡分析
自定義View系列教程04–Draw源碼分析及其實(shí)踐
自定義View系列教程05–示例分析
自定義View系列教程06–詳解View的Touch事件處理
自定義View系列教程07–詳解ViewGroup分發(fā)Touch事件
自定義View系列教程08–滑動(dòng)沖突的產(chǎn)生及其處理
探索Android軟鍵盤(pán)的疑難雜癥
深入探討Android異步精髓Handler
詳解Android主流框架不可或缺的基石
站在源碼的肩膀上全解Scroller工作機(jī)制
Android多分辨率適配框架(1)— 核心基礎(chǔ)
Android多分辨率適配框架(2)— 原理剖析
Android多分辨率適配框架(3)— 使用指南
Android程序員C語(yǔ)言自學(xué)完備手冊(cè)
講給Android程序員看的前端系列教程(圖文版)
講給Android程序員看的前端系列教程(視頻版)
在實(shí)際開(kāi)發(fā)中數(shù)據(jù)表之間存在著各種關(guān)聯(lián)關(guān)系。在此,介紹MySQL中數(shù)據(jù)表的三種關(guān)聯(lián)關(guān)系。
多對(duì)一(亦稱(chēng)為一對(duì)多)是數(shù)據(jù)表中最常見(jiàn)的一種關(guān)系。例如:?jiǎn)T工與部門(mén)之間的關(guān)系,一個(gè)部門(mén)可以有多個(gè)員工;而一個(gè)員工不能屬于多個(gè)部門(mén)只屬于某個(gè)部門(mén)。在多對(duì)一的表關(guān)系 中,應(yīng)將外鍵建在多的一方否則會(huì)造成數(shù)據(jù)的冗余。
多對(duì)多是數(shù)據(jù)表中常見(jiàn)的一種關(guān)系。例如:學(xué)生與老師之間的關(guān)系,一個(gè)學(xué)生可以有多個(gè)老師而且一個(gè)老師有多個(gè)學(xué)生。通常情況下,為了實(shí)現(xiàn)這種關(guān)系需要定義一張中間表(亦稱(chēng)為連接表)該表會(huì)存在兩個(gè)外鍵分別參照老師表和學(xué)生表。
在開(kāi)發(fā)過(guò)程中,一對(duì)一的關(guān)聯(lián)關(guān)系在數(shù)據(jù)庫(kù)中并不常見(jiàn);因?yàn)橐赃@種方式存儲(chǔ)的信息通常會(huì)放在同一張表中。
接下來(lái),我們來(lái)學(xué)習(xí)在一對(duì)多的關(guān)聯(lián)關(guān)系中如果添加和刪除數(shù)據(jù)。先準(zhǔn)備一些測(cè)試數(shù)據(jù),代碼如下:
DROP TABLE IF EXISTS student;DROP TABLE IF EXISTS class;-- 創(chuàng)建班級(jí)表CREATE TABLE class( cid int(4) NOT NULL PRIMARY KEY, cname varchar(30) ); -- 創(chuàng)建學(xué)生表CREATE TABLE student( sid int(8) NOT NULL PRIMARY KEY, sname varchar(30), classid int(8) NOT NULL);-- 為學(xué)生表添加外鍵約束ALTER TABLE student ADD CONSTRAINT fk_student_classid FOREIGN KEY(classid) REFERENCES class(cid);
-- 向班級(jí)表插入數(shù)據(jù)INSERT INTO class(cid,cname)VALUES(1,'Java');INSERT INTO class(cid,cname)VALUES(2,'Python');-- 向?qū)W生表插入數(shù)據(jù)INSERT INTO student(sid,sname,classid)VALUES(1,'tome',1);INSERT INTO student(sid,sname,classid)VALUES(2,'lucy',1);INSERT INTO student(sid,sname,classid)VALUES(3,'lili',2);INSERT INTO student(sid,sname,classid)VALUES(4,'domi',2);
先為班級(jí)表中插入數(shù)據(jù)在為學(xué)生表插入數(shù)據(jù)。
思考:為什么不先向?qū)W生表中插入數(shù)據(jù)再向班級(jí)表插入數(shù)據(jù)?
因?yàn)椋簩W(xué)生表中有的classid字段的值參照于班級(jí)表的cid字段。
所以:必須要先向班級(jí)表中插入數(shù)據(jù)。
請(qǐng)查詢(xún)Java班的所有學(xué)生。
代碼如下:
-- 先查詢(xún)出Java班的cid為1SELECT cid FROM class WHERE cname='Java';-- 再依據(jù)cid去查詢(xún)學(xué)生信息SELECT * FROM student WHERE classid=1;
把如上兩句代碼合寫(xiě),代碼如下:
-- 查詢(xún)Java班的所有學(xué)生SELECT * FROM student WHERE classid=(SELECT cid FROM class WHERE cname='Java');
請(qǐng)從班級(jí)表中刪除Java班級(jí)。在此,請(qǐng)注意:班級(jí)表和學(xué)生表之間存在關(guān)聯(lián)關(guān)系;要?jiǎng)h除Java班級(jí),應(yīng)該先刪除學(xué)生表中與該班相關(guān)聯(lián)的學(xué)生。否則,假若先刪除Java班那么學(xué)生表中的cid就失去了關(guān)聯(lián)。代碼如下:
-- 刪除Java班級(jí)DELETE FROM student WHERE classid=(SELECT cid FROM class WHERE cname='Java');DELETE FROM class WHERE cname='Java';
在此,附錄本節(jié)教程的源碼,如下所示:
DROP TABLE IF EXISTS student;DROP TABLE IF EXISTS class;-- 創(chuàng)建學(xué)生表CREATE TABLE class( cid int(4) NOT NULL PRIMARY KEY, cname varchar(30) ); -- 創(chuàng)建班級(jí)表CREATE TABLE student( sid int(8) NOT NULL PRIMARY KEY, sname varchar(30), classid int(8) NOT NULL);-- 為學(xué)生表添加外鍵約束ALTER TABLE student ADD CONSTRAINT fk_student_classid FOREIGN KEY(classid) REFERENCES class(cid);-- 向班級(jí)表插入數(shù)據(jù)INSERT INTO class(cid,cname)VALUES(1,'Java');INSERT INTO class(cid,cname)VALUES(2,'Python');-- 向?qū)W生表插入數(shù)據(jù)INSERT INTO student(sid,sname,classid)VALUES(1,'tome',1);INSERT INTO student(sid,sname,classid)VALUES(2,'lucy',1);INSERT INTO student(sid,sname,classid)VALUES(3,'lili',2);INSERT INTO student(sid,sname,classid)VALUES(4,'domi',2);-- 查詢(xún)Java班的所有學(xué)生SELECT * FROM student WHERE classid=(SELECT cid FROM class WHERE cname='Java');-- 刪除Java班級(jí)DELETE FROM student WHERE classid=(SELECT cid FROM class WHERE cname='Java');DELETE FROM class WHERE cname='Java';
聯(lián)系客服