精华内容
下载资源
问答
  • 数据库,同表结构,当修改了一个数据库的表结构或添加了触发器、存储过程...的时候,怎么能让其他数据库的同名表也跟着添加或删除对应的触发器、存储过程..(修改表结构也算),感觉会很难的样子,求大神解析
  • 数据库修改表结构SQL

    2010-10-07 11:12:00
    sql server如何修改表结构

    修改表结构包括:
    增加字段、删除字段、增加约束、删除约束、修改缺省值、修改字段数据类型、重命名字段、重命名表。
    所有这些动作都是用 ALTER TABLE 命令执行的。
    1、 增加字段
    ALTER TABLE products ADD description text;
    你也可以同时在该字段上定义约束,使用通常的语法:
    ALTER TABLE products ADD  description text CHECK (description <> '');实际上,所有在 CREATE TABLE 里描述的可以应用于字段之选项都可以在这里使用。不过,我们要注意的是缺省值必须满足给出的约束,否则 ADD 将会失败。 另外,你可以在你正确填充了新字段的数值之后再增加约束(见下文)。
    2、 删除字段
    要删除一个字段,使用下面这样的命令:
    ALTER TABLE products DROP COLUMN description;不管字段里有啥数据,都会消失。和这个字段相关的约束也会被删除。 不过,如果这个字段被另外一个表的外键所引用,PostgreSQL 则不会隐含地删除该约束。你可以通过使用 CASCADE 来授权删除任何依赖该字段的东西:
    ALTER TABLE products DROP COLUMN description CASCADE;
     3、增加约束
    要增加一个约束,使用表约束语法。比如:
    ALTER TABLE products ADD CHECK (name <> '');
    ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);
    ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;
    ALTER TABLE Teacher add constraint df_sex default('男') for sex
    要增加一个不能写成表约束的非空约束,使用下面语法:
    ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;
    这个约束将立即进行检查,所以表在添加约束之前必须符合约束条件。
    4、 删除约束
    要删除一个约束,你需要知道它的名字。如果你给了它一个名字, 那么事情就好办了。否则系统会分配一个生成的名字,这样你就需要 把它找出来了。psql 的命令 /d tablename 在这儿可以帮忙; 其它接口可能也提供了检查表的细节的方法。然后就是这条命令:
    ALTER TABLE products DROP CONSTRAINT some_name;(如果你在处理一个生成的约束名,比如 $2,别忘了你需要给它 添加双引号,让它成为一个有效的标识符。)
    和删除字段一样,如果你想删除有着被依赖关系地约束,你需要用 CASCADE。 一个例子是某个外键约束依赖被引用字段上的唯一约束或者主键约束。
    除了非空约束外,所有约束类型都这么用。要删除非空类型,用
    ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;(要记得非空约束没有名字。)
    5、改变一个字段的缺省值
    要给一个字段设置缺省值,使用一个象下面这样的命令:
    ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;请注意这么做不会影响任何表中现有的数据行, 它只是为将来 INSERT 命令改变缺省值。
    要删除缺省值,用
    ALTER TABLE products ALTER COLUMN price DROP DEFAULT;这样实际上相当于把缺省设置为空。 结果是,如果我们删除一个还没有定义的缺省值不算错误,因为缺省隐含就是空值。
    6、 修改一个字段的数据类型
    ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);只有在字段里现有的每个项都可以用一个隐含的类型转换转换城新的类型时才可能成功。如果需要更复杂的转换,你可以增加一个 USING 子句,它声明如何从旧值里计算新值。
    PostgreSQL 将试图把字段的缺省值(如果存在)转换成新的类型, 还有涉及该字段的任何约束。但是这些转换可能失败,或者可能生成奇怪的结果。 在修改某字段类型之前,你最好删除那些约束,然后再把自己手工修改过的添加上去。
    7、给字段改名字
    ALTER TABLE products RENAME COLUMN product_no TO product_number;
    8、. 给表改名字
    ALTER TABLE products RENAME TO items;

    展开全文
  • oracle如何修改数据库表结构

    千次阅读 2019-06-20 16:02:15
    1、增加中的字段 2、增加多行字段 3、修改数据的数据类型 4、修改表名 5、设置主键 6、删除主键 7、增添唯一约束 8、启动or禁用约束 9、删除多行字段 ...

    1、增加表中的字段
    增加字段
    2、增加多行字段
    在这里插入图片描述
    3、修改数据的数据类型
    在这里插入图片描述
    4、修改表名
    在这里插入图片描述
    5、设置主键
    在这里插入图片描述
    6、删除主键
    在这里插入图片描述
    7、增添唯一约束
    在这里插入图片描述
    8、启动or禁用约束
    在这里插入图片描述
    9、删除多行字段
    在这里插入图片描述

    展开全文
  • 起因 ​ 某天发布版本的时候...​ 在网上查找了一些资料,大概意思就是说当要修改表结构时,pg会申请一个排他锁“ACCESS EXCLUSIVE”,把整个表锁起来,而此时如果这张表还有一些其他的操作正在进行,比如查询等...

    起因

    ​ 某天发布版本的时候需要修改表的某些字段,数据库用的是postgresql,执行alter table命令长时间没有返回执行成功,好像卡住了一样,也不报错,良久,还不成功,于是结束执行这个命令。

    问题分析

    ​ 在网上查找了一些资料,大概意思就是说当要修改表结构时,pg会申请一个排他锁“ACCESS EXCLUSIVE”,把整个表锁起来,而此时如果这张表还有一些其他的操作正在进行,比如查询等,则pg会等待这些操作完成之后,才能进行修改表结构的操作,而一旦其他操作一直没有完成的话,我们这个修改表结构的操作也就完成不了,于是就出现了上面的现象。

    解决办法

    ​ 查看数据库的每一个连接的状态,执行的是什么sql,执行的时间等。

    SELECT * FROM pg_stat_activity WHERE datname='数据库名字';
    

    ​ 执行上面的sql,发现有一个查询执行了一个月都还没结束,按道理来说再慢的查询应该也返回结果了吧,顿时心中千万只cnm飘过。。。

    ​ 话不多说,找到那个连接的pid字段,直接用下面的sql把这个连接杀死。

    select pg_terminate_backend(pid);
    

    ​ 杀死之后再重新执行alter table,几秒钟之后,黑窗口返回执行成功,大喜。

    补充

    ​ postgresql八种表锁。

    表级锁模式 解释
    ACCESS SHARE 只与“ACCESS EXCLUSIVE” 锁模式冲突;
    查询命令(Select command)将会在它查询的表上获取”Access Shared” 锁,一般地,任何一个对表上的只读查询操作都将获取这种类型的锁。
    ROW SHARE 与”Exclusive’和”Access Exclusive”锁模式冲突;
    ”Select for update”和”Select for share”命令将获得这种类型锁,并且所有被引用但没有 FOR UPDATE 的表上会加上”Access shared locks”锁。
    ROW EXCLUSIVE 与 “Share,Shared roexclusive,Exclusive,Access exclusive”模式冲突;
    “Update,Delete,Insert”命令会在目标表上获得这种类型的锁,并且在其它被引用的表上加上”Access shared”锁,一般地,更改表数据的命令都将在这张表上获得”Row exclusive”锁。
    SHARE UPDATE EXCLUSIVE ”Share update exclusive,Share,Share row ,exclusive,exclusive,Access exclusive”模式冲突,这种模式保护一张表不被并发的模式更改和VACUUM;
    “Vacuum(without full), Analyze ”和 “Create index concurrently”命令会获得这种类型锁。
    SHARE 与“Row exclusive,Shared update exclusive,Share row exclusive ,Exclusive,Access exclusive”锁模式冲突,这种模式保护一张表数据不被并发的更改;
    “Create index”命令会获得这种锁模式。
    SHARE ROW EXCLUSIVE 与“Row exclusive,Share update exclusive,Shared,Shared row exclusive,Exclusive,Access Exclusive”锁模式冲突;
    任何Postgresql 命令不会自动获得这种锁。
    EXCLUSIVE 与” ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, ACCESS EXCLUSIVE”模式冲突,这种索模式仅能与Access Share 模式并发,换句话说,只有读操作可以和持有”EXCLUSIVE”锁的事务并行;
    任何Postgresql 命令不会自动获得这种类型的锁;
    ACCESS EXCLUSIVE 与所有模式锁冲突(ACCESS SHARE, ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, and ACCESS EXCLUSIVE),这种模式保证了当前只有一个事务访问这张表;“ALTER TABLE, DROP TABLE, TRUNCATE, REINDEX, CLUSTER, VACUUM FULL” 命令会获得这种类型锁,在Lock table 命令中,如果没有申明其它模式,它也是缺省模式。
    展开全文
  • 我想学习创建数据库表结构,但是不知道如何下手,求大神解答 刚才的问题有歧义,我修改了下. 然后声明下: 我会用数据库建模工具 我就是不太明白如何创建一个好的数据库结构,一个不容易被修改的结构,一个高效的...
  • 主要介绍了如何根据sql脚本修改数据库表结构,需要的朋友可以参考下
  • 如何在线修改表结构

    2020-06-03 18:01:06
    在线的修改表结构一定要慎重 随意的添加和删除字段,都会造成严重的事故。并且在修改表之前,必须要对数据表做备份,如果每天都做增量备份的话,备份一次数据也花不了太长的时间。 常规的备份是先对业务停机,然后再...

    在线的修改表结构一定要慎重

    随意的添加和删除字段,都会造成严重的事故。并且在修改表之前,必须要对数据表做备份,如果每天都做增量备份的话,备份一次数据也花不了太长的时间。
    常规的备份是先对业务停机,然后再维护数据库和系统代码,这种彻底停掉业务的方式是安全的, 稳妥的,通常会在后半夜去做,比如说淘宝在凌晨2点去做维护系统,12306每晚也会做对系统的维护,到第二天早上才能购票。

    要是不影响正常业务的表结构变更还是可以在线去做的,比如说数据太多,int类型的主键不太够用了需要换成bigint类型的主键,再或者原来某个字段是有唯一性约束的,现在我想去掉唯一性的约束,这种修改不会影响到线上正在执行的业务,所以修改起来问题不是特别大,但是在实际操作上,必须要认真的对待,否则也会对系统造成非常不好的影响。

    ALTER TABLE修改表结构的弊病

    在系统没有上线时候,alter table语句是可以的,包括我们在navicat图形界面上去做表结构的修改,最终也会用alter table语句的,但是这个ddl数据还是挺多的

    • 由于修改表结构是表级锁,因此在修改表结构时,影响写入操作
      如果要给1000万数据的表做修改,这个时间有点长,并且期间是不能对这个表做任何修改和读取的,对线上的业务影响非常大,数据越多影响越长
    • 如果表结构修改失败,必须还原表结构,所以耗时更长。
      举个例子给表某个字段设置not null,修改到中途发现表有的数据这个字段是null值,这时候还要还原回来,这个期间也是锁表的
    • 大数据表记录多,修改表结构锁表时间很久
      可以想象下给淘宝表添加一个字段得多慢

    使用PerconaTookit工具

    是Percona公司维护的这个MySQL工具包,这家公司太优秀了,比如对MySQL做的深入优化再次发行后叫Percona Server数据库,这个数据库的性能是MySQL中性能最好的,甚至说当初阿里巴巴开发出自家的电商数据库OceanBase也是借鉴了PerconaServer很多的技术。不管怎么说,Percona的产品几乎都是免费试用的,这一点非常好。

    话说回来,这个PerconaToolkit里包含了一个pt-online-schema-change的工具,可以在线完成修改表结构

    在线修改表结构的原理

    pt-online-schema-change工具怎么能够实现不锁表实现在线修改表结构的呢?

    在这里插入图片描述
    我现在想修改订单表的结构,这个Percona去重新拷贝订单表的结构,创建一个新的数据表,然后在新的数据表里做结构上的修改, 在这之后Percona会在原来的订单表上创建触发器,只要原来的数据表有添加、修改、删除,就会同步到新的订单表,Percona程序也没有闲着,它还会把原来订单表的数据拷贝到新的订单表里,这样双管齐下之后,数据都同步过来之后,原来订单表也没有数据之后,Percona程序就会删除原来的订单表,然后把新的订单表的名字改成原来订单表的名字,这样就完成了在线修改表结构,并且全程都没有锁表呀

    安装PerconaTookit依赖包

    因为PerconaToolKit的工具包和MySQL8.0有冲突,所以不要安装在同虚拟机实例上,建议在一个没有安装过任何实例的虚拟机实例上安装PerconaTooKit

    1. 安装三方依赖包
    yum install -y perl-DBI
    yum install -y perl-DBD-mysql
    yum install -y perl-IO-Socket-SSL
    yum install -y perl-Digest-MDS
    yum install -y perl-TermReadKey
    
    1. 接下来安装PerconaTookit工具

    将两个文件的rpm包上传到虚拟机实例,然后执行rpm -ivh *.rpm ,就安装完成了

    pt-online-schema-change使用参数

    pt-online-schema-change OPTIONS DSN
    

    上面命令中,OPTIONS是可选参数 ,DSN是逻辑库逻辑表
    在这里插入图片描述

    举个栗子

    把客户收获地址中的name字段改为VARCHAR(20)
    这个操作不会对业务系统产生影响,所以是允许在线修改的,我们不想锁表就使用该工具,怎么做?

    pt-online-schema-change --host=192.168.99.202 --port=3306 --user=root --password=abc123456 --alter "Modify name VARCHAR(20) NOT NULL COMMENT '收货人'" D=net,t=t_customer_address --print --execute
    

    太长了,真个缩略图
    在这里插入图片描述

    接下来检查数据库的认证方式,如果是Mysql8.0的方式,需要在navicat上执行下面两行命令,把数据库的认证方式从mysql8.0改成老版本的认证方式,这样PerconaTookit就可以连接上了(不支持Mysql8.0的认证方式)

    ALTER USER 'root'@'%' INDENIFIED BY 'password' PASSWORD EXPIRE NEVER;
    ALTER USER 'root'@'%' INDENIFIED WITH mysql_native_password by 'abc123456';	
    

    下图是一个执行成功的截图
    在这里插入图片描述

    展开全文
  • 数据库表里有数据如何修改字段类型 1、备份表数据 create table ST_DATA_IMPORT_BAK AS SELECT * FROM ST_DATA_IMPORT; 2、删除表数据 delete from ST_DATA_IMPORT; 3、修改目标表结构 ALTER TABLE ST_DATA_IMPORT...
  • 本文假定你已经安装好了达梦数据库DM8。 案例要求 ...EMPLOYEES表用户存放所有员工的信息,表结构如下: DEPARTMENTS表用于存放所有的部门信息,表结构如下: PERSON表存放该公司所有雇员、供应.
  • 用@desc tablename 可以展示出带单元格的,怎么修改展示的表结构像树结构的那样
  • 1、修改表结构 : 对已经创建的表的结构做修改:alter table 库.表 执行动作; 1-1、添加新字段 add   1-2、删除已有字段 drop  1-3、修改已有字段类型 modify 1-4、修改字段名 change 1-5、修改表名...
  • 在开发时,经常遇到开始在设计数据库时没有评估好mysql的数据结构,比如需要临时新增,修改等对mysql做一些DDL操作,如何数据量百万级别以下,直接操作mysql命令来修改表结构,问题不大,但当数据库已经上百万,千万...
  • <p>The problem that I am facing is more of a code design rather than specifically go related. I am building a simple CRUD application and everything seems to go nice and easy except the updating ...
  • 数据量大、并发量高场景,如何在流量低峰期,平滑实施表结构变更?任何脱离业务的架构设计都是耍流氓。 如果是减column,升级程序不使用即可; 如果是修改column,程序兼容性容易出问题; 数据量大、并发量高...
  • 一、先在数据库修改表结构属性,再删除edmx文件中对应的实体类模型,然后再是“从数据库更新模型”,新增删除的表的模型。 二、还有一种方式是删除项目的所有EF模型,全部重新生成,干干净净,一了百了。 ...
  • 当用户修改表结构时,sap会自动创建临时表,临时表的名称为:'QCM'+表名。这个临时表用于先将需要改变结构的表数据保存下来,当新表结构完成后,系统会将临时表的数据拷贝回数据表。 临时表在sap3.0版本前始终保存在...
  • 先建空白excel--在数据库中的左侧找到该, 选中需要导出的数据--Ctrl+C复制--打开记事本修改编码格式为Unicode-不自动换行保存--Ctrl+A--Ctrl+C,再打开excel--Ctrl+V粘贴。 转载于:...
  • Mysql在线修改表结构

    2019-08-18 00:00:00
    如果在线修改InnoDB的表结构 在线修改指的是在数据库运行过程中,修改InnoDB表的结构,这样可能会造成锁表的情况发生,就会影响数据的查询插入。...如何安全地在线修改表结构?使用PerconaTookit工具包中的pt-o...
  • python django项目更新数据库表结构

    千次阅读 2018-10-15 10:01:55
    python django项目更新数据库表结构 使用django框架自带ORM数据库映射,有些时候数据库表想做更新,如何修改呢。 第一步: 进入数据库删除你所创建的数据库。 第二部: 进入django你所创建的app,再进入文件夹...
  • -------如何保证数据库表中数据的完整性和一致性呢?约束 常见的约束: 主键(primary key),外键(foreign key),唯一(unique),非空(not null),默认(default),用户自定义(check) 2. 约束分类 -----...
  • 如何实现已经部署启动的应用,通过前端的点击来增加或删除某个数据表的字段,有没有... javaBean 如何随着表结构一起修改? !!!!前提是服务器已经启动,部署成功!!!!! 急切求大神们解答!!!!!!!!
  • 有2个oracle数据库服务器 是物理隔离的 不能互相访问。2个数据库表结构是一模一样的,2边的用户都能对某些表做插入、删除或修改操作。如何实现2个数据库的双向同步,使同步后的2边数据库中表的数据都是最新的?
  • 大家是否有这样的体验: 1、项目在本地多人开发,多次进行数据库修改... 3、如何将备用的数据库表结构自动修正为主库的结构,如何自动同步默认的基础表数据 所以设计一个自动检测数据库差异性并自动修复的工具显得
  • 引言  一般在操作数据库的过程中对表的修改操作常常涉及, ... 因此, 修改表结构, 看似简单实则处处细节 修改表结构  修改表结构大致有如下基本语法 1 -- 1. 修改表名 2 ALTER TABLE 表名 3 RENAME ...
  • sql语句修改表结构

    千次阅读 2013-08-07 17:33:00
    这次的教材里面介绍了如何用sql语句创建一个数据库和相应的表结构,也说明了表结构的细节设计如约束等,但是没有说明如果创建了一个表结构修改这个结构,是重新创建还是可以直接修改,学员经常会提出这些问题,...
  • 项目开发时,一般会有两个(或以上)的数据库,一个开发库和一个正式库,在开发库修改表结构如何才能快速同步到正式库中呢?如果手动一个个字段或属性去修改,实在太麻烦,而且容易遗漏,这更不是一个搞IT的人该用的...
  • 如何保存数据库级别修改的记录

    千次阅读 2011-01-17 21:48:00
    前几天在论坛上发了一个帖子"SQL Server 2008如何查看表结构修改记录",很感谢马上有人热心回复并给出建议,现在我把问题的原因和到最后的解决办法与大家分享,希望对大家有帮助.问题:上午一上班就有用户打电话说系统出...
  • 但是数据库表结构文档又是如此重要,如何是好?今天用springboot写了一个工具,自动来生成数据库结构文档,解放程序员,项目已经上传到码云和github上,有兴趣的可以参考一下,当然更欢迎有人来把它更多完善一下,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,245
精华内容 498
关键字:

数据库如何修改表结构