問(wèn)題:向表中新增數(shù)據(jù)時(shí),是否會(huì)出現(xiàn)兩行相同的數(shù)據(jù)?會(huì)帶來(lái)什么問(wèn)題?
????????????????數(shù)據(jù)重復(fù),不唯一,浪費(fèi)空間
1 、 實(shí)體完整性約束
表中的一行數(shù)據(jù)代表一個(gè)實(shí)體(entity),實(shí)體完整性的作用即是標(biāo)識(shí)每一行數(shù)據(jù)不重復(fù)、實(shí)體唯一。
1.1、主鍵約束
PRIMARY KEY?唯一,標(biāo)識(shí)表中的一行數(shù)據(jù),此列的值不可重復(fù),且不能為NULL
CREAT?TABLE 'subject'(
????subjectId INT?PRIMARY KEY,?? ? ? ? # 每個(gè)課程編號(hào)唯一且不為NULL
????subjectName VARCHAR(20),?
????subjectHours INT
) charset=utf8;
1.2、唯一約束
UNIQUE? ??唯一,標(biāo)識(shí)表中的一行數(shù)據(jù),不可重復(fù),可為NULL
CREAT?TABLE 'subject'(
subjectId INT?PRIMARY KEY,?# 每個(gè)課程編號(hào)唯一且不為NULL
subjectName VARCHAR(20) UNIQUE,?? ? # 課程名稱唯一
????subjectHours INT
) charset=utf8;
INSERT INTO?'subject'(subjectId,subjectName,subjectHours) VALUES(1,'Java',40);
1.3、自動(dòng)增長(zhǎng)列
AUTO_INCREMENT 自動(dòng)增長(zhǎng),給主鍵數(shù)值列添加自動(dòng)增長(zhǎng)。從1開(kāi)始,每次加1。不能單獨(dú)使用,和主鍵配合
CREAT?TABLE 'subject'(
subjectId INT?PRIMARY KEY?AUTO_INCREMENT?,? ? ?#?AUTO_INCREMENT? ? ?id自動(dòng)增長(zhǎng)
subjectName VARCHAR(20)?UNIQUE,? ? ? ? ? ? ? ? ? ? ? ? ??# 課程名稱唯一
????subjectHours INT
) charset=utf8;
INSERT INTO?'subject'(subjectName,subjectHours)?VALUES('Java',40);? ? ? ? # 無(wú)需id賦值
2、域完整性約束
????限制列的單元格的數(shù)據(jù)正確性
2.1、非空約束
NOT NULL 非空,此列必須有值
CREAT?TABLE 'subject'(
????subjectId INT?PRIMARY KEY?AUTO_INCREMENT?,? ??
????subjectName VARCHAR(20)??UNIQUE? NOT NULL,? ? ? ? ??# 姓名唯一,且不能為NULL
????subjectHours INT
) charset=utf8;
2.2、默認(rèn)值約束
default值為列賦予默認(rèn)值,當(dāng)新增數(shù)據(jù)不指定值時(shí),書寫DEFAULT,以指定的默認(rèn)值進(jìn)行填充
CREAT?TABLE 'subject'(
????subjectId INT?PRIMARY KEY?AUTO_INCREMENT?,? ??
????subjectName VARCHAR(20)?UNIQUE? NOT NULL,? ? ? ? ??# 姓名唯一,且不能為NULL
????subjectHours INT DEFAULT 10;
) charset=utf8;
2.3、引用完整性約束
語(yǔ)法:CONSTRAINT 引用名 FOREIGN KEY(列名)REFERENCES 被引用表名(列名)
詳解:FOREIGNKEY引用外部表的某個(gè)列的值,新增數(shù)據(jù)時(shí),約束此列的值必須是引用表中存在的值。

3、約束創(chuàng)建整合

CREAT TABLE Grade(
? ? Gradeid INT PRIMARY KEY AUTO_INCREMENT,? ? ? ? # 整形,主鍵,自動(dòng)增長(zhǎng)
? ? GradeName VACHAR(20) UNIQUE NOT NULL,? ? # vachar,唯一,非空
)CHARSET=UTF8;

CREAT TABLE Student(
? ? student_id VARCHAR(50) PRIMARY KEY,
? ? student_name VARCHAR(50) NOT NULL,
? ? sex CHAR(2) DEFAULT '男',
? ? borndate DATE NOT NULL,
? ? phone VARCHAR(11),
? ? GradeId INT NOT NULL,
? ? CONSTRAINT fk_student_gradeid FOREIGN KEY?Gradeid REFERENCES Grade(Gradeid),? ?#外鍵約束
)CHARSET=UTF8;
INSERT INTO Student(student_id,student_name,sex,borndate,phone,gradeId)?
VALUES('S1001','Gavin',DEFAULT,'1999-09-09','15612341234',1);
注意:創(chuàng)建關(guān)系表時(shí),一定要先創(chuàng)建主表,再創(chuàng)建從表
? ? ? ? ? ?刪除關(guān)系表時(shí),先刪除從表,再刪除主表。