MySQL設(shè)置多列為唯一約束,即多列不能同時(shí)相同

假設(shè)有一個(gè)需求是用戶給評(píng)論點(diǎn)贊,數(shù)據(jù)庫(kù)設(shè)計(jì)是三張表,用戶表t_user,評(píng)論表t_comment,點(diǎn)贊表t_praise,其中點(diǎn)贊表中有兩個(gè)外鍵分別是user_id和comment_id,分別關(guān)聯(lián)用戶表的用戶id和評(píng)論表的評(píng)論id,然后規(guī)定一個(gè)用戶只能給同一條評(píng)論點(diǎn)贊一次,有一種實(shí)現(xiàn)方式就是在插入點(diǎn)贊表之前,先通過(guò)user_id和comment_id查詢是否有點(diǎn)贊記錄,如果沒(méi)有的話,再執(zhí)行插入操作,否則返回您已經(jīng)點(diǎn)過(guò)贊了.這樣實(shí)現(xiàn)的話就會(huì)多一次數(shù)據(jù)庫(kù)查詢操作.更好的實(shí)現(xiàn)是,修改點(diǎn)贊表的user_id和comment_id為唯一約束,即這兩列不能同時(shí)相同,這樣在執(zhí)行插入操作的話,如果已經(jīng)點(diǎn)過(guò)贊了,數(shù)據(jù)庫(kù)會(huì)拋出違反了唯一鍵約束,這樣的話,就可以避免多一次數(shù)據(jù)庫(kù)查詢操作了.具體設(shè)置多列為唯一約束的語(yǔ)句是(注意斜體語(yǔ)句):

CREATE TABLE t_praise (
id int(12) unsigned NOT NULL AUTO_INCREMENT,
comment_id int(12) NOT NULL,
user_id int(12) NOT NULL,
KEY FK_t_praise_comment (comment_id),
KEY FK_t_praise_user (user_id),
UNIQUE KEY UK_praise (comment_id,user_id)
)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • CREATE TABLE IF NOT EXISTS ecs_order_info (order_id mediu...
    cookie口閱讀 16,145評(píng)論 0 16
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,678評(píng)論 19 139
  • 看了很多人的成功經(jīng)歷相信你跟我一樣感悟頗多,在看到別人第二次或第三次的不斷成功,都會(huì)問(wèn)這是為什么?有的人年紀(jì)不大卻...
    luodiren閱讀 742評(píng)論 0 1
  • 很多時(shí)候,我自己會(huì)苦于想學(xué)習(xí),但沒(méi)有資料的收集渠道,或者上培訓(xùn)班價(jià)格不便宜但時(shí)間不方便。里面有些網(wǎng)站,自己曾經(jīng)用過(guò)...
    小老鼠不哭閱讀 1,506評(píng)論 4 65

友情鏈接更多精彩內(nèi)容