基于MySQL数据库的数据约束实例及五种完整性约束介绍
为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。
#数据约束
#五种完整性约束: #NOTNULL:非空约束,指定某列不能为空; #UNIQUE:唯一约束,指定某列或者几列组合不能重复 #PRIMARYKEY:主键,指定该列的值可以唯一地标识该列记录 #FOREIGNKEY:外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性 #CHECK:检查,指定一个布尔表达式,用于指定对应的值必须满足该表达式(mysql不支持check约束) #--------------------------------NOTNULL非空约束--------------------------- createtabletest4 ( #建立非空约束 idintnotnull, namevarchar(55)default'ABCD'notnull, #默认值就是null ageintnull ); #取消非空约束 altertabletest4 modifynamevarchar(55)default'ABCD'notnull, #增加非空约束 altertabletest4 modifyageintnotnull; #--------------------------------UNIQUE:唯一约束-------------------------------- #列级约束语法建立约束 createtabletest_unique ( #建立行级唯一约束 idintnotnullunique, ageint ); #表级约束语法格式 createtableunique_test3 ( test6_idintnotnull, test6_namevarchar(255), test6_passvarchar(255), #使用表级约束语法建立唯一约束,指定test6_id和test6_name两列组合不能重复 constrainttest6_uniqueunique(test6_id,test6_name), #使用表级约束语法建立唯一约束,约束名为test6_unique_2,test6_pass不能重复 constrainttest6_unique_2unique(test6_pass) ); #add关键字增加唯一约束 altertabletest4 addunique(id,name,age); #modify关键字删除或者增加唯一约束 altertabletest4 modifyagevarchar(255)notnull; altertabletest4 modifyagevarchar(255)notnullunique; #对大部分数据库而言,删除约束使用:altertable表名dropconstraint约束名 #但是Mysql不采取此方式,而是:altertable表名dropindex约束名 #--------------------------------PRIMARYKEY:主键约束-------------------------------- #主键约束相当于非空约束和唯一约束。 #每个表只允许拥有一个主键,但是这个主键可以由多个数据列组成,这些列组合不能重复 #标准SQL允许给主键自行命名,但是对于Mysql来说自己的名字没有任何作用,总是默认名为PRIMARY createtableprimary_test ( #使用列级语法建立主键约束 test_idintprimarykey, test_namevarchar(255) ); #使用表级语法建立主键约束 createtableprimary_test2 ( test_idintnotnull, test_namevarchar(255), test_passvarchar(255), #指定主键约束名为test2_pk,对大部分数据库有效,但是对mysql无效,此主键约束名仍为PRIMARY constrainttest2_pkprimarykey(test_id) ); #以多列组合创立主键 createtableprimary_test3 ( test_idint, test_namevarchar(255), primarykey(test_id,test_name) ); #使用列级约束语法 altertableprimary_test3 modifytest_idintprimarykey(); #使用表级约束语法 altertableprimary_test3 addprimarykey(test_id,test_name); #删除主键约束:altertable表名dropprimarykey; #主键列自增长特性:如果某个数据列的类型是整型,而且该列作为主键列,则可指定该列具有自增长功能 #mysql使用auto_increment来设置自增长,向该表插入记录时可不为该列指定值,由系统生成 createtableprimary_test3 ( //建立主键约束、设置自增长 test_idintauto_incrementprimarykey, test_namevarchar(255) ); #外键约束FOREIGNKEY #Mysql中只有表级语法建立的外键约束才可以生效 #为保证参照主表的存在,先建立主表 createtableteacher_tb ( t_idintauto_increment, t_namevarchar(255), primarykey(t_id) ); createtablestudent_tb ( s_idintauto_incrementprimarykey, s_namevarchar(255)notnull, t_javaint, foreignkey(t_java)referencesteacher_tb(t_id) ); #如果使用表级约束语法,则需要使用foreignkey指定本表的外键列,如果创建外键约束时没有指定约束名, #则mysql会为该外键约束命名为table_name_ibfk_n,其中table_name是从表的表名,n是从1开始的整数 createtableteacher_tb2 ( t_idintauto_increment, t_namevarchar(255), primarykey(t_id) ); createtablestudent_tb2 ( s_idintauto_incrementprimarykey, s_namevarchar(255)notnull, t_javaint, constraintstudent_teacher_fkforeignkey(t_java)referencesteacher_tb2(t_id) ); #建立多列组合外键约束 createtableteacher_tb5 ( t_namevarchar(255), t_passvarchar(255), primarykey(t_name,t_pass) ); createtablestudent_tb5 ( s_idintauto_incrementprimarykey, s_namevarchar(255)notnull, t_java_passvarchar(255), t_java_namevarchar(255), foreignkey(t_java_name,t_java_pass) referencesteacher_tb5(t_name,t_pass) ); #删除外键约束 altertablestudent_tb2 dropforeignkeystudent_teacher_fk; #增加外键约束 altertablestudent_tb2 addforeignkey(t_java)referencesteacher_tb2(t_id); #外键约束参照自身,自约束 createtableforeign_test9 ( foreign_idintauto_incrementprimarykey, foreign_namevarchar(255), refer_idint, foreignkey(refer_id)referencesforeign_test9(foreign_id) ); #定义当删除主表记录时,从表记录也随之删除 #ondeletecascade把参照该主表记录的从表记录全部级联删除 #ondeletesetnull把参照该主表记录的从表记录从表设为nulle createtableteacher_tb8 ( t_idintauto_increment, t_namevarchar(255), primarykey(t_id) ); createtablestudent_tb8 ( s_idintauto_incrementprimarykey, s_namevarchar(255)notnull, t_javaint, constraintstudent_teacher_fkforeignkey(t_java)referencesteacher_tb8(t_id)ondeletecascade );
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接