版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、MySQL中常见的六个约束类型详解目录刖百1. notnull2. unique._efult4iyey自增主键utoineent-oeiney.e总结心结刖旨在向数据表中插入数据时,有的时候对于插入的数据是有特殊要求的,比如学生成绩不能为空,学生学号不能重复等等,这个时候约束就派上用场了。约束类型是通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。这一章我们主要介绍六个常见的lySQL约束类型。1.notnull保证指定不能存储L值,如果插入L则插入失败。我们定义两张数据表,分别是tu(表和tu观察两者的区别。ent表ytue表设定相关约束,tuent表作为其对照表,不设置任何
2、约束来lysqDcreatetEbl已student(idLntIuniqueJnazneYarchar;20)J;QuEiyOK,0revsaffectes(0.05號_axysqldescstudent;FieLd|TypeXulL|Key|DefaultExtraYESnllNULLYES|NULLir.T(ll:varchcr(20)tuentl中i定义了notnul,所以L这一行的LL,Oi思一行数据不能为否则会插入失败。idnameiH7sqlCTEalEtablestudent_CQpyJidintnamevEccheX20.);ueryOK,0rowsaffected(0.05
3、sec)nysqldescstudAnt-COfy;|Null|Key|DefaultExtra|YESFieldTypetudentllLt(ll)_vLrchar(20)YES表中没有进行任何约束,所以任何字段的一一可E意味着用户可以随意插入空值而不会报错。idnameQ:notnul约束下除了显式的指定插入L会报错外,隐式的L会报错吗L指定有两种方式,分别是显式和隐式。显式指的是插入时设定该列为LL而隐式指的是插入时对该列没有赋值,而这一列又没有指定默认值,系统默认的默认值是LL所有这中情况下也会触发插入控制的错误。ijys(llinsertintostudentvaines(NUM张;
4、显式ERROR1048(23000):Column?ir?cannotbenullU-LUIUIlXiJuWV/kiUXLLJUlJ.LIVLU-U.1UV2J11U.丄iiysqinsertintostudentvainest张):隐式EEEOR1136(21S01):ColumcountcoesntniEitchvkLuecor.ntatrow12unique下面两张图分别是对tude表和tudet表的操作,tude表的列设置了u约束,所以在插入同样的d时会显示重复操作。H75qldescstudentFieldTypeNull|Key|Default|Extraidmt(11)nameV
5、Erchar(20)YESYESLNINULLNULL2rowsinset(0.0Csec)a/5qlinsertintostudentvaluss(.insertintoEtudEiitvsAuee1-审0U):EJ5R0E1C62(22000):DucL;ca_t亡亡口七兰k亡”i(f1a/5qlinsertintostudentvalusslWLLj1I:i.:J;ueryOK,1rowaffected(0.01secia/5qlselect中frcnstudent:+id|nametudet表中没有进行任_raystll)descstudei:T_copy;)descstudent_c
6、opy;2rowsmset(0.COsec)mysql)insertintnstudEnt_CDpyvalues(1,hJfeH5):QueryDE1towaffected(0.01sec)mysql)insertintnstudent_cspyvaJuewIl,李四);Query:也1towaffected(0.COsec)mysql)insertintcudent_cspyvalueeNULL”王五)QueryDE1towaffected(0.01sec)mystll)seLect水froi5tv.dent_ccpy;idiicjne其实这个问题在刚才已经操作过了LLtudb.表中插入值也
7、得唯一,再插入就会报错规定没有给列赋值时的默认值,换句话说就是,插入数据时没有给指定列的值,那么其值就是defalu指定的默认值。tude表指定了a字段设置了default束之后,default这列就有了名字。当插入数据时,没有指定a这一列,那么a这列就会按照我们设置的默认值未命名来填充。JJLJd4丄Fmy5ilcreatetablestudent(idint,namevarc:haTf20)ldefajibt7命名);1QueryOK,0rowsaffected(0.06sec:uiysd_descstudent:FieldJH一一一一-F-一TTsrpe1Kull1KeyDefault丄
8、丄JExtra1pidnamevart:iar20)YESYES1%|1+442Tw弓inset(0.00seelJiysqlinsertintotucent(id)valuer(1);CSDj1jlQQuEiryOK,Lrowaffected(0.01see)mysqlselect+=ZTomstudenz;HT1-1|-iianie1-1HL未命名-一e表没有设置ea勺束,所以当插入数据时,没有指定的列会按照系统默认的默认值来填充,也就是iysqlcr已乱tetEbl已student_ccp7;idint,iicunevarchar(20);queryOK,0rovsaffected(0.
9、C4sec)iysqldescstudent_copyj11IField1LNullKeyDefault|Extra|1id-一YESNULLname4-VElTclleX(20)-YES-1rwjiV2roffsinset(0.00sec)iysqlin=ertintostudent_copy:id)values(1)queryOK,1rovaffected(0.01secjiys(llselect电frmsstv.dent;ERROR1146(42SO2.):Tablerjava_100.sstudentJdoesr.texistiys(llselect电frmstudent_cofyj4
10、!d卜rimaridnfizee+|1|NULL的结合,q保证某列具有唯一标识且不能存储值。C5DN前几个约束类型都是可以同时给多个列设置的,但是primarykey-张表中只有能约束一列,使用primaryke约束的列被称为主键。和i类型,插入的数据如果重复了,那么后一条数据会插入失败,并且插入的数据不能为。mysqLcreatetabLestcdent(idintprimarykey,namevarchar(20);QueryOK,Drowsaffected(D.06sec)-nr.sqLdescstudent:!FieldI一一_-一-一Type1一|Null_KeyDefault-一+
11、Extra|1idnamejint(11)varchar(JO)-一-一NDYESHHPKINULLNULL+2rawsin3et(0.00sec)mysql)insertintostudentvalues(lj-7):QueryOK,1rowaffected(0.015ec)niyscil)insert彳ntc,EtuT亡ntvrImps.1:iK:-ERROR104S(23000)Columnic:brr7mllI皿密:._insertintoERROR106223000rT3pliwi:Eei】:i-yT氏r畀卩1匣牙,.y.常见的主键都是数字形式的。个表中只能由一列时主键,不能同时有多
12、列是主键。设计表的时候,一般最好设定一个主键,Tjysqlcr已atetablestudent_copy(idliltprimarykeyj|nainevaj:char(2D)primarykey;|;EEROR1068(42000):MultipleprimcirykeydefinediiysQl自增主键auto_increment在实际开发中往往有一系列的策略来保证主键不重复最常见的方法就是设置自增主键系统可以自动给数据分配用户也可以同时手动进行干预因为中内置了自增主键功能所以使用非常简单下图中i这一列就变成了自增主键用户在插入数据时就可以不必手动干预了liysql)createtable
13、student(idintprimarykeymto_increment,namevarchar(20).);ueryOK,0rovsaffected(0.04sec?-iiysqldescstudent;IField|Type|Null|Key|Default|ExtraNOintdljvarchcr(20)YES执行以下操作猜想该表的查询结果是什么一+idnameifFRljlNULLIINULLautoLLLcrement已知字段设置为自增主键iysqlinsertiirtcistudenTlues(nnlljjkY”:;TieryOK,1tewaffected(0.00sec;ivsq
14、linsertiirtcistudenTlues(lh)EEROR1062(23000):Duplicateentry:1forkeyTRniARYiysqlinsertiirtcistudenTyeIuds孑!TieryOK,1tewaffected(0.01sec;张三的i时设置i由于自增主键按照顺序它的dt李四的;d找主键不能重复李四的id和张三的i重复所以插入失败继续插入李四数据此没有和原有数据重复所以插入成功王五的i按照自增主键接着上一个顺序往下走所以它的i那么我们来看一下结果mViQl)select总frcnstudentid|namelk-李张李.上5.foreignkey外键用
15、于关联其他表的主键保证一个表中的数据匹配另一个表中的值的参照完整性。foreignkey字段名referen主表歹U下面我们举个例子来理解下我们现在创建两张表并想把它们关联起来应该如何操作呢首先思考一下这个对应关系一个学生对应一个班级一个班级对应多个学生.在学生表中i为主键那我们可以设置学生为外键去关联比班级表.创建班级表设置为主键reeeiinrirykeyoinreennamevarchar(20)创建学生表d设置i为主键reeedent(iinrirykeyuto_incremennamevarchar(20class_idint,foreignkey_id)reference表示外键约
16、束raysqldescstudenz:idnazeclass_idintJll.)varehar(20;intJll.)ssNG迁T+DeExtra外键的使用规则学生表中的插入的班级mHenullautc_increiiient3rosinset00sec.:Field|Typeidnajjeint(11;varchartSCi)必须在班级表中存在XulL|Key|DefaultXOPRMLlNULLE:tra+anto_incrementCSDM回EmpsralrlOmysQl)seLect中froi|cLas77|implyset0.00see)mystil)iLisertistf.den
17、tvaluesJtiulL,张1:ERj?OH1452(23000):CejmioIaddorupdateachi_droff:aforeignk已ycsnstr乱intfails(java_lC0.student,CONSTRAINT3tudeiit_ibfk_lFOREIGNKEY(classjd)REFERENCESclass(id)班级表是空的这个时候插入学生表数据并给而班级号在班级表中是空的所以插入失败.学生表指定的这个外键约束必须是班级表的主键外键约束建立好了以后此时班级表中的班级i就不能再随意修改或删除iysql)updateclasssetid=20whereiicjne二高E
18、j?OR1451(230C0):CaunctdeLeteorupdateaparentrow:乱zoreignkeyconstraintfails:java.lCO.studeit3NSTRAIK1s:v,dent_ibfk._lFOREIGNKEYfclass.id;EEFENCESclassidj)ysql)我们无法将班级表中i的记录修改为i因为学生表中的张三依赖于班级表i这样的结果.外键的缺点加入假如我们有下面这样一个商品-订单关联的两张表商品离商靠恫商話名称商品你3.呈否有霜订单衷(kid,qgid.订里时间112021-090此时我们可以使用订单表中的商品和商品表中的商品建立外键约束但是当订单表中有了一个商品为的记录时就无法删除
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025《登岳阳楼》课件
- 注册登记与定期报检制度培训课件
- 2026年新能源并网工程合同
- 护理安全管理与监控措施培训
- 食品安全综合检查制度培训课件
- 2026年广东省梅州市单招职业适应性考试题库及完整答案详解1套
- 2026年广东农工商职业技术学院单招综合素质考试题库附答案详解(达标题)
- 2026年广东舞蹈戏剧职业学院单招职业适应性考试题库及一套完整答案详解
- 2025《念奴娇 过洞庭》艺术特色赏析课件
- 变配电室值班制度培训
- 2026江苏中烟工业有限责任公司高校毕业生招聘14人备考题库(第一批次)及答案详解(必刷)
- 2025~2026学年江苏省徐州市高三上学期期中零模英语试卷
- 自然语言处理:大模型理论与实践 课件全套 第1-12章 绪论、词向量-评价指标
- 钢管桁架结构制作与安装施工技术
- 人工智能在高职机械专业教学中的应用研究
- T-CWEMS 032-2025 电力行业健康企业建设指南
- 高标准农田建设项目操作方案指南
- 2026年上饶职业技术学院单招职业技能考试必刷测试卷附答案
- 饿了么代理协议书
- 油锅起火应急处理课件
- 《幼儿数学教育活动设计与指导(第3版)》课件-第七章 幼儿空间方位概念的发展和教育
评论
0/150
提交评论