zoukankan      html  css  js  c++  java
  • 五种完整性约束分别是什么——基于MySQL数据库的数据约束实例

         为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。

    #数据约束

      1. #五种完整性约束:  
      2.   
      3. #NOT NULL :非空约束,指定某列不能为空;  
      4.   
      5. #UNIQUE : 唯一约束,指定某列或者几列组合不能重复  
      6.   
      7. #PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录  
      8.   
      9. #FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性  
      10.   
      11. #CHECK :检查,指定一个布尔表达式,用于指定对应的值必须满足该表达式(mysql不支持check约束)  
      12.   
      13.    
      14.   
      15. #--------------------------------NOT NULL 非空约束 ---------------------------  
      16.   
      17. create table test4  
      18.   
      19. (  
      20.   
      21.     #建立非空约束  
      22.   
      23. id int not null,  
      24.   
      25. name varchar(55) default 'ABCD' not null,  
      26.   
      27. #默认值就是null  
      28.   
      29. age int null  
      30.   
      31. );  
      32.   
      33. #取消非空约束  
      34.   
      35.  alter table test4  
      36.   
      37.  modify name varchar(55) default 'ABCD' not null,  
      38.   
      39. #增加非空约束  
      40.   
      41.  alter table test4  
      42.   
      43.  modify age int not null;  
      44.   
      45. #--------------------------------UNIQUE : 唯一约束--------------------------------  
      46.   
      47. #列级约束语法建立约束  
      48.   
      49.  create table test_unique  
      50.   
      51.  (  
      52.   
      53.  #建立行级唯一约束  
      54.   
      55.  id int not null unique,  
      56.   
      57.  age int  
      58.   
      59.  );  
      60.   
      61.  #表级约束语法格式  
      62.   
      63.  create table unique_test3  
      64.   
      65.  (  
      66.   
      67. test6_id int not null,  
      68.   
      69. test6_name varchar(255),  
      70.   
      71. test6_pass varchar(255),  
      72.   
      73. #使用表级约束语法建立唯一约束,指定test6_id和test6_name两列组合不能重复  
      74.   
      75. constraint test6_unique unique(test6_id,test6_name),  
      76.   
      77. #使用表级约束语法建立唯一约束,约束名为test6_unique_2,test6_pass不能重复  
      78.   
      79. constraint test6_unique_2 unique(test6_pass)  
      80.   
      81.  );  
      82.   
      83.  #add关键字增加唯一约束  
      84.   
      85.  alter table test4  
      86.   
      87.  add unique(id,name,age);  
      88.   
      89.  #modify关键字删除或者增加唯一约束  
      90.   
      91.  alter table test4  
      92.   
      93.  modify age varchar(255) not null;  
      94.   
      95.  alter table test4  
      96.   
      97.  modify age varchar(255) not null unique;  
      98.   
      99.  #对大部分数据库而言,删除约束使用: alter table 表名 drop constraint 约束名  
      100.   
      101.  #但是Mysql不采取此方式,而是: alter table 表名 drop index 约束名  
      102.   
      103.  #--------------------------------PRIMARY KEY : 主键约束--------------------------------  
      104.   
      105.  #主键约束相当于非空约束和唯一约束。  
      106.   
      107.  #每个表只允许拥有一个主键,但是这个主键可以由多个数据列组成,这些列组合不能重复  
      108.   
      109.  #标准SQL允许给主键自行命名,但是对于Mysql来说自己的名字没有任何作用,总是默认名为PRIMARY  
      110.   
      111.  create table primary_test  
      112.   
      113.  (  
      114.   
      115. #使用列级语法建立主键约束  
      116.   
      117. test_id int primary key,  
      118.   
      119. test_name varchar(255)  
      120.   
      121.  );  
      122.   
      123.  #使用表级语法建立主键约束  
      124.   
      125.  create table primary_test2  
      126.   
      127.  (  
      128.   
      129. test_id int not null,  
      130.   
      131. test_name varchar(255),  
      132.   
      133. test_pass varchar(255),  
      134.   
      135. #指定主键约束名为test2_pk,对大部分数据库有效,但是对mysql无效,此主键约束名仍为PRIMARY  
      136.   
      137. constraint test2_pk primary key (test_id)  
      138.   
      139.  );  
      140.   
      141.  #以多列组合创立主键  
      142.   
      143.   create table primary_test3  
      144.   
      145.  (  
      146.   
      147. test_id int,  
      148.   
      149. test_name varchar(255),  
      150.   
      151. primary key(test_id,test_name)  
      152.   
      153.  );  
      154.   
      155.  #使用列级约束语法  
      156.   
      157.  alter table primary_test3  
      158.   
      159.  modify test_id int primary key();  
      160.   
      161.  #使用表级约束语法  
      162.   
      163.   alter table primary_test3  
      164.   
      165.   add primary key(test_id,test_name);  
      166.   
      167.  #删除主键约束:alter table 表名 drop primary key;  
      168.   
      169.  #主键列自增长特性:如果某个数据列的类型是整型,而且该列作为主键列,则可指定该列具有自增长功能  
      170.   
      171.  #mysql使用auto_increment来设置自增长,向该表插入记录时可不为该列指定值,由系统生成  
      172.   
      173.    create table primary_test3  
      174.   
      175.  (  
      176.   
      177. //建立主键约束、设置自增长  
      178.   
      179. test_id int auto_increment primary key,  
      180.   
      181. test_name varchar(255)  
      182.   
      183.  );  
      184.   
      185.  #外键约束 FOREIGN KEY  
      186.   
      187.  #Mysql中只有表级语法建立的外键约束才可以生效  
      188.   
      189.  #为保证参照主表的存在,先建立主表  
      190.   
      191.  create table teacher_tb  
      192.   
      193.  (  
      194.   
      195. t_id int auto_increment,  
      196.   
      197. t_name varchar(255),  
      198.   
      199. primary key(t_id)  
      200.   
      201.  );  
      202.   
      203.  create table student_tb  
      204.   
      205.  (  
      206.   
      207. s_id int auto_increment primary key,  
      208.   
      209. s_name varchar(255) not null,  
      210.   
      211. t_java int,  
      212.   
      213. foreign key(t_java) references teacher_tb(t_id)  
      214.   
      215.  );  
      216.   
      217. #如果使用表级约束语法,则需要使用foreign key指定本表的外键列,如果创建外键约束时没有指定约束名,  
      218.   
      219. #则mysql会为该外键约束命名为table_name_ibfk_n,其中table_name是从表的表名,n是从1开始的整数  
      220.   
      221.  create table teacher_tb2  
      222.   
      223.  (  
      224.   
      225. t_id int auto_increment,  
      226.   
      227. t_name varchar(255),  
      228.   
      229. primary key(t_id)  
      230.   
      231.  );  
      232.   
      233.  create table student_tb2  
      234.   
      235.  (  
      236.   
      237. s_id int auto_increment primary key,  
      238.   
      239. s_name varchar(255) not null,  
      240.   
      241. t_java int,  
      242.   
      243. constraint student_teacher_fk foreign key(t_java) references teacher_tb2(t_id)  
      244.   
      245.  );  
      246.   
      247.  #建立多列组合外键约束  
      248.   
      249.   create table teacher_tb5  
      250.   
      251.  (  
      252.   
      253. t_name varchar(255),  
      254.   
      255. t_pass varchar(255),  
      256.   
      257. primary key(t_name,t_pass)  
      258.   
      259.  );  
      260.   
      261.  create table student_tb5  
      262.   
      263.  (  
      264.   
      265. s_id int auto_increment primary key,  
      266.   
      267. s_name varchar(255) not null,  
      268.   
      269. t_java_pass varchar(255),  
      270.   
      271. t_java_name varchar(255),  
      272.   
      273. foreign key(t_java_name,t_java_pass)   
      274.   
      275.     references teacher_tb5(t_name,t_pass)  
      276.   
      277.  );  
      278.   
      279.  #删除外键约束  
      280.   
      281.  alter table student_tb2  
      282.   
      283.  drop foreign key student_teacher_fk;  
      284.   
      285.  #增加外键约束  
      286.   
      287.  alter table student_tb2  
      288.   
      289.  add foreign key(t_java) references teacher_tb2(t_id);  
      290.   
      291.  #外键约束参照自身,自约束  
      292.   
      293.  create table foreign_test9  
      294.   
      295.  (  
      296.   
      297. foreign_id int auto_increment primary key,  
      298.   
      299. foreign_name varchar(255),  
      300.   
      301. refer_id int,  
      302.   
      303. foreign key(refer_id) references foreign_test9(foreign_id)  
      304.   
      305.  );  
      306.   
      307.  #定义当删除主表记录时,从表记录也随之删除  
      308.   
      309.  #on delete cascade 把参照该主表记录的从表记录全部级联删除  
      310.   
      311.  #on delete set null 把参照该主表记录的从表记录从表设为null                e  
      312.   
      313.   create table teacher_tb8  
      314.   
      315.  (  
      316.   
      317. t_id int auto_increment,  
      318.   
      319. t_name varchar(255),  
      320.   
      321. primary key(t_id)  
      322.   
      323.  );  
      324.   
      325.  create table student_tb8  
      326.   
      327.  (  
      328.   
      329. s_id int auto_increment primary key,  
      330.   
      331. s_name varchar(255) not null,  
      332.   
      333. t_java int,  
      334.   
      335. constraint student_teacher_fk foreign key(t_java) references teacher_tb8(t_id) on delete cascade  
      336.   
      337.  ); 
  • 相关阅读:
    图数据库的选择与对比(Neo4j)
    pip install ahocorasick报错以及Requirement already satisfied问题
    从知识图谱到认知图谱: 历史、发展与展望
    kafka(一)—— kafka安装简单使用
    python管理docker
    Javaweb前后端分离项目docker部署
    django + uwsgi + nginx部署(前后端不分离)
    坑(八)—— LayUI框架中append新的元素的问题
    docker(三)—— 避免一直输入sudo
    坑(七)—— 表单提交方式
  • 原文地址:https://www.cnblogs.com/huhewei/p/6749576.html
Copyright © 2011-2022 走看看