最近由于项目需要要做一个小工具。
需求:客户用的老库并存储了一些数据,用了一段时间,我们根据客户提出新功能在老库的基础上对新库进行修改。这些修改有很多细节方面的修改,包含存储过程,增加表,修改表字段类型,添加字段。
然后我们自己更新并测试好软件后,需要改动客户那边的老库,老库的数据是要保存的。
解决方案一:很快我就想到用SQL SERVER 08 R2 自带的功能,生成新库脚本。把老库改个名字,跑新库脚本,然后通过数据库自带功能把老库数据导入到新库数据。测试的时候,数据量不大,速度还比较理想。
但是这对客户来说还是很不方便的,且数据量大些还是比较费时的。于是,boss就让我做个小工具吧。
难道我要用程序实现以上操作,oh my god !
于是我想啊想。。。。
解决方案二:我就再细一些,直接操作数据库的表吧,对于数据库中存在的表,我给它重新命名,跑个新脚本建表,然后把老表中数据插进去。
相关SQL语句如下:
修改表名:EXEC sp_rename 'oldName' , 'newName'
插入数据:insert into newTable(column1,column2,.....) select column1,column2,..... from oldTable
更多相关操作:
参考数据库、表、列的重命名
列出参考内容来方便查看
一、更改数据库名
复制代码 代码如下:
sp_renamedb
更改数据库的名称。
语法
sp_renamedb [ @dbname = ] ' old_name ' ,
[ @newname = ] ' new_name '
参数
[ @dbname = ] ' old_name '
是数据库的当前名称。old_name 为 sysname 类型,无默认值。
[ @newname = ] ' new_name '
是数据库的新名称。new_name 必须遵循标识符规则。new_name 为 sysname 类型,无默认值。
返回代码值
0 (成功)或非零数字(失败)
权限
只有 sysadmin 和 dbcreator 固定服务器角色的成员才能执行 sp_renamedb。
示例
下例将数据库 accounting 改名为 financial。
EXEC sp_renamedb ' accounting ' , ' financial '
二、更改表名或列名
复制代码 代码如下:
sp_rename [ @objname = ] ' object_name ' ,
[ @newname = ] ' new_name '
[ , [ @objtype = ] ' object_type ' ]
/////////////////////////////////////////////
A. 重命名表
下例将表 customers 重命名为 custs。
EXEC sp_rename ' customers ' , ' custs '
B. 重命名列
下例将表 customers 中的列 contact title 重命名为 title。
EXEC sp_rename ' customers.[contact title] ' , ' title ' , ' COLUMN '
参考 复制表结构和表数据的SQL语句
列出参考内容来方便查看
1.复制表结构及数据到新表
CREATE TABLE 新表 SELECT * FROM 旧表
2.只复制表结构到新表
CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2
即:让WHERE条件不成立.
方法二:(由tianshibao提供)
CREATE TABLE 新表 LIKE 旧表
3.复制旧表的数据到新表(假设两个表结构一样)
INSERT INTO 新表 SELECT * FROM 旧表
4.复制旧表的数据到新表(假设两个表结构不一样)
INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 旧表
想到这,发现好像还少了点什么,呃,procedure和constraint,好吧,那我也先删除再添加
先查出来
select name from sys.procedures
select constraint_name, table_name from information_schema.table_constraints
再删除
drop procedure [dbo].[procedure_name]
alter table tableName drop CONSTRAINT [PK_ |FK_ |UK_ |DF_ |CK_]
这里再补充一些东西,关于约束前缀,参考SQL约束前缀
方便查看,再列出来
--主键
constraint PK_字段 primary key(字段),
--唯一约束
constraint UK_字段 unique key(字段),
--默认约束
constrint DF_字段 default('默认值') for 字段,
--检查约束
constraint CK_字段 check(约束。如:len(字段)>1),
--主外键关系
constraint FK_主表_从表 foreign(外键字段) references 主表(主表主键字段)
然后再从脚本中读取相应脚本文件并执行(加句废话:要执行多行脚本文件,CommandText里加'\n'就好了)。
解决方案三:思来想去,为什么非要导入数据,直接改表结构就好了呀。于是读取表中字段
select column_name,data_type from information_schema.columns where table_name = 'tableName'
对于旧表中存在的字段
ALTER TABLE [tableName] ALTER COLUMN [columnName] [int] NOT NULL
对于旧表中不存在的字段
ALTER TABLE [tableName] ADD COLUMN [columnName] [int] NOT NULL
这样一来就不用导入数据就可以把旧库结构更新,其中除了运用一些ADO.NET方面的知识,还用到了正则表达式之类的来匹配脚本中相应的SQL命令。当然目前的方案还存在一些问题,这个工具还不够通用,对需要旧表多余的列并没有删除,还有容错性方面考虑得也不够周到。后期还会根据项目需要进一步改进的。
根据sql脚本修改数据库表结构的几种解决方案
根据sql脚本修改数据库表结构的几种解决方案
最近由于项目需要要做一个小工具。
需求:客户用的老库并存储了一些数据,用了一段时间,我们根据客户提出新功能在老库的基础上对新库进行修改。这些修改有很多细节方面的修改,
MySQL 分区表中分区键为什么必须是主键的一部分
目录水平拆分 VS 垂直拆分分区表MySQL 8.0 中分区表的变化为什么分区键必须是主键的一部分?本地分区索引 VS 全局索引总结前言:分区是一种表的设计模式,通俗地讲表分区是将一大
MySQL读取JSON转换的方式
目录存储存在什么问题?如何处理存储mysql5.7+开始支持存储JSON,后续不断优化,应用也越来越广泛你可以自己将数据转换成Json String后插入,也可以选择使用工具,而mybatis-plus就为
MySQL安装常见报错处理方法总结大全
目录前言1.无法启动处理,错误10531.1 结束进程1.2 更改网络服务1.3 删除服务2.Winwods安装初始化报错3.Centos环境rpm初始化MySQL报错4.MySQL8安装后无法登陆总结前言本文总
mysql数据库单表最大存储依据详解
目录引言数据库单表行数最大多大?索引的结构页的结构从页到索引B+树承载的记录数量x怎么算y的计算行总数计算行数超一亿就慢了吗?B树承载的记录数量总结引言故事从好多年前说
mysql sock 文件解析及作用讲解
目录引言连接MySQLmysql.sock文件mysql.sock文件的作用数据库运维:mysql.sock错误修复引言在观察MySQL本地连接的时候,发现对mysql.sock是个啥我不明白,于是我提出了一个问题:my
mysql 索引使用及优化详情
目录前言mysql索引原理mysql索引分类索引创建语法1、创建索引2、查看索引3、删除索引4、为 username和password创建联合索引5、给user表添加一个info的字段,并为这个字段添加
MySQL 去重实例操作详解
目录前言1.创建测试数据2.distinct 使用2.1 单列去重2.2 多列去重2.3 聚合函数+去重3.group by 使用3.1 单列去重3.2 多列去重3.3 聚合函数 + group by4.distinct 和 group
mysql sock文件存储了什么信息
mysql.sock到底存储了什么东西?mysql.sock作为mysql的套接字一般用于本地连接数据库,在速度上优于TCP/IP连接。一般放置在/tmp/mysql.sock目录下,我们先查看下它的内容:[root@ t
Windows下MySQL 8.0.29 安装和删除图文教程
Windows下MySQL的安装和删除,供大家参考,具体内容如下安装Mysql1 下载mysql下载地址1;下载地址22 安装教程2.1配置环境变量变量名:MYSQL_HOME变量值:D:\software\programming\env
MySQL数据库学习之去重与连接查询详解
目录1.去重2.连接查询使用where进行多表连接查询内连接 - 等值连接内连接 - 非等值连接内连接 - 自连接外连接 - 左右外连接三表连接1.去重示例表内容参考此文章有些 MySQL
一文掌握MySQL表的创建和约束
目录一、数据库的建立和销毁二、表的建立和销毁1、表的建立2、表约束概念3、表约束具体使用4、表的销毁一、数据库的建立和销毁建立数据库:create database [if not exists]
Navicat连接mysql报错1251错误的解决方法
本文为大家分享了Navicat连接mysql报错1251错误的解决方法,供大家参考错误提示出现这个原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则
jdbc中自带MySQL 连接池实践示例
引言在上期文章自定义 MySQL 连接池中,我提到了没找到一个特别合适的 MySQL 连接池实现,所以自己写了一个基于通用池化框架commons-pool2的 MySQL 连接池,并且模仿了 Go 语言的
MySQL索引失效场景及解决方案
目录一、前言二、最左前缀匹配原则三、MySQL逻辑架构和优化器四、索引失效场景以及为何会失效五、总结一、前言在对SQL语句进行索引查询时会遇到索引失效的时候,对于该语句的
MySQL的 DDL和DML和DQL的基本语法详解
目录一、DDL(数据定义语言)二、DML(数据操作语言)三、DQL(数据查询语言)四、聚合函数前言 SQL语句,即结构化查询语言(Structured Query Language),是一种特殊目的的
MySQL深入详解delete与Truncate及drop的使用区别
目录一、删除的内容deletetruncatedrop drop二、删除过程三、表和索引所占空间四、应用范围五、删除程度六、处理速度七、语句类型:八、语法区别九、总结deletetruncatedrop
SQL Optimizer 详细解析
目录一、 大数据体系和SQL1、SQL的处理流程1.1 Parser1.2 Analyzer和Logical Plan1.3 Physical Plan 和 Executor1.4 小结二、 常见的查询优化器1、查询优化器分类2、RBO(Rul
CentOS7中安装MySQL的图文讲解
目录1.下载并安装MySQL源2.查看 /etc/yum.repos.d下3.安装MySQL4.启动MySQL服务5.安装完毕后6. 设置MySQL密码安全策略7. 设置远程登录1.下载并安装MySQL源yum -y install w
Windows下mysql 8.0.29 winx64安装配置方法图文教程
Windows上安装mysql-8.0.29-winx64,供大家参考,具体内容如下1.进入官网找到自己所需的安装包:https://dev.mysql.com/ ,路径:DOWNLOAD–>MYSQL Community Downloads–>
MySQL中的连接查询(等值连接)
目录1. 笛卡尔乘积2. 分类(1)按年代分类(2)按功能分类3. 等值连接4. 总结1. 笛卡尔乘积表1有m行数据,表2有n行数据,查询结果有m*n行数据。2. 分类(1)按年代分类sql92标准:仅支持内连
iOS开发runloop运行循环机制学习
目录引言一、Runloop的实现机制二、Runloop 数据结构三、实现机制四、runloop 和 线程五、异步绘制引言RunLoop:又叫运行循环机制,在iOS中的两大机制之一。并不是只有iOS有Run
MySQL表字段数量限制及行大小限制详情
目录字段数量限制 Column Count Limits行大小限制 Row Size Limits8126B限制Row Limits总结字段数量限制 Column Count LimitsMySQL对于每个表的字段数量是严格控制在4096个
MySQL数据库学习之排序与单行处理函数详解
目录1.排序2.单行处理函数内容转小写内容转大写取子串字符串拼接求长度去除前后空白四舍五入生成随机数空转换1.排序示例表内容见此篇文章Mysql支持数据排序操作,例如,现在我
MySQL最大连接数限制的修改步骤
目录前言一、前提条件二、修改步骤1、使用root用户登录和连接数据库2、查看当前数据库的最大连接数3、修改MySQL配置文件4、查看系统limit限制5、修改系统文件限制6、修改my
MySQL多版本并发控制MVCC详解
目录1.什么是MVCC2快照读与当前读2.1 快照读2.2当前读3.复习3.1 再谈隔离级别3.2 隐藏字段、Undo Log版本链4、MVCC实现原理之ReadView4.1什么是ReadView4.2 设计思路4.3 Re
MySQL六种约束的示例详解(全网最全)
目录一、概述二、约束演示三、外键约束1、 什么是外键约束2、 不使用外键有什么影响3、 添加外键的语法4、 删除/更新行为5、 演示删除/更新行为四、主键id到底用自增好还是
MySQL存储Json字符串遇到的问题与解决方法
目录环境依赖问题描述原因分析解决方案方案一 转义符替换方案二 修改sql书写方式方案三 DataFrame.to_sql()补充:不同情况总结环境依赖Python 2.7
MySQL 5.7
MySQL-python 1.
MySQL8.0中的my.ini文件位置说明
目录MySQL8.0的my.ini文件位置my.ini文件所在位置及如何利用记事本编辑其内容如何找到my.ini文件如何以管理员权限编辑 my.ini 文件MySQL8.0的my.ini文件位置MySQL8.0默认安
Mysql索引分类及其使用实例详解
目录Mysql的索引分类单列索引创建单列索引的几种方式:唯一索引创建唯一索引的几种方式:联合索引(复合索引)创建联合索引(复合索引)的方式:Mysql的索引类型INDEX | NORMAL 普通索