300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql设计股票数据库_【笔记】菜鸟制作:设计股票交易数据在MYSQL中的表设计(表结构复

mysql设计股票数据库_【笔记】菜鸟制作:设计股票交易数据在MYSQL中的表设计(表结构复

时间:2023-12-05 11:35:53

相关推荐

mysql设计股票数据库_【笔记】菜鸟制作:设计股票交易数据在MYSQL中的表设计(表结构复

最近在设计五分钟股票交易数据的小程序,发现如果将所有股票的数据都放在一张数据表中,会使得MYSQL的查询效率大大降低。

比如:使用SELECT COUNT(*) FROM STK.这样的一句代码执行了几分钟还没有结果,(实际上总共是五千万条记录左右)

因此考虑将股票数据分库分表存放。(当然能这种方法会导致在查找具体股票信息的时候稍微麻烦一些,但是效率应该会提升不少)

首先分库:构建mystkSH、mystkSZ、mystkHK、mystkOT分别存放上海、深证、香港和其他的交易数据。

其次分表:对于每只股票在指定的数据库中单独建一张表存放。比如在mystkSH数据库中新建SH000001表来存放上证 指数的交易数据。

当然啦,表不可能手动创建的嘛,不然几千只股票是会死人的,所以考虑在每个数据库中存放一张模板表,然后要创建每一只股票表格的时候只需要在里面执行代码即可:

Try

If myConn.State <> ConnectionState.Open Then myConn.Open()

myCommand = New MySqlCommand(" create table " & “股票名称” & " like 基本表;", myConn)

myCommand.ExecuteNonQuery()

Catch ex As Exception

'MsgBox(ex.Message)

End Try

然后再往创建好的表中replace数据即可。

但是,但是。。。。。

由于股票的表已经存在了,所以继续使用create table则会出错,因此在代码中使用了try来处理错误,如果已经存在,就不创建了。

但是这种做法违背了将错误交给程序的原则啊,所以我就考虑使用存储过程来创建表了。

首先判断该表是否已经存在了,如果存在,什么都不干;如果不存在,则创建表。但是,在存储过程中变量不能作为表名,否则创建的表就是以变量名为表名了:

-- --------------------------------------------------------------------------------

-- Routine DDL

-- Note: comments before and after the routine body will not be stored by the server

-- --------------------------------------------------------------------------------

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `CREATE_TABLE`(IN T_NAME VARCHAR(20))

BEGIN

declare p_count int;

set @p_count=(select count(*) from information_schema.tables where table_name=@T_NAME and table_schema='mystk');

if @p_count=0 then

create table T_name like 5m;

create table T_NAME SELECT * FROM 5m WHERE 1=2;

END IF;

END

对上述存储过程:CREATE_TABLE('SH000001')创建的表不是SH000001,而是叫T_NAME。网上已有解决方案,但是我这边不行啊。

有人说可以用下面的方式,但是我还是出错:

-- --------------------------------------------------------------------------------

-- Routine DDL

-- Note: comments before and after the routine body will not be stored by the server

-- --------------------------------------------------------------------------------

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `CREATE_TABLE`(IN T_NAME VARCHAR(20))

BEGIN

declare p_count int;

set @p_count=(select count(*) from information_schema.tables where table_name=@T_NAME and table_schema='mystk');

if @p_count=0 then

set @csql = concat("create table ",@T_NAME , " SELECT * FROM 5m WHERE 1=2;");

prepare create_stmt from @csql;

EXECUTE create_stmt;

END IF;

END

mysql设计股票数据库_【笔记】菜鸟制作:设计股票交易数据在MYSQL中的表设计(表结构复制 表数据复制)...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。