如何修改Access表结构

时间:2025年07月12日

/

来源:潴潴

/

编辑:本站小编

收藏本文

下载本文

今天小编在这给大家整理了如何修改Access表结构,本文共4篇,我们一起来阅读吧!本文原稿由网友“潴潴”提供。

篇1:如何修改Access表结构

如果user表有外键,而且你要修改的字段就是外键的话,你就不能再做修改,

下面给出修改为其它类型的SQL(表为tb,字段为aa):

ALTER TABLE tb ALTER COLUMN aa Byte 数字[字节]。

ALTER TABLE tb ALTER COLUMN aa Long 数字[长整型]。

ALTER TABLE tb ALTER COLUMN aa Short 数字[整型]。

ALTER TABLE tb ALTER COLUMN aa Single 数字[单精度]。

ALTER TABLE tb ALTER COLUMN aa Double 数字[双精度],

ALTER TABLE tb ALTER COLUMN aa Currency 货币。

ALTER TABLE tb ALTER COLUMN aa Char 文本。

ALTER TABLE tb ALTER COLUMN aa Text(n) 文本,其中n表示字段大小。

ALTER TABLE tb ALTER COLUMN aa Binary 二进制。

ALTER TABLE tb ALTER COLUMN aa Counter 自动编号。

ALTER TABLE tb ALTER COLUMN aa Memo 备注。

ALTER TABLE tb ALTER COLUMN aa Time 日期/时间。

字符串的话,使用varchar,后面可以带括号来表示长度。

篇2:帮你完全解答如何修改Access表结构问题

在ACCESS里,备注类型用Memo表示,所以改变字段的数据类型为备注的SQL为:

ALTER TABLE user ALTER COLUMN userinfo Memo

如果user表有外键,而且你要修改的字段就是外键的话,你就不能再做修改,

下面给出修改为其它类型的SQL(表为tb,字段为aa):

ALTER TABLE tb ALTER COLUMN aa Byte 数字[字节]。

ALTER TABLE tb ALTER COLUMN aa Long 数字[长整型]。

ALTER TABLE tb ALTER COLUMN aa Short 数字[整型]。

ALTER TABLE tb ALTER COLUMN aa Single 数字[单精度],

ALTER TABLE tb ALTER COLUMN aa Double 数字[双精度]。

ALTER TABLE tb ALTER COLUMN aa Currency 货币。

ALTER TABLE tb ALTER COLUMN aa Char 文本。

ALTER TABLE tb ALTER COLUMN aa Text(n) 文本,其中n表示字段大小。

ALTER TABLE tb ALTER COLUMN aa Binary 二进制。

ALTER TABLE tb ALTER COLUMN aa Counter 自动编号。

ALTER TABLE tb ALTER COLUMN aa Memo 备注。

ALTER TABLE tb ALTER COLUMN aa Time 日期/时间。

字符串的话,使用varchar,后面可以带括号来表示长度。

篇3:MySQL中修改表结构时需要注意的一些地方

这篇文章主要介绍了MySQL中修改表结构时需要注意的一些地方,作者援引Percona的相关的说明来讲述如何避免相关操作导致表无法使用的问题,一些需要的朋友可以参考下

真相是:

直接修改表结构的过程中会锁表(在5.6版本之前)

在线的数据定义语言在5.6版本不总是在线的而且也会锁表

就算使用Percona工具包(在线修改定义文件)也会有若干个步骤会锁表

Percona MySQL 服务器开发团队鼓励用户在计划或者执行数据库迁移的时候先和我们沟通。我们的目标是基于用户给出的各种情况给出最佳的方案。旨在避免锁表当用户对非常大的表执行DDL,以确保应用能像平常一样正常运行,同时也在努力改善响应时间或增加系统功能。最差的情况是确保那些经不起当机的系统在黄金交易时间正常运行。

我们使用的大多数安装包仍然小于Mysql5.6,这需要我们不停尝试新的安装环境来把数据库迁移造成的损失降到最低。这可能需要一个能“在线修改规范定义文件”的工具来升级或者修改规范文件。Mysql5.6解决这一问题的做法是通过减少重建表和锁表的场景,但这个方法不能覆盖所有的可能的操作,例如当修改一列的数据类型时必然需要全表重构。Przemys?aw和 Malkowski在去年尽可能详尽的讨论了Mysql5.6运行中修改定义。

随着 MySQL 5.7的新功能, 我们寻求不会锁表的DDL操作 例如; 表优化 和 索引重命名. (More info)

对于Mysql5.6的用户,最好的建议是回顾一下数矩阵来熟悉在MYSQL之外执行定义的更改,好消息是我们很擅长解决这一问题。

说实话,锁表操作会经常被忽视,在操作30M大小的表时我们更倾向于直接修改,但是30G,300G的表就要考虑一下了。当使用率不高或者对锁定时间要求不是很高的的系统来说直接操作也许更好。可是,我们常常会遇到一个需要立即执行的SQL,或者因为性能问题需要紧急增加一个索引来减少加载时间。

是否需要在系统在线期修改表定义

上面提到,在线修改表定义是工作流中的一个模块。通常是不错的解决方案,但也会遇到不能使用的场合,例如:当某个表使用了触发器。了解pt-osc在我们项目中的工作过程很重要,让我们来看一下源代码:

代码如下:

[moore@localhost]$ egrep ‘Step‘ pt-online-schema-change

# 步骤 1: 创建一个新表

# 步骤 2: 修改清空表. 这应该比较快,

# Step 3: 创建触发器来捕获原始表的改变 <--(锁定元数据)

# Step 4: 复制数据.

# Step 5: 重命名表: <--(锁定元数据

# Step 6: 更新外键 如果是子表.

# Step 7: 删除旧表.

我把上面第三步到第五步高亮出来,这是锁表可能引起系统停机的时间,

但步骤六设计外键更新是一个循环的操作,是避免在更新关系的时候隐含地重建表。有很多方法可以确保表的完整性约束,在pt-osc的说明文档中详细说明了,在开始之前预览你的表结构包括约束,并知道怎样把修改表定义所造成的影响降到最低。

最近,我们通知了一个拥有高并发高事务量系统的用户运行pt-osc在大型数据表上。这件事对于他们来说很平常,几小时后我们的客服被告知该客户遇到了最大连接数超过的问题。这个问题是如何产生的呢?当pt-osc运行到步骤五的时候会尝试去锁定数据并重命名原表和隐藏表,然而这不会在开启事务的时候立即执行,因此这条线程会被排在重命名后面。这表现在用户应用上就是系统停机。数据库无法开启新的连接并且所有的线程都被阻塞在重命名命令之后。

5.5.3版本的说明,当开启一个事务时会锁定它会用到的所有表的数据(不依赖于存储引擎),并在事务提交的时候释放锁。这样做确保了在开启事务期间不能修改表的定义。

长远来看我们可以采用一些新的技术来避免这种情况,例如non-default pt-osc的选项,换言之就是不会删除原表把数据换到新表。这种联合脱离了隐藏表和触发器,我们应该鼓励将重命名操作变得原子化。

校订:2.2版本的percona工具新增了一个变量Ctries 和变量Cset-vars 共同被部署,解决了各种pt-osc操作可能会锁表的情况。pt-osc (Cset-vars)默认会设置如下的会话变量当连接到数据库服务器的时候。

代码如下:

wait_timeout=10000

innodb_lock_wait_timeout=1

lock_wait_timeout=60

当使用 Ctries 我们可以颗粒化地鉴别操作,尝试次数、在尝试的间隔等待。这种组合可以确保pt-osc在合适的时机杀掉自己的等待会话进程,确保线程堆栈的空闲,并提供给我们循环操作来获取管理因触发器、重命名、修改外键而造成的锁。

代码如下:

Ctries swap_tables:5:0.5,drop_triggers:5:0.5

说明文档在这里www.percona.com/doc/percona-toolkit/2.2/pt-online-schema-change.html#cmdoption-pt-online-schema-changeCtries

它阐述了即便使用了诸如pt-osc之类的工具,充分了解你想解决的问题是很重要。下面的流程图会帮助你当你了解修改了MYSQL数据库的结构的注意事项。请仔细阅读建议尽管有些图上未标出,例如磁盘空间,IO加载等。

选择合适的DDL操作

确保能清楚了解在修改表结构对你的系统会产生何种影响,并选择合适的方法来使这种影响降到最低。有时这意味着需要将改动延期直到系统到了不常使用的时候或者使用能在操作期间不锁表的工具。当你表中有触发器的时候一般直接修改表结构。

-大多数情况下pt-osc正是我们所需要的

-在很多案例中pt-osc是需要的,但是用法需要稍作调整

-在少数情况下pt-osc不是很合适,我们需要考虑本地阻塞修改,或者采用转移的操作改成在副本集中复制。

篇4:在应用程序中修改VFP数据表结构

早期有不少用FOXPRO编写的数据库应用程序喜欢用6位字符型字段来记录日期,随着2000年的到来,这个字段的宽度显然已经不适用了,需要修改。 ---- 修改FOXPRO数据表结构,常用MODIFY STRUCTURE命令。这种方法虽然方便,但必须在人机对话中实现。若您的程序已交付许多用户使用,要求用户采用MODIFY STRUCTURE命令修改数据表结构势必会带来许多麻烦。是否可通过执行预先编制好的程序来完成扩大字段宽度工作?笔者最近做了一个尝试,其程序思路是:

---- 1、利用AFIELDS()函数获取要修改的数据表结构信息,并将信息存放在STR_FIL数组内。AFIELDS()函数的语法:AFIELDS(ArrayName),ArrayName是放置表结构信息的数组名(可由自己命名,本例中命名为STR_FIL),数组为每一个字段创建一行数据,其每一列里存储的信息如下:

----

列号 字段信息 数据类型 列号

字段信息 数据类型

1 字段名 字符型

2 字段类型 字符型

3 字段宽度 数值型

4 小数点位置 数值型

5 容许的空值 逻辑型

6 字段有效准则 字符型

7 字段有效文本 字符型

8 字段缺省值 字符型

9 表有效准则 字符型

10 表有效文本 字符型

---- 2、根据要求修改STR_FIL数组内容(本例,修改字段宽度)。 ---- 3、利用CREATE CURSOR 命令,按STR_FIL数组内容创建一临时表结构。

---- 4、将原表数据添加到临时表中。

---- 5、利用COPY TO 命令,将临时表覆盖原表。

---- 下面是修改字段宽度的原代码:

*参数:SOU_FILE(修改的数据表文件名),字符型

*参数:FIE_NAME(要修改的字段名),字符型

*参数:FIE_WID(修改后的字段宽度),数字型

PARA SOU_FILE,FIE_NAME,FIE_WID

PRIV STR_FIL,FIEL_SUM,N, STR_TMP

IF USED(“&SOU_FILE”)

&&打开要修改的数据表

SELE &SOU_FILE

ELSE

SELE 0

USE &SOU_FILE

ENDIF

=AFIELDS(STR_FIL)

&&获取表结构,并存储在STR_FIL数组内

FIEL_SUM=FCOUNT() &&计算表字段数

N=1

DO WHILE N<=FIEL_SUM

&&查找要修改的字段名

IF ALLT(STR_FIL(N,1))=FIE_NAME

&&如果是要修改的字段名

IF STR_FIL(N,3)=FIE_WID

&&判别字段宽度是否相同

RETURN

&&相同返回

ELSE

&&否则修改表结构

wait “正在修改数据结构,

请稍侯...” WIND NOWAIT

STR_FIL(N,3)=FIE_WID

&&确定字段长度

EXIT &&退出循环

IF N= FIEL_SUM &&如果循环结束

wait “无修改的字段,按任意键返回….

” WIND &&提示用户

RETURN

ENDIF

ENDIF

ENDIF

N=N+1

ENDDO

*按STR_FIL数组内容,创建临时表结构

SELE 0

*根据STR_FIL数组规定的字段名字、

类型、宽度创建临时表STR_TMP

CREATE CURSOR STR_TMP

FROM ARRAY STR_FIL

SELE &SOU_FILE

USE &&关闭原数据表

*将原数据表数据添加到临时表STR_TMP中

SELE 0

APPE FROM &SOU_FILE

COPY TO &SOU_FILE &&复制新的数据原表

RETURN

本文来源: Computer World 本文作者: 程建平

如何为Access数据库表添加日期或时间戳

求职信修改

初中作文修改

道路修改实施方案

修改病句及答案

下载如何修改Access表结构(精选4篇)
如何修改Access表结构.doc
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档
点击下载本文文档