4.4.7添加約束
為岐山等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及岐山網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、岐山網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
語(yǔ)句格式:ALTER TABLE 表名ADD? CONSTRAINT? 約束名 約束類型(字段名)
上面語(yǔ)句格式中,“表名”指定要添加約束的是哪個(gè)表,“ADD CONSTRAINT”表示要在表中增加約束,其后的“約束名”是擬增加約束的名字,“約束類型”是擬增加約束的類型,其后括號(hào)里的“字段名”是指約束是在哪一個(gè)字段上建立起來(lái)的。
下面截圖中的“ALTER TABLE”語(yǔ)句在t_dept表中新增加了一個(gè)約束名為unidept的約束,它是在對(duì)字段deptno進(jìn)行的唯一性約束。
1.外鍵的作用,主要有兩個(gè):
一個(gè)是讓數(shù)據(jù)庫(kù)自己通過(guò)外鍵來(lái)保證數(shù)據(jù)的完整性和一致性
一個(gè)就是能夠增加ER圖的可讀性
2.外鍵的配置
1)先創(chuàng)建一個(gè)主表,代碼如下:
#創(chuàng)建表student,并添加各種約束
create
table
student
(
id
int
primary
key
,
#主鍵約束
name
varchar(20)
,
#唯一約束
age
int
NOT
NULL,
#非空約束
sex
varchar(2)
,
address
varchar(20)
default
'重慶'
#默認(rèn)約束
)
;
再通過(guò)一個(gè)外鍵,創(chuàng)建一個(gè)分?jǐn)?shù)表,這樣的話,就可以方便查詢。代碼如下:
#創(chuàng)建分?jǐn)?shù)表
create
table
score
(
id
int
primary
key
,
sid
int
,
china
int
,
history
int,
english
int,
constraint
FK_sid
foreign
key(sid)
references
student(id)
#通過(guò)外鍵創(chuàng)建鏈接
)
;
創(chuàng)建外鍵的方法有很多,其中最常見(jiàn)創(chuàng)建外鍵的格式是:constraint
FK_***
foreign
key(**)
references
鏈接的外表
刪除外鍵:
alter
table
drop
foreign
key
'外鍵名'.
注意:
只有在定義外鍵時(shí),用constraint
外鍵名
foreign
key
....
方便進(jìn)行外鍵的刪除
建表時(shí)加上唯一性約束:
CREATE TABLE `t_user` (
`Id` int(11) NOT NULL AUTO_INCREMENT,? -- 自增
`username` varchar(18) NOT NULL unique,? -- 唯一性約束
`password` varchar(18) NOT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=1018 DEFAULT CHARSET=gbk;
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉(cāng)庫(kù)內(nèi),這樣就增加了速度并提高了靈活性。
MySQL所使用的 SQL 語(yǔ)言是用于訪問(wèn)數(shù)據(jù)庫(kù)的最常用標(biāo)準(zhǔn)化語(yǔ)言。MySQL 軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),一般中小型網(wǎng)站的開(kāi)發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫(kù)。
擴(kuò)展資料:
MySQL 作為數(shù)據(jù)庫(kù),系統(tǒng)特性:
1、使用 C和?C++編寫(xiě),并使用了多種編譯器進(jìn)行測(cè)試,保證了源代碼的可移植性。
2、支持?AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統(tǒng)。
3、為多種編程語(yǔ)言提供了?API。這些編程語(yǔ)言包括?C、C++、Python、Java、Perl、PHP、Eiffel、Ruby,.NET和 Tcl 等。
4、優(yōu)化的?SQL查詢算法,有效地提高查詢速度。
5、提供多語(yǔ)言支持,常見(jiàn)的編碼如中文的?GB 2312、BIG5,日文的?Shift_JIS等都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名。提供?TCP/IP、ODBC 和?JDBC等多種數(shù)據(jù)庫(kù)連接途徑。
6、支持大型的數(shù)據(jù)庫(kù)。可以處理?yè)碛猩锨f(wàn)條記錄的大型數(shù)據(jù)庫(kù)。支持多種存儲(chǔ)引擎。
參考資料:百度百科-mySQL
這是一項(xiàng)新功能,用于指定在插入或更新到一行之前檢查值的條件。如果表的任何行的搜索條件的結(jié)果為 FALSE,則約束可能返回錯(cuò)誤(但如果結(jié)果為 UNKNOWN 或 TRUE,則約束不會(huì)返回錯(cuò)誤)。此功能開(kāi)始在 MySQL 8.0.16 上運(yùn)行,在以前的版本中,我們可以創(chuàng)建它,但它不起作用,這意味著支持語(yǔ)法,但不起作用。要牢記的使用規(guī)則:
AUTO_INCREMENT 自增列不允許使用
引用另一個(gè)表中的另一列不允許使用
存儲(chǔ)的函數(shù)和用戶定義的函數(shù)不允許使用
存儲(chǔ)過(guò)程和函數(shù)參數(shù)不允許使用
子查詢不允許使用
在外鍵中用于后續(xù)操作(ON UPDATE,ON DELETE)的列不允許使用
為下一條語(yǔ)句 INSERT,UPDATE,REPLACE,LOAD DATA 和 LOAD XML 評(píng)估此次監(jiān)測(cè)。此外,還會(huì)為 INSERT IGNORE,UPDATE IGNORE,LOAD DATA…IGNORE 和 LOAD XML…IGNORE 評(píng)估此監(jiān)測(cè)約束。對(duì)于這些語(yǔ)句,如果約束的評(píng)估結(jié)果為 FALSE,則會(huì)發(fā)生警告。插入或更新被跳過(guò)。
我們可以使用此功能在表中添加更多的邏輯,但是根據(jù)我以前作為程序員的經(jīng)驗(yàn),我不建議在表中添加邏輯,因?yàn)槌悄鸁o(wú)法訪問(wèn)應(yīng)用程序代碼,否則很難找到或調(diào)試錯(cuò)誤。