网站建设资讯

NEWS

网站建设资讯

mysql怎么扩展动态 mysql扩展怎么开启

不改表结构如何动态扩展字段

增加 json 格式的扩展字段。

站在用户的角度思考问题,与客户深入沟通,找到旬阳网站设计与旬阳网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、网站建设、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广、域名注册、虚拟空间、企业邮箱。业务覆盖旬阳地区。

下面配合一些代码来描述这个解决方案,读者便于去理解。

mysql 数据库脚本:

DROP TABLE IF EXISTS `cs_dustbin`;

CREATE TABLE IF NOT EXISTS `cs_dustbin` (

`id` VARCHAR(45) NOT NULL COMMENT '主键自增id',

`rfid_no` VARCHAR(20) NOT NULL COMMENT 'rfid 卡号',

`state` INT(1) NOT NULL COMMENT '垃圾桶状态:0:已注销;1:未使用;2:待使用;3:已使用(绑定收集点);',

`user_id` INT NOT NULL COMMENT '登记人,负责录入垃圾桶的人',

`type` INT(1) NOT NULL DEFAULT 1 COMMENT '垃圾桶类型:1:餐厨垃圾桶',

`street_code` INT(11) DEFAULT NULL COMMENT '所在镇街 code,根据状态,这里的含义可能是领用镇街、退还镇街。',

`create_time` DATETIME NOT NULL DEFAULT now() COMMENT '创建时间',

`update_time` DATETIME NOT NULL DEFAULT now() COMMENT '更新时间',

`ext` VARCHAR(1000) NOT NULL DEFAULT '{}' COMMENT '扩展字段',

...

PRIMARY KEY (`id`))

ENGINE = InnoDB

COMMENT = '垃圾桶表';

复制代码Java 代码:

import com.alibaba.fastjson.JSON;

import lombok.Data;

import javax.validation.constraints.NotNull;

import java.util.Date;

import java.util.List;

/**

* 垃圾桶实体

* Created by Blink on 6/28/2018 AD.

*

* @author Blink

*/

@Data

public class Dustbin {

private String id;

/**

* rfid 卡号

*/

@NotNull

private String rfidNo;

/**

* 垃圾桶状态:0:已注销;1:未使用;2:待使用;3:已使用(绑定收集点);

* 对应 Dustbin.StateEnum 类

*/

@NotNull

private Integer state;

/**

* 录入垃圾桶的人员id

*/

@NotNull

private Long userId;

/**

* 垃圾桶类型:1:餐厨垃圾桶

* DefaultValue: 1

*/

@NotNull

private Integer type;

/**

* 所在镇街 code

* 根据状态,这里的含义可能是领用镇街、退还镇街

*/

private Integer streetCode;

/**

* 创建时间

* defaultValue : now()

*/

@NotNull

private Date createTime;

/**

* 更新时间

*/

@NotNull

private Date updateTime;

/**

* 扩展字段,详细数据查看 DustbinExt.java

* DefaultValue: {}

*/

private String ext;

...

public DustbinExt getExtObject() {

return JSON.parseObject(this.getExt(), DustbinExt.class);

}

public void setExtObject(DustbinExt ext) {

this.ext = JSON.toJSONString(ext);

}

/**

* 垃圾桶扩展属性

* Created by Blink on 6/28/2018 AD.

*

* @author Blink

*/

@Data

public static class DustbinExt {

/**

* 所在镇街

* 根据状态,这里的含义可能是领用镇街、退还镇街、绑定的镇街

*/

private String street;

/**

* 客户(收集点)id,绑定收集点的时候需要填入

* 根据目前的需求(2018-06-29),当收集点解绑的时候

* 需要保存垃圾桶最新绑定收集点名称,所以在解绑垃圾桶的时候不会把这个信息删掉

* 只有当绑定收集点的时候才把他覆盖

*/

private Long customerId;

/**

* 客户(收集点)名称,绑定收集点的时候需要填入

* 根据目前的需求(2018-06-29),当收集点解绑的时候

* 需要保存垃圾桶最新绑定收集点名称,所以在解绑垃圾桶的时候不会把这个信息删掉

* 只有当绑定收集点的时候才把他覆盖

*/

private String customer;

/**

* 损坏部位

* 1:桶盖;2:桶口;3:桶身;4:桶轴;5:桶底;6:桶轮;

* 对应 DustbinDamagePartEnum 类

*/

private ListInteger parts;

}

...

}

复制代码mysql 脚本可以看到扩展字段的信息:

ext VARCHAR(1000) NOT NULL DEFAULT '{}' COMMENT '扩展字段'

复制代码可以看到这么一段 Java 代码:

...

/**

* 扩展字段,详细字段查看 DustbinExt 类

* DefaultValue: {}

*/

private String ext;

public DustbinExt getExtObject() {

return JSON.parseObject(this.getExt(), DustbinExt.class);

}

public void setExtObject(DustbinExt ext) {

this.ext = JSON.toJSONString(ext);

}

...

复制代码可以看到 ext 字段就是用来存储 json 格式的数据,它可以动态地增加任何字段,甚至是对象,不需要通过 DDL(Data Definition Language) 去创建字段,非常适合用来解决上面提到的问题。

Java 代码在这里起到辅助性作用,通过定义一个内部类来管理扩展字段的属性,方便我们了解和管理扩展字段,提高代码的可读性和可维护性,java 这种方式也是笔者总结出来的较为优雅的做法(个人观点)。

局限性

有经验的读者可能会提出,ext 字段在 Mysql 5.7.8 以下版本无法对扩展字段中的某一个或一部分字段建立索引,因为 Mysql 5.7.8 版本以下不支持(Mysql 5.7.8 支持为 Json Data Type 建立索引)。

没错,这是这个解决方案的一个局限性,在 Mysql 5.7.8 以下版本,我的建议是, ext 扩展字段不要存储热点数据,只存储非热点数据,这样就可以避免查询操作,降低维护 ext 字段带来的成本和风险,那如何识别新增字段是不是热点数据呢?这个需要结合实际业务需求来判断,也可以询问对业务和技术更有经验的同事,便于读者更快得出结论。

终极版解决方案

在一些极端的情况下,变化可能来得太快,而我们要的是减少变化带来的成本和风险,所以在表设计之初可以根据自身经验,或者找更有经验的人寻求帮助,预估一下需要预留多少个备用字段,再配合扩展字段,基本上可以把改变(添加字段)表结构的次数降至一个非常少的次数。

总结

在特殊情况下,通过扩展字段 + 预留字段基本上可以做到动态扩展字段,又不会影响为热点数据建立索引的情况,这样我们得到了一个非常灵活的表结构,便于我们应对未来的变化,但是请注意,要维护好我们的实体,包括里面的每一个字段,敬畏每一行代码。

mysql数据库动态扩容方案

加入两台mysql,以前的规则是key%2 == 0 进入库1,key%2 == 1 进入库2。在扩容方案中,可以将mysql配置信息修改为:库1的主从作为两台机器,库2同理,这样key%4 == 0 和==2进入库1,key%4 == 1或3进入库2。然后再做数据的清除工作。

Mysql中怎么使设置了自动增加的id,实现动态更新?

没法实现。或者很难实现。如果你像这样,还是别用自动增长了吧。

mysql追加动态数据脚本

create trigger xxx

after insert into pharos

for each row

update a set 最新= new.最新;

update b set 实价= new.实价;

update c set 卖价= new.卖价;

另外10个表的没贴下结构 。

不知道是不是你要的 样子 ,sql语句要是错的话,你就自己改吧

asp如何向mysql插入动态数据

点成为很多网站目前首选数据库,但一般都是用PHP+MYSQL相结合来开发各种动态页面,其实ASP也可以使用MYSQL数据库开发动态页面,小弟我也是刚刚学会,不敢独享,所以特写了这篇文章供大伙参考。

我的环境是Windows98+PWS4.0+mysql-3.23.32-win+PHP4

必要的软件:PWS4.0(呵呵,废话)

mysql-3.23.32-win(这个是最新版的)

myodbc-2.50.36-dll(这个是最重要的,MYSQL ODBC的驱动程序,可以到下载)

第一步:安装MYSQL ODBD的驱动程序,将下载的myodbd-2.50.46-dll文件复制到windows\system目录下(windows2000

是winnt/system32)然后建立一新文件,扩展名为reg(就是注册表文件),将以下内容复制到该文件中。

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\myodbc driver]

"UsageCount"=dword:00000002

"Driver"="C:\\WINDOWS\\System\\myodbc.dll"

"Setup"="C:\\WINDOWS\\System\\myodbc.dll"

"SQLLevel"="1"

"FileUsage"="0"

"DriverODBCVer"="02.50"

"ConnectFunctions"="YYY"

"APILevel"="1"

"CpTimeout"="120"

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]

"myodbc driver"="installed"

保存后双击该文件,将上面代码注册到WINDOWS注册表中。

如果安装在windows2000中,则Driver和Setup主键的值要做相应改变,这里我想就不用多说了。如果成功,在控制面板/ODBD数据源的驱动程序里将看到myodbd driver这一项!

第二步:建立ASP文件链接数据库。

这里有两种方法,一种是在ODBC数据源中建立一个系统DSN。后来我发现不建立也可以在ASP中使用MYSQL,方法在下文将讲道。

打开控制面板/ODBD数据源,选择系统DSN,然后添加一个新的DSN,驱动程序选择myodbd driver,会出现一个对话框供输入mysql 相关信息。

Windows DSN name: 所要建立DSN的名称

Mysql Host (name or ip):Mysql服务器的名称或者是IP地址,通常填localhost

Mysql database name:需要使用数据库的名称,数据库在Mysql管理程序中建立。这里我们使用一个例子。数据库名:hc188

里面有数据表:user 数据表有两个字段分别是:username和password,随便插入几个数据。

user:链接数据库的用户名,我填的是root超级用户

password:链接数据库用户密码,如果没有,可以不填

Port(if not 3306):Mysql在服务器的端口,如果不填默认为3306

SQL command on connect:使用sql命令链接数据库,这项可以不填

填写完毕后选择OK保存。

下面链接数据库的ASP代码!

<%

strConnection = "dsn=hc188;driver=;server=localhost;uid=root;pwd=;database=hc188"

Set adoDataConn = Server.CreateObject("ADODB.Connection")

adoDataConn.Open strConnection

strQuery = "SELECT * FROM user"

Set rs = adoDataConn.Execute(strQuery)

If Not rs.BOF Then

%>

<TABLE>

<TR>

<TD<b>username</b></TD>

<TD><b>password</b></TD>

</TR>

<%

Do While Not rs.EOF

%>

<TR>

<TD><%=rs("username")%></TD>

<TD><%=rs("password")%></TD>

</TR>

<%

rs.MoveNext

Loop

%>

</TABLE>

<%

Else

Response.Write("Sorry, no data found.")

End If

rs.Close

adoDataConn.Close

Set adoDataConn = Nothing

Set rsEmailData = Nothing

%>


网站题目:mysql怎么扩展动态 mysql扩展怎么开启
网页网址:http://njwzjz.com/article/dodpcee.html