一、mysql讓兩個(gè)表中的兩個(gè)字段不能重復(fù)的方法
1、創(chuàng)建表時(shí)定義組合UNIQUE約束
要讓兩個(gè)表中的兩個(gè)字段不能重復(fù),可以使用組合UNIQUE約束。組合UNIQUE約束是指在一個(gè)表中定義多個(gè)字段的UNIQUE約束,以實(shí)現(xiàn)特定的少數(shù)性限制。在創(chuàng)建表時(shí)就對里面的字段定義UNIQUE約束。例如,創(chuàng)建一個(gè)名為A的表,并定義兩個(gè)字段(a1和a2),要求a1和a2的值不能同時(shí)出現(xiàn)兩次??梢允褂靡韵耂QL語句:
CREATE TABLE A ( a1 int, a2 int, UNIQUE (a1, a2));
上述命令創(chuàng)建了一個(gè)包含名為a1和a2的兩個(gè)整數(shù)類型字段的A表,并在這兩個(gè)字段上定義了一個(gè)組合UNIQUE約束。這意味著當(dāng)在表中插入新的行時(shí),a1和a2的組合值必須是少數(shù)的。
2、修改現(xiàn)有表添加組合UNIQUE約束
如果存在已經(jīng)創(chuàng)建的表,并且需要對現(xiàn)有字段進(jìn)行組合UNIQUE約束,則可以使用ALTER TABLE命令進(jìn)行修改。例如,A表已經(jīng)存在,但需要將a1和a2定義為組合UNIQUE約束,則可以使用以下SQL語句:
ALTER TABLE AADD CONSTRAINT uc_a1_a2 UNIQUE (a1, a2);
上述命令在A表中添加了一個(gè)名為uc_a1_a2的組合UNIQUE約束,限制了a1和a2的組合值必須是少數(shù)的。使用組合UNIQUE約束可以限制表中兩個(gè)字段的少數(shù)性。當(dāng)嘗試插入重復(fù)記錄時(shí),MySQL會(huì)拋出一個(gè)錯(cuò)誤,并阻止插入操作。
二、mysql介紹
1、簡介
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB公司開發(fā),屬于 Oracle 旗下產(chǎn)品。MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,在 WEB 應(yīng)用方面,MySQL是較好的 RDBMS(Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一。MySQL是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),關(guān)系數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉庫內(nèi),這樣就增加了速度并提高了靈活性。MySQL所使用的 SQL 語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),一般中小型和大型網(wǎng)站的開發(fā)都選擇 MySQL作為網(wǎng)站數(shù)據(jù)庫。
1、應(yīng)用環(huán)境
與其他的大型數(shù)據(jù)庫例如?Oracle、DB2、SQL Server等相比,MySQL自有它的不足之處,但是這絲毫也沒有減少它受歡迎的程度。對于一般的個(gè)人使用者和中小型企業(yè)來說,MySQL提供的功能已經(jīng)綽綽有余,而且由于 MySQL是開放源碼軟件,因此可以大大降低總體擁有成本。
Linux作為操作系統(tǒng),Apache?或Nginx作為?Web?服務(wù)器,MySQL 作為數(shù)據(jù)庫,PHP/Perl/Python作為服務(wù)器端腳本解釋器。由于這四個(gè)軟件都是免費(fèi)或開放源碼軟件(FLOSS),因此使用這種方式不用花一分錢(除開人工成本)就可以建立起一個(gè)穩(wěn)定、免費(fèi)的網(wǎng)站系統(tǒng),被業(yè)界稱為“LAMP”或“LNMP”組合。
3、索引類別
普通索引:普通索引(由關(guān)鍵字 KEY 或 INDEX 定義的索引)的任務(wù)是加快對數(shù)據(jù)的訪問速度。因此,應(yīng)該只為那些最經(jīng)常出現(xiàn)查詢條件(WHERE column =)或排序條件(ORDER BY column)中的數(shù)據(jù)列創(chuàng)建索引。只要有可能,就應(yīng)該選擇一個(gè)數(shù)據(jù)最整齊、最緊湊的數(shù)據(jù)列(如一個(gè)整數(shù)類型的數(shù)據(jù)列)來創(chuàng)建索引。索引:普通索引允許被索引的數(shù)據(jù)列包含重復(fù)的值。比如說,因?yàn)槿擞锌赡芡?,所以同一個(gè)姓名在同一個(gè)“員工個(gè)人資料”數(shù)據(jù)表里可能出現(xiàn)兩次或更多次。如果能確定某個(gè)數(shù)據(jù)列將只包含彼此各不相同的值,在為這個(gè)數(shù)據(jù)列創(chuàng)建索引的時(shí)候就應(yīng)該用關(guān)鍵字UNIQUE 把它定義為一個(gè)索引。這么做的好處:一是簡化了 MySQL 對這個(gè)索引的管理工作,這個(gè)索引也因此而變得更有效率;二是 MySQL 會(huì)在有新記錄插入數(shù)據(jù)表時(shí),自動(dòng)檢查新記錄的這個(gè)字段的值是否已經(jīng)在某個(gè)記錄的這個(gè)字段里出現(xiàn)過了;如果是,MySQL 將拒絕插入那條新記錄。也就是說,索引可以保證數(shù)據(jù)記錄的獨(dú)特性。事實(shí)上,在許多場合,人們創(chuàng)建索引的目的往往不是為了提高訪問速度,而只是為了避免數(shù)據(jù)出現(xiàn)重復(fù)。主索引:在前面已經(jīng)反復(fù)多次強(qiáng)調(diào)過:必須為主鍵字段創(chuàng)建一個(gè)索引,這個(gè)索引就是所謂的“主索引”。主索引區(qū)別是:前者在定義時(shí)使用的關(guān)鍵字是 PRIMARY 而不是 UNIQUE。外鍵索引:如果為某個(gè)外鍵字段定義了一個(gè)外鍵約束條件,MySQL 就會(huì)定義一個(gè)內(nèi)部索引來幫助自己以最有效率的方式去管理和使用外鍵約束條件。復(fù)合索引:索引可以覆蓋多個(gè)數(shù)據(jù)列,如像 INDEX(columnA,columnB)索引。這種索引的特點(diǎn)是 MySQL 可以有選擇地使用一個(gè)這樣的索引。如果查詢操作只需要用到 columnA 數(shù)據(jù)列上的一個(gè)索引,就可以使用復(fù)合索引 INDEX(columnA,columnB)。不過,這種用法僅適用于在復(fù)合索引中排列在前的數(shù)據(jù)列組合。比如說,INDEX(A,B,C)可以當(dāng)做 A 或 (A,B)的索引來使用,但不能當(dāng)做 B、C 或(B,C)的索引來使用。4、系統(tǒng)特性
MySQL使用 C和 C++編寫,并使用了多種編譯器進(jìn)行測試,保證了源代碼的可移植性。支持?AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2 Wrap、Solaris、Windows等多種操作系統(tǒng)。為多種編程語言提供了?API。這些編程語言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby、.NET和 Tcl 等。支持多線程,充分利用 CPU 資源。優(yōu)化的?SQL查詢算法,有效地提高查詢速度。既能夠作為一個(gè)單獨(dú)的應(yīng)用程序應(yīng)用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中,也能夠作為一個(gè)庫而嵌入到其他的軟件中。提供多語言支持,常見的編碼如中文的?GB 2312、BIG5,日文的?Shift_JIS等都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名。提供?TCP/IP、ODBC?和?JDBC等多種數(shù)據(jù)庫連接途徑。提供用于管理、檢查、優(yōu)化數(shù)據(jù)庫操作的管理工具。支持大型的數(shù)據(jù)庫。可以處理擁有上千萬條記錄的大型數(shù)據(jù)庫。支持多種存儲(chǔ)引擎。MySQL 是開源的,所以你不需要支付額外的費(fèi)用。延伸閱讀1:mysql授權(quán)協(xié)議
MySQL 遵守的不只是 GPL 協(xié)議,而是雙授權(quán)模式(dual license)即你在遵守 GPL 協(xié)議的開源項(xiàng)目使用 MySQL,需要遵守 GPL 協(xié)議方能使用。如果你在非開源項(xiàng)目使用(即軟件不打算開放源代碼),且該軟件用來銷售,則需要向 MySQL 支付相應(yīng) license 費(fèi)用。