*******************MYSQL:
CREATE TABLE T_Person (FName VARCHAR(20),FAgeINT,FRemark VARCHAR(20),PRIMARYKEY (FName));
CREATE TABLE T_Debt (FNumber VARCHAR(20),FAmountDECIMAL(10,2) NOT NULL,FPerson VARCHAR(20),PRIMARY KEY (FNumber),FOREIGN KEY (FPerson) REFERENCES T_Person(FName)) ;
*************
一、數(shù)據(jù)的插入
INSERT INTO T_Person(FName,FAge,FRemark) VALUES('Tom',18,'USA')
INSERT INTO T_Person(FAge,FName) VALUES(22,'LXF')>>FRemark的值為
INSERT INTO T_Person VALUES('luren1',23,'China')>>不指定插入的表列,將按照定義表中字段順序來(lái)插入
**非空約束對(duì)數(shù)據(jù)插入的影響
INSERT INTO T_Debt (FNumber, FPerson) VALUES ('1', 'Jim')>>執(zhí)行此SQL會(huì)報(bào)錯(cuò):'FAmount'不能為空
**主鍵對(duì)數(shù)據(jù)插入的影響
INSERT INTO T_Debt (FNumber,FAmount, FPerson) VALUES ('1',300, 'Jim')>>不能在'FNumber'中插入重復(fù)鍵(假如FNumber中已經(jīng)存在FNumber=1的記錄)
**外鍵對(duì)數(shù)據(jù)插入的影響
外鍵是指向另一個(gè)表中已有數(shù)據(jù)的約束,因此外鍵值必須是在目標(biāo)表中存在的。如果插入的數(shù)據(jù)在目標(biāo)表中不存在的話則會(huì)導(dǎo)致違反外鍵約束異常
INSERT INTO T_Debt (FNumber,FAmount, FPerson) VALUES ('3',100, 'Jerry')>>由于在T_Person 表中不存在FName字段等于“Jerry”的數(shù)據(jù)行,所以會(huì)報(bào)出類似如下的錯(cuò)誤信息:INSERT 語(yǔ)句與 FOREIGN KEY 約束"FK__T_Debt__FPerson__1A14E395"沖突。該沖突發(fā)生于數(shù)據(jù)庫(kù)"demo",表"dbo.T_Person", column 'FName'。
二、數(shù)據(jù)的更新
UPDATE T_Person
SET FRemark = 'SuperMan' >>
將表T_Person 中所有人員的FREMARK字段值更新為“SuperMan”
UPDATE T_Person
SET FRemark = 'Sonic',FAge=25 >>將所有人員的FRemark 字段更新為“Sonic”,并且將年齡更新為25
UPDATE T_Person
SET FAge = 12
WHERE FNAME='Tom'>>將Tom的年齡修改為12歲
UPDATE T_Person
SET FRemark = 'BlaBla'
WHERE FAge =25>>將所有年齡為25的人員的備注信息修改為“BlaBla”
UPDATE T_Person
SET FAge = 22
WHERE FName ='jim' OR FName='LXF'>>將FNAME等于’Jim’或者’LXF’的行的FAge字段更新為22
**非空約束對(duì)數(shù)據(jù)更新的影響
UPDATE T_Debt set FAmount = NULL WHERE FPerson='Tom'>>執(zhí)行此SQL會(huì)報(bào)錯(cuò),F(xiàn)Amount不能為空
**主鍵對(duì)數(shù)據(jù)更新的影響
UPDATE T_Debt set FNumber = '2' WHERE FPerson='Tom'>>由于表中已經(jīng)存在一條FNumber 字段為2 的記錄,所以運(yùn)行這句SQL 的時(shí)候會(huì)報(bào)出類似如下的錯(cuò)誤信息:不能在對(duì)象'dbo.T_Debt' 中插入重復(fù)鍵。
**外鍵對(duì)數(shù)據(jù)更新的影響
UPDATE T_Debt set FPerson = 'Merry' WHERE FNumber='1'>>由于在T_Person表中不存在FName 字段等于“Merry”的數(shù)據(jù)行,所以會(huì)數(shù)據(jù)庫(kù)系統(tǒng)會(huì)報(bào)出類似如下的錯(cuò)誤信息:
UPDATE 語(yǔ)句與FOREIGN KEY 約束"FK__T_Debt__FPerson__1A14E395"沖突。該沖突發(fā)生于數(shù)據(jù)庫(kù)"demo",
表"dbo.T_Person", column 'FName'
三、數(shù)據(jù)的刪除
需要注意的就是如果被刪除的數(shù)據(jù)行是某個(gè)外鍵關(guān)聯(lián)關(guān)系中的被引用數(shù)據(jù)的話,則進(jìn)行刪除的時(shí)候會(huì)失敗,如果要?jiǎng)h除成功則必須首先刪除引用者才可以。
DELETE FROM T_Debt;
DELETE FROM T_Person;
由于T_Debt表中FPerson字段是指向表T_Person 的FName字段的外鍵,所以必須首先刪除T_Debt表中的數(shù)據(jù)后才能刪除T_Person中的數(shù)據(jù)。DELETE語(yǔ)句僅僅是刪除表中的數(shù)據(jù)行,而表的結(jié)構(gòu)還存在
DROP TABLE T_Debt;
DROP TABLE T_Person;
DROP TABLE語(yǔ)句則不僅將表中的數(shù)據(jù)行全部刪除,而且還將表的結(jié)構(gòu)也刪除
DELETE FROM T_Person WHERE FAge > 20 or FRemark = 'Mars';>>刪除年齡大于20歲或者來(lái)自火星(Mars)的人員
以上摘自《程序員的SQL 金典》