OpenTenBase的复合唯一约束UNIQUE与单列唯一约束UNIQUE
复合唯一约束UNIQUE作用将多个列组合在一起作为一个整体要求这个组合的值在表中必须唯一语法格式-- 列级约束写在最后CREATETABLE表名(列1数据类型,列2数据类型,UNIQUE(列1,列2));-- 表级约束单独定义CREATETABLE表名(列1数据类型,列2数据类型,CONSTRAINT约束名UNIQUE(列1,列2));举个例子1.学生选课表(让同一个学生不能重复选同一门课)CREATETABLEenrollment(enrollment_id BIGSERIALPRIMARYKEY,student_idBIGINTNOTNULL,section_idBIGINTNOTNULL,scoreNUMERIC(5,2),UNIQUE(student_id,section_id)-- 同一个学生不能重复选同一门课);-- 表级约束CREATETABLEenrollment(enrollment_id BIGSERIALPRIMARYKEY,student_idBIGINTNOTNULL,section_idBIGINTNOTNULL,scoreNUMERIC(5,2),CONSTRAINTunique_student_sectionUNIQUE(student_id,section_id)); 2.预约教室(同一教室同一时间段只能被预约一次)CREATETABLEclassroom_booking(booking_id BIGSERIALPRIMARYKEY,classroom_noVARCHAR(20)NOTNULL,booking_dateDATENOTNULL,time_slotINTEGERNOTNULL,teacher_nameVARCHAR(50),UNIQUE(classroom_no,booking_date,time_slot)-- 同一教室同一时间段只能被预约一次);单列唯一约束作用要求指定列中的所有值都必须是唯一的不允许出现重复值语法格式-- 列级约束CREATETABLE表名(列名 数据类型UNIQUE,列名 数据类型[其他约束]);-- 表级约束-- 格式1系统自动生成约束名CREATETABLE表名(列名1数据类型,列名2数据类型,UNIQUE(列名1)-- 单列表级约束);-- 格式2自定义约束名推荐CREATETABLE表名(列名1数据类型,列名2数据类型,CONSTRAINT约束名UNIQUE(列名1)-- 带名称的单列表级约束);举个例子-- 示例1系统自动命名CREATETABLEstudent(student_id BIGSERIALPRIMARYKEY,student_noVARCHAR(20),student_nameVARCHAR(50),UNIQUE(student_no)-- 表级student_no学号不能重复系统生成名称如 student_student_no_key);-- 示例2自定义约束名推荐CREATETABLEstudent(student_id BIGSERIALPRIMARYKEY,student_noVARCHAR(20),student_nameVARCHAR(50),CONSTRAINTuk_student_noUNIQUE(student_no)-- 表级student_no学号不能重复自定义名称);-- 示例3多个单列唯一约束表级CREATETABLEusers(user_id BIGSERIALPRIMARYKEY,usernameVARCHAR(50),emailVARCHAR(100),phoneVARCHAR(20),CONSTRAINTuk_usernameUNIQUE(username),CONSTRAINTuk_emailUNIQUE(email),CONSTRAINTuk_phoneUNIQUE(phone)-- username、email、phone都不能重复);