mysql怎么设计表级联 mysql左关联表高效写法
mysql表的级联问题
mysql:
创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都做网站、成都网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的鹿城网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!
1、先给B表添加主键列
alter table tableB add constraint b_PK primary key(date,channel);
2、将B表的组合主键关联到A表的外键组合键中
alter table tableB add constraint tableB_fk foreign key(date,channel) references tableA (date,channel) on DELETE CASCADE ;
3 delete from tableA where date =? and channel =? 就出发相关记录··~
如何在mysql中建表来实现操作时级联效果
有两种方法,一种方法使用mysql的check table和repair table 的sql语句,另一种方法是使用MySQL提供的多个myisamchk, isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。
1. check table 和 repair table
登陆mysql 终端:
mysql -uxxxxx -p dbname
check table tabTest;
如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:
repair table tabTest;
进行修复,修复之后可以在用check table命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2. myisamchk, isamchk
其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:
myisamchk tablename.MYI
进行检测,如果需要修复的话,可以使用:
myisamchk -of tablename.MYI
关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:
[ -x /tmp/mysql.sock ] /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。
需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)
mysql表的设计和关联问题
这个问题问的好,要弄一个表很容易,关键是表设计出来是否合理!
如果表设计的好,则会相当清晰,易于理解,后续开发上事半功倍,维护也方便;如果设计的不好,则难以理解,维护困难,代价大。
表与表之间的关系有三种:1.一对一,2.一对多,3.多对多
一对一的表,两表的属性实际上完全可以合并成一个表,共用一个主键即可;
一对多的表,可以设中间关联表,也可以将关联表并入“多”这头;若设独立关联表,则可引入“多”这头的主键作为其主键,也可另立主键,并将“一”和“多”两表的主键作为关联表的外键;
多对多的表,则必须设中间关联表,关联表设独立主键,并引入两个“多”头的表的主键作为关联表的外键。
这是上述三种关系表在键处理上的基本原则。
范式还是要遵循的,这套理论还是科学合理的。不要相信反范式设计,反范式设计在规模庞大时,数据冗余多,编码及维护会变得困难,万一考虑漏掉的将导致数据不一致,甚至酿成灾难。严格按照范式理论来设计数据库,将使你编码及维护时少操很多心。
一般来说,先进行需求分析,然后画出数据流图,然后再根据数据流图画出ER图,然后再根据ER图创建各种表。表是根据ER图来创建的,表设计的合不合理,关键是ER图抽像的合不合理。在抽像ER图时,一般遵循这样的原则:
能用1对1的,就不用1对多;能用1对多的,就不用多对多,往简单化方向靠;
能当属性处理的,尽量当属性,而不是当实体处理去另立新表,这样可使问题简化。
把意义相近联系紧密的属性放在一张表内,而不是拆在多张表中。
看了一下你上述几张表,我认为不合理,户主是人,家庭成员也是人,把他们分在户主表和家庭成员表中不合理,他们是同一类的,宜合在一张家庭成员表中,并增加一个标志性字段,以指明哪个人是户主。另外,宜建立一张地址表,以取代户主表,地址表中宜指明乡场镇、村巷道、几区、门牌号等与地址关系紧密的属性,把户籍、联系方式、户主等字段拿走,他们不是地址属性,这几个宜放在成员关系表中,户籍是人的属性,并非地址的属性,联系方式就更明显了,要联系的是人,而不是地址。
很明显,地址和家庭成员是一对多关系,一个地址同时可以住着多个成员,而一个成员同时只能住一个地址,这样,设计成地址表和家庭成员表之后,要在家庭成员表中再加一个地址外键字段,把地址表的主键当作家庭成员表的外键填入,这样,成员表中的每个人都可以通过地址外键字段到地址表中找到其所住地址。另外,成员表中也指明了哪个人是户主,也指明了每个人的户籍和联系方式,这些信息你都可以找得到。
网站标题:mysql怎么设计表级联 mysql左关联表高效写法
本文URL:http://scyanting.com/article/hidgjj.html