还剩7页未读,继续阅读
文本内容:
在数据中,建表处理是很常见且很实用的方法表和表之间的关系有1:11:NN:N三种方式1对1的方式T2b9u2本入丁G=+ou本-2罩SG:T8bx”示例一夫一妻s思考在一个表中保存着所有人的信息有男有女,要求查询出所有的夫妻,即一男一女T2b9u2本人丁G=+ou本-2罩SG:T8bxCbEVIEIVB「EbGL2ou(s罩q1/
1、3/VWE八VbCHVb(T9)、寸2GxCHVb(T)x2M罩+G1/
1、Qpn2p9uqI/lbGL2ouAV「nE2(T、‘小花、
9、
9、3)bGL2ouAV「nE2(s、玉芬
19、
9、寸)bGL2ouAV「nE2(
3、张三;T、T、9)bGL2ouAV「nE2(寸、’李四:T、s、9)bGL2ouAV「nE2(
2、王
五、T、
9、9)T3KtT2\\一对一关系的操作查出每对夫妻的姓名TQCbEVIE八IENMV22E「ECI*EbOWbGL2ouNHEbE2Gx=9T)CbEVIEAIENillV22E「ECI*EbOWbGL2ouNHEbE2Gx=TT8\\不利用表与表之间的关系T2EFECIM./VWEV2妻子、山./VWEV2丈夫EbOWM、illNHEbEM.pn2P9uq二山罩qV/Ds9山.M罩+G=M.罩qsT\\现在更先进的方式利用表间的关系ss2EFECIM./VWEV2妻子、山./VWEV2丈夫EbOWMI//EbOI/山O/M.pn2p9uq二山罩qV/D山.M罩+G=M.罩q\2b9u1对多的方式11对多,多对12一个人可以拥有多辆汽车,要求查询出某人所拥有的所有汽车3根据范式的要求,应该设计两张表,分别表示人的信息和汽车的信息strong4/strong1〃步骤1画E-R图2〃步骤2:分别建实体表,并给多方的表添加外键约束3CREATETABLEperson2idVARCHAR32PRIMARYKEYpnameVARCHAR30sexCHARl7;8CREATETABLEcaridVARCHAR32PRIMARYKEYcnameVARCHAR30priceNUMERIC102pidVARCHAR32CONSTRAINTcar_fkFOREIGNKEYpidREFERENCESperson2id14;15DROPTABLEcar;161718〃步骤3:为两个表添加测试数据19〃实体表1person2idzpnamesexVALUESP001zJack11;person2id/pnamesexVALUESP002zTom1;person2id/pnamesexVALUESP003Roser0;person2idpname/sexVALUESP004zMaryz0;person2id/pname/sexVALUESP005zMikeI1;25SELECT*FROMperson2;262728〃〃实体表229INSERTINTOcaridcnamepricepidVALUESC001zBMWJ
23.5zP001;30INSERTINTOcaridcnamepricepidVALUESC0021zBenz
123.5zP001;31INSERTINTOcaridcnamepricepidVALUESC003BMW#
223.5zP001;323334INSERTINTOcaridcnamepricepidVALUESCOll*zBMW
83.5POOS;35INSERTINTOcaridcnamepricepidVALUESC012Benz100P003;36INSERTINTOcaridcnamepricepidVALUESC013;Audi
223.5zR003;373839INSERTINTOcaridcnamepricepidVALUESC0211zBMW
88.5P004;40INSERTINTOcaridcnamepricepidVALUESC022JQQJ0JP004414243INSERTINTOcaridcnamepricepidVALUESC023Audi73POOS;44INSERTINTOcaridcnamepriceVALUESC033Audi1000;/查询哪些人有什么样的车用”表名.列名”的形式访问列,如果列名不重复,可以省2略表名3〃利用一方的主键和〃多方〃的外键进行关联4SELECTperson
2.pnamecar.cnameFROMperson2carWHERE5person
2.id=car.pid;6〃查询Jack有什么车SELECTperson
2.pnamecar.cnameFROMperson2zcarWHEREperson
2.id=car.pid8ANDperson
2.pname=Jack;9〃查询哪些人有两辆以上的车10SELECTperson
2.pnamezCOUNTpnameAS车数量FROMperson2carWHEREllperson
2.id=car.pidGROUPBYpnameHAVINGCOUNTpname=2ORDERBY车数12量;SELECT*FROMperson2WHEREidINSELECTpidFROMcarGROUPBYpidHAVINGCOUNTpid=2;〃查询哪些人没有车SELECT*FROMperson2WHEREidNOTINSELECTpidFROMcar;多对多1多对多2一个人可以拥有多种角色,如某人,即是父亲、又是儿子、又是丈夫而同时这三个角色3又可以给其他所有的人4要求查询出即是父亲、又是儿子、又是丈夫的所有人5查询出所有人拥有的所有角色strong/strong还有学生选课系统都是多对多的情况具体的实现方法在最后的比笔记中贴出来数据库的约束主键primarykey在创建表时指定主键--在声明主键时,应该同时使用notnull关键字Createtablestudidintprimarykey.在创建完成之后指定主键Altertablestudaddconstraintstudpkprimarykeyid;主键自动增长Autoincrement适合于int类型的字段外键foreignkey一表示一种引用关系与另一个表的关产关系一称为外港—外键的作用时当主表中没有记录时,无法向子表中写入I无引用的记录Altertablestudaddconstraintstudfkforeignkeystudclsidreferencescisid;主外键关系是一种1对多的关系如果主表中没有的记录,子表中将不能增加创建主外键关联,两个表的数据类型和大小必须保持二致否则创建将不会成功可以通过可视化界面操作主外关联唯一unique-与主键有所区别,主键不能为null而unique可以有二列为null这是SqlServer的限制,但Mysql可以写入多列的null值,所以,在mysql上使用unique时二般再通过notnull进行限制altertablecisaddconstraintcls_ukuniquename;/*指定name不能重复*/默认值default在创建表时,可以指定默认值如Createtablestudsexchar1default・・・・.;使用关联对数据进行查询当二个表的数据不能满足我们的需要时,我们就要从多个表中查询数据此时必须使用关联查询innerjoin-内关联,双方必须都要存在leftjoin—左关联以左边数据为准rightjoin—右关联在上面的表与表之间的关系用到的总针对项目开发的数据库设计方面的技术总结
1.设计E-RBB(先ii实体,国而联系)把项目所需的实体(故提案)先确定出来再进一步•卖出实体之阍的联系(1时1・1对多或
2、相撮E-Rgg设计霆与表结构1)对于1W1的关系.可以阳两个宴体设计成单独的表并利用外便表示出相互的对应关系视情况(如PPT35页中的夫・关系,信息印比较少)咫两个实体数据合在一起汨计在一个赛中)行II作.http://blog.2)对于1对多的关系,“1”方的实体独立设计次结构.多”方的实体增加一个外铤字勘主0).5)对于多对多的关系,两方实体分瑞独立设计次结构.再增加一个中间次(关系表)表中包段(分别是两个实体央的主位),并以这两个外罐字段做联合主••一一•代码实现时要注意.日建僧后再添加外蚂束反之则不行I存储过程三种方式1最简单,最基本的方式5THDE「IWIIEbtt写这句是为了让解析器把〃tt写当作结束标志(否则默认是把〃?〃号当作结束标记)、这样存储过程中的语句结束符?就丕会当作过程的结束标记5TDEFlWIIEbttsCbEVIEbbOCEDnbEbT()3BECI/寸2EFECI*EbOW2本nq2I/2Ebl1/102本nq(罩q、2u9山G、98G、2coLGsqGb本)八V「nE2(T9T寸、’刘三丰Q;
33、
22、‘通信学院)?〉E/Dtt8DEFlWIIEb\\把结束标记还原回来9CALLpl;〃调用存储过程pl2带参数的方式i〃带参数的存储过程2DELIMITER$$3CREATEPROCEDUREp2INidINTZINnmVARCHAR304BEGININSERTINTOstudidzsnameVALUESid/nm;6END$$7DELIMITER;89DROPPROCEDUREp2;10CALLp21015‘吊丝;3带返回值的i〃有返回值的存储过程---参数与变量问题@变量名,二个@为用户变量,两个@即2@@为全局的系统变量3DELIMITER$$4CREATEPROCEDUREp3INidINTINnmVARCHAR30OUTnumINT5BEGININSERTINTOstudidzsnameVALUESid/nm;SELECTCOUNTSINTOnumFROMstud;8END$$9DELIMITER;10CALLp31016无名@aa;SELECT@aa;〃输出变量aa的值MySql区别大小写的查询T2b9u2本入丁G=+ou本-2罩SG:T8bxMp罩本G-2b9cG:bLG\2b9u山A2d丁查询默s认是不区分大小写的如32b9u2本入丁G二”Mp罩本G-2b9cG:bLG”寸MpGLG9丁罩kG9次22b9u2本入丁G二”Mp罩本G-2b9cG:bLGQMpGLG9丁罩kGM欠〉2b9u2本入丁G=Mp罩本G・2b9cG:bLG”8MpGLG9丁罩kG9次2b9u2本入丁G=Mp罩本G・2b9cG:bLGMpGLG9丁罩kGM欠2b9u2本人丁G=Mp罩本G-2b9cG:bLG”T《2b9u2本人丁G二”Mp罩本G-2b9cG:bLGT2b9u2本人丁G=Mp罩本G-2b9cG:bLG”T\MpGLGp罩u9LA9丁罩kG9次T22b9u2本入丁G=Mp罩本G-2b9cG:bLGTQMpGLGp罩u9LA9丁罩kGM欠2b9u2本入丁G二”Mp罩本G-2b9cG:bLG”MpGLGp罩u9L入9丁罩kG9次2b9u2本人丁G二”Mp罩本G-2b9cG:bLGnMpGLGp罩ML入9丁罩kGV次2b9u2本人丁G=Mp罩本G-2b9cG:bLGn2b9u2本人丁G二”Mp罩本G-2b9cG:bLGH2b9u2本入丁G二Mp罩本G-2b9cG:bLG”2b9u2本人丁G二”Mp罩本G-2b9cG:bLGMT8bx\2b9u事务transaction:原子性atomicity组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分三致性consistency在事务处理执行前后,数据库是[致的数据库数据完整性约束隔离性isolation一个事务处理对另一个事务处理的影响持续性durability事务处理的效果能够被永久保存下来一个事务只会有一个结果要么成功、要么失败512本9库本L9u29睡:罩ou开始一个事务Co山山罩本?提交所做的修改Rollback;回滚所做的修改如果在操作时出错,应该从新开始一个事务事务的隔离级别说明YES可能出现,NO不会出现隔离级别Transaction_read_uncommited=1(读未提交)Transact!on_read__commited=2(读已经提交)Transaction_repeatable_read=4(可重友读-默认)Transactionserializable=8(串行化-最高级别)设置事物隔离级别在mySql的命令行设置隔离级别]在MySql的命令行设置隔离级别,只对此打开的命令行窗口有效第一个命令行窗口,就是一个独立的客户端]Select@@tx_isolation;可以查看目前的隔离级别Settransactionisolationlevel〈级别名称》可以设置隔离级别;级别名称为{READUNCOMMITTED|READCOMMITTED|REPEATABLEREADTSERIALIZABLE需要注意的是,隔离级别必须要在事务当中使用,没有事务,隔离级别也没有意义了1※事务处理2STARTTRANSACTIONDELETEFROMstudWHEREid=1015;DELETEFROMstudWHEREid=1014;SELECT*FROMstud;7ROLLBACK/COMMIT;。
个人认证
优秀文档
获得点赞 0