mysql 动态增加列,查找表中有多少列,具体什么列。 通过JSON生成mysql表 支持子JSON
好消息,
程序员专用早餐机。和掌柜说 ideaam,可以节省20元。 点击链接 或復·制这段描述¥k3MbbVKccMU¥后到淘♂寳♀
或者 淘宝扫码 支持下同行哈
----------------------------------------------------------------------------------------------------------------------------
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
using (testEntities entity = new testEntities())
{
var tableName = "test2";
var json = "{\"name\":\"hello\", \"age\":1, \"createtime\":\"2012-04-23T18:25:43.511Z\", object:{\"column1\":\"test\", \"column2\":\"test\"}}";
var jsonEntity = JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(json); var tableList = entity.Database.SqlQuery<MysqlTableSchema>("show tables").ToListAsync();
tableList.Wait(); var isExistsTable = tableList.Result.Where(r => r.tables_in_test.ToLower() == tableName.ToLower()).Count() > 0;
if (!isExistsTable)
{
entity.Database.ExecuteSqlCommand("CREATE TABLE `" + tableName + "` (`id` INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`));");
} CreateColumns(tableName, jsonEntity);
}
} private static void CreateColumns(string tableName, JObject jsonEntity, string columPrefix = "")
{
using (testEntities entity = new testEntities())
{
var columList = entity.Database.SqlQuery<MysqlColumSchema>("DESCRIBE " + tableName).ToListAsync();
columList.Wait();
foreach (var item in jsonEntity.Properties())
{
var columName = string.IsNullOrEmpty(columPrefix) ? item.Name.ToLower() : columPrefix + "_" + item.Name.ToLower();
var isExists = columList.Result.Where(e => e.field.ToLower().Equals(columName)).ToList().Count() > 0;
if (!isExists)
{
var mysqlType = "";
var index = "";
switch (item.Value.Type)
{
case Newtonsoft.Json.Linq.JTokenType.Object:
CreateColumns(tableName, item.Value.ToObject<JObject>(), columPrefix = item.Name.ToLower());
continue;
case Newtonsoft.Json.Linq.JTokenType.Boolean:
mysqlType = "nvarchar(1000) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");";
break;
case Newtonsoft.Json.Linq.JTokenType.Bytes:
break;
case Newtonsoft.Json.Linq.JTokenType.Comment:
mysqlType = "nvarchar(1000) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Date:
mysqlType = "datetime NULL DEFAULT CURRENT_TIMESTAMP";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Float:
mysqlType = "decimal(6,2) NULL DEFAULT '0.00'";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Guid:
mysqlType = "nvarchar(45) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Integer:
mysqlType = "int(11) NULL";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.String:
mysqlType = "nvarchar(1000) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
case Newtonsoft.Json.Linq.JTokenType.Uri:
mysqlType = "nvarchar(1000) ";
index = "ALTER TABLE " + tableName + " add index INDEX_" +columName+ " (" +columName+ ");"; break;
default:
mysqlType = "nvarchar(2000) ";
break;
}
entity.Database.ExecuteSqlCommand("alter table " + tableName + " add column " +columName+ " " + mysqlType + ";" + index);
}
}
}
} public class MysqlTableSchema
{
public string tables_in_test { get; set; }
} public class MysqlColumSchema
{
public string field { get; set; }
public string type { get; set; }
public string key { get; set; }
public string Null { get; set; }
public string Extra { get; set; }
} }
mysql 动态增加列,查找表中有多少列,具体什么列。 通过JSON生成mysql表 支持子JSON的更多相关文章
- SQL Server -- 回忆笔记(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询
SQL Server知识点回忆篇(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询 1. insert 如果sql server设置的排序规则不是简体中文,必须在简体中文字符串前加N, ...
- SQL面试题:有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列
.请教一个面试中遇到的SQL语句的查询问题 表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列. ------------------- ...
- MySQL动态添删改列字段
动态增加列字段: ); 动态删除列字段: alter table TableName drop column field_id; 动态修改列字段: alter table TableName chan ...
- 【实战】如何通过html+css+mysql+php来快速的制作动态网页(以制作一个博客网站为列)
一.开发环境的搭建 (1)apache+php+mysql环境搭建 因为要用apache来做服务器,mysql作为数据库来存储数据,php来写代码以此实现网页与数据库的交互数据,所以需要下载上述软件, ...
- MySQL数据表中有自增长主键时如何插入数据
原文链接:https://blog.csdn.net/RuobaiMEN/article/details/79794199 MySQL数据库表中有自增主键ID,当用SQL插入语句中插入语句带有ID列值 ...
- oracle 如何在表中有数据的情况下,修改表字段的类型或者增加表字段的长度
场景:项目中某张表的字段长度不够用了,现在要增加其长度 分两种情况: 1.表中没有数据的情况,直接一条sql语句就能解决 alter table 表名 modify(字段名 字 ...
- WPF datagrid 动态增加列
DataGrid动态增加列 <Window x:Class="WpfApplication1.MainWindow" xmlns="http://schemas.m ...
- MySQL修改表一次添加多个列(字段)和索引
MySQL修改表一次添加多个列(字段) ALTER TABLE table_name ADD func varchar(50), ADD gene varchar(50), ADD genedetai ...
- mysql批量生成修改表和列注释语句
当我们在一个数据库修改完备注后,需要将其导致另一个服务器上的数据库中,需要生成批量执行语句,方便操作,注意用change 或modified 进行列的属性修改时,没有写全的话会造成其它属性的丢失,如 ...
随机推荐
- python数据结构之冒泡排序
冒泡排序是一种基础排序算法,在python中,我们利用列表的的方式来完成,它对列表中的元素进行重复的遍历,在遍历的同时进行比较,如果两个数没有按照我们规定的顺序进行排列,就按照我们预先设定好的是顺序或 ...
- ORM(一)
1.什么是ORM ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,这样,我们在具体的操作业务对象的时候,就不需要再去 ...
- vue-router那些事儿
vue-router适用于单页面应用. 一.vue-router的引用方法1.用script标签 <script src="https://unpkg.com/vue-router/d ...
- jmeter时间格式化
jmeter时间格式化 #17位时间取到毫秒 ${__time(yyyyMMdd-HHmmssSSS,)} #10位时间戳 ${__time(/1000,)} yyyyMMddHHmmss yyyy年 ...
- 进程篇:wait & waitpid
#include <sys/types.h> /* 提供类型pid_t的定义 */ #include <sys/wait.h> pid_t wait(int *status) ...
- 解决linux环境mysql的sql语句严格区分大小写问题
在Windows环境下,mysql数据库的sql语句是不区分字母大小写的,但是程序移植到linux环境中,就会造成某些大小写不一致的语句执行失败,解决方法如下: 首先打开/etc/mysql/my.c ...
- Leetcode 记录(1~100)
5.回文串 几种方法: 暴力:枚举每一个字串,判断是否为回文串,复杂度O(n^3),暴力月莫不可取 dp:区间dp思想,O(n^2) 中心扩展:找每一个字符,然后往两边扩展,O(n^2) manach ...
- Exception引起的性能问题
先show一下两段代码,两段代码都能比较好的实现业务逻辑,但是在高并发下,如果传入的参数为空,那么两段代码的性能表现完全不一样. private static string Get(string fi ...
- Android Studio 2.3 解决小米手机调试安装apk失败问题
在开发者选项里面,拉到底,把miui优化选项去掉就好了. 参考资料 [问题反馈] Android Studio 2.3 在红米note3手机中 调试安装Apk失败
- Unity 显示FPS(C#语言)
直接上脚本了: using UnityEngine; using System.Collections; public class ShowFPS : MonoBehaviour { //设置帧率 A ...