运河建设管理有限公司网站,在校学生兼职网站建设,网站建设找工作,公司网站建设制作商【1】在 DML 或 DDL 语句中#xff0c;不要添加 数据库表前缀#xff1a; 因为开发环境的数据库表名 和 生产环境的数据库表名 有可能不一样#xff1b; 这个时候就有可能报 SQL 异常#xff1b;造成生产事故#xff1b;不推荐#xff1a; select * from db_name.tbl_nam…
【1】在 DML 或 DDL 语句中不要添加 数据库表前缀 因为开发环境的数据库表名 和 生产环境的数据库表名 有可能不一样 这个时候就有可能报 SQL 异常造成生产事故不推荐 select * from db_name.tbl_name where ....推荐 select * from tbl_name 当然了也有可能开发环境的数据库表名 与 ST测试环境 或 UAT测试环境的 数据库表名 不一致但这种错误都是可以在 测试阶段测试出来的。但是一旦项目上了生产环境你就不能改了。【2】对于开启数据库事务的操作 特别要注意事务回滚。 设想这样一个场景 有个班级表 class_tbl 学生表 stu_tbl 班级表有字段 学生数量 stu_num 当执行删除学生操作时要级联更新班级的学生数量 stu_num其中通过学生来查询需要更新的班级。 方法1先执行删除学生操作 然后通过学生多查询班级一并更新班级的 学生数量 这个时候更新操作不会成功因为更新时 需要通过学生来查询需要更新哪个班级但是学生记录又被您先删除了所以更新失败。。这个时候更新失败事务回滚被删除的学生又恢复了没有删除。。 所以这个时候就有一个奇怪的现象 数据库当中明明有 这个学生记录事务回滚后该学生从删除状态恢复到在库状态那为什么无法通过该学生 去级联更新班级的学生数量呢 那是因为你更新操作前先在同一个事务中删除了这个学生所以这个学生是不存在的无法执行级联更新。。然后事务回滚学生在数据库中又没有被删除。。。。然后你就陷入了 泥潭久久无法自拔啊。。。 方法2先通过学生多查询班级一并更新班级的 学生数量再 执行删除学生操作推荐 这种方法的更新班级的学生数量 和 删除 学生记录 的方法是比较好的不会出现方法1那种 奇怪的情况【总结】有减必有加所以当你 新增学生的时候同样的道理 就要先执行更新学生数量操作然后再执行新增学生操作因为上述两个操作都在同一个事务中一旦发生异常事务回滚数据库保持操作前后的数据一致性 【3】关于数据分表权限拆分
1 以四川省内的地级市 和 县级市为荔枝 首先数据库表通过 地级市来分表每个地级市一张表如成都市的数据库表后缀suffix都是028达州市的数据库表后缀是 0818 每个表有字段 行政市id city_id 字段 用于存储市编号如 tbl_*_028 的 city_id028 2设想这样一种场景因为成都天府国际机场修在简阳市所以作为县级市的简阳市其所有数据都挂在了 成都028的数据库表上但通过 city_id1214假设简阳的区号是1214来标识它是简阳的数据 3数据权限拆分需求 地级市的用户可以查看 地级市 和 旗下所有县级市的数据而县级市只能查看自己的县级市的数据不能查看其它县级市的数据 只需要通过比较 数据库表后缀suffix 与 city_id 是否相等来判断 若两者相等则表示地级市 若两者不相等则表示县级市
【注意】上述数据权限拆分策略非常简单只需要使用 mybatis 的 if 标签来判断就可以了 【4】