精华内容
下载资源
问答
  • 2019独角兽企业重金招聘Python工程师标准>>> 达梦数据库提供基表修改语句,对基表的结构进行全面的修改,包括修改基表名、列名、增加列、删除列、修改列类型、...修改一列(字段)的数据类型、精度、刻度,设...

    2019独角兽企业重金招聘Python工程师标准>>>

    达梦数据库提供基表修改语句,对基表的结构进行全面的修改,包括修改基表名、列名、增加列、删除列、修改列类型、增加表级约束、删除表级约束、设置列缺省值、设置触发器状态等一系列修改。

    通用格式:ALTER TABLE [[.] .]

    下面通过例子来如何进行操作:根据实际情况对进行相应的变化

    1.修改一列(字段)的数据类型、精度、刻度,设置列上的 DEFAULT,NOT NULL,NULL;

    a. 使用 MODIFY COLUMN 时, 要更改的列不能是:

    (1)聚集索引的列或者引用约束中引用和被引用的列; //(信息量比较大)

    (2)用于 CHECK 约束的列。 //(信息量比较大)

    b. 使用 MODIFY COLUMN 子句不能在列上增加 check 约束,能修改的约束只有列上的NULL, NOT NULL 约束; 如果某列现有的值均非空,则允许添加 NOT NULL; 属于聚集索引包含的列不能被修改; 自增列不允许被修改。

    c. 使用 MODIFY COLUMN 修改可更改列的数据类型时,若该表中无元组(表中的一行称为元组,无元组即每行都没有数据),则可任意修改

    其数据类型、长度、精度或量度;若表中有元组,则系统会尝试修改其数据类型、长度、精度或量度,如果修改不成功,则会报错返回。

    特殊说明: 无论表中有、无元组,多媒体数据类型和非多媒体数据类型都不能相互转换。 d.修改有默认值的列的数据类型时, 原数据类型与新数据类型必须是可以转换的,否则即使数据类型修改成功,但在进行插入等其他操作时, 仍会出现数据类型转换错误。

    举例说明:

    例1 产品的评论表中COMMENTS、 PRODUCT_REVIEWID、 PRODUCTID、 RATING几列都不允许修改,分别因为: COMMENTS为多媒体数据类型; PRODUCT_REVIEWID上定义有关键字,属于用于索引的列; PRODUCTID用于引用约束(包括引用列和被引用列); RATING用于CHECK约束。另外,关联有缺省值的列也不能修改。而其他列都允许修改。假定当前数据库为BOOKSHOP,用户为SYSDBA,如将评论人姓名的数据类型改为varchar(8),并指定该列为NOTNULL,且缺省值为'刘青':

    ALTER TABLE PRODUCTION.PRODUCT_REVIEW MODIFY NAME varchar(8) DEFAULT '刘青' NOTNULL;

    此语句只有在表中无元组的情况下才能成功。

    2. 增加一列(字段)及该列(字段)上的列级约束;

    a.使用 ADD COLUMN 时,新增列名之间、新增列名与该基表中的其它列名之间均不能重复。若新增列跟有缺省值,则已存在的行的新增列值是其缺省值。添加新列对于任何涉及表的视图定义或约束定义没有作用。例如: 如果用“*”为一个表创建一个视图,那么后加入的新列不会自动地加入视图中,只能重新创建此视图。

    b.使用 ADD COLUMN 时,还有以下限制条件:

    (1)列定义中如果带有列约束,只能是对该新增列的约束;列级约束可以带有约束名,系统中同一模式下的约束名不得重复,如果不带约束名,系统自动为此约束命名;

    (2)如果表上没有元组,列可以指定为 NOT NULL;如果表中有元组,对于已有列可以指定同时有 DEFAULT 和 NOT NULL,新增列不能指定 NOT NULL(因为如果指定为not null那么之前存在的数据根本就没有这一列的数据,你还让它不能为空,是何居心?);

    (3)该列可指定为 CHECK;

    (4)该列可指定为 FOREIGN KEY;

    (5) 允许向空数据的表中,添加自增列。

    举例说明:

    例2 具有DBA权限的用户需要对EMPLOYEE_ADDRESS表增加一列,列名为ID(序号),数据类型为INT,值小于10000。

    ALTER TABLE RESOURCES.EMPLOYEE_ADDRESS ADD ID INT PRIMARY KEY CHECK (ID <10000);

    如果该表上没有元组,且没有PRIMARY KEY,则可以将新增列指定为 PRIMARY KEY。表上没有元组时也可以将新增列指定为UNIQUE,但同一列上不能同时指定PRIMARY KEY和UNIQUE两种约束。

    例3 具有DBA权限的用户需要对ADDRESS表增加一列, 列名为PERSONID,数据类型为INT,定义该列为NOT NULL,并引用PERSON的PERSONID。

    ALTER TABLE PERSON.ADDRESS ADD PERSONID INT NOT NULL REFERENCES PERSON. PERSON(PERSONID);

    如果表上没有元组,新增列可以指定为 NOT NULL;如果表上有元组且都不为空,该列可以指定同时有 DEFAULT 和 NOT NULL,不能单独指定为 NOT NULL

    3. 删除一列(字段);

    用 DROP COLUMN 子句删除一列有两种方式: RESTRICT 和 CASCADE。 RESTRICT 方式为缺省选项,确保只有不被其他对象引用的列才被删除。无论哪种方式,表中的唯一列不能被删除。 RESTRICT 方式下,下列类型的列不能被删除:被引用列、建有视图的列、有 check 约束的列。删除列的同时将删除该列上的约束。 CASCADE 方式下,将删除这一列上的引用信息和被引用信息、引用该列的视图、索引和约束;系统允许直接删除 PK 列(我猜pk列指的应该是主键列)。但被删除列为 CLUSTER PRIMARY KEY 类型时除外,此时不允许删除。(蓝色字没看懂)。

    例 4 具有 DBA 权限的用户需要删除 PRODUCT 表的 PRODUCT_SUBCATEGORYID 一列。

    ALTER TABLE PRODUCTION.PRODUCT DROP PRODUCT_SUBCATEGORYID CASCADE;

    删除PRODUCT_SUBCATEGORYID这一列必须采用CASCADE方式,因为该列引用了PRODUCT_SUBCATEGORY表的PRODUCT_SUBCATEGORYID。

    4 . 表名或列表的重命名

    举例说明:具有DBA权限的用户需要将表MY_STUDENT的SEX字段改为GENDER

    ALTER TABLE DMHR.MY_STUDENT ALTER SEX RENAME TO GENDER;

    /前4个是操作表的字段的,后几个是操作关于这个表的属性的*/

    5. 增加表上的约束;

    ADD CONSTRAINT 子句用于添加表级约束。表级约束包括:主键约束(PRIMARY KEY),唯一性约束(UNIQUE),引用约束(REFERENCES),检查约束(CHECK)。添加表级约束时可以带有约束名,系统中同一模式下的约束名不得重复,如果不带约束名,系统自动为此约束命名。用 ADD CONSTRAINT 子句添加约束时, 对于该基表上现有的全部元组要进行约束违规验证:

    (1)添加一个主键约束时,要求将成为关键字的字段上无重复值且值非空,并且表上没有定义主关键字;

    (2)添加一个 UNIQUE 约束时,要求将成为唯一性约束的字段上不存在重复值,但允许有空值;

    (3)添加一个 REFERENCES 约束时,要求将成为引用约束的字段上的值满足该引用约束。

    (4)添加一个 CHECK 约束或外键时,要求该基表中全部的元组满足该约束。

    例5 具有DBA权限的用户需要在PRODUCT表上增加UNIQUE约束, UNIQUE字段为NAME。

    ALTER TABLE PRODUCTION.PRODUCT ADD CONSTRAINT CONS_PRODUCTNAME UNIQUE(NAME);

    用ADD CONSTRAINT子句添加约束时, 对于该基表上现有的全部元组要进行约束违规验证。

    在这里,分为三种情况:

    (1)如果表商场登记里没有元组,则上述语句一定执行成功;

    (2)如果表商场登记里有元组,并且欲成为唯一性约束的字段商场名上不存在重复值,则

    上述语句执行成功;

    (3)如果表商场登记里有元组,并且欲成为唯一性约束的字段商场名上存在重复值,则上

    述语句执行不成功,系统报错“无法建立唯一性索引”。

    如果语句执行成功,用户通过查询

    SELECT TABLEDEF('BOOKSHOP', 'PRODUCTION', 'PRODUCT');

    可以看到,修改后的商场登记的表结构显示为:

    CREATE TABLE "PRODUCT" AT "BOOKSHOP"

    (

    "PRODUCTID" INTEGER IDENTITY(1,1) NOT NULL,

    "NAME" VARCHAR(50) NOT NULL,

    "AUTHOR" VARCHAR(25) NOT NULL,

    "PUBLISHER" VARCHAR(50) NOT NULL,

    "PUBLISHTIME" DATE NOT NULL,

    "PRODUCT_SUBCATEGORYID" INTEGER NOT NULL,

    "PRODUCTNO" VARCHAR(25) NOT NULL,

    "SATETYSTOCKLEVEL" SMALLINT NOT NULL,

    "ORIGINALPRICE" DEC(19,4) NOT NULL,

    "NOWPRICE" DEC(19,4) NOT NULL,

    "DISCOUNT" DEC(2,1) NOT NULL,

    "DESCRIPTION" TEXT,

    "PHOTO" IMAGE,

    "TYPE" VARCHAR(5),

    "PAPERTOTAL" INTEGER,

    "WORDTOTAL" INTEGER,

    "SELLSTARTTIME" DATE NOT NULL,

    "SELLENDTIME" DATE,

    PRIMARY KEY("PRODUCTID"),

    UNIQUE("PRODUCTNO"),

    CONSTRAINT "CONS_PRODUCTNAME" UNIQUE("NAME"),

    FOREIGN KEY("PRODUCT_SUBCATEGORYID")

    REFERENCES"PRODUCT_SUBCATEGORY"("PRODUCT_SUBCATEGORYID"))

    可以看到CONS_PRODUCTNAME就是UNIQUE约束名。

    6. 删除表上的约束;

    DROP CONSTRAINT 子句用于删除表级约束,表级约束包括:主键约束(PRIMARY KEY)、

    唯一性约束(UNIQUE)、引用约束(REFERENCES)、检查约束(CHECK)。用 DROP CONSTRAINT

    子句删除一约束时, 同样有 RESTRICT 和 CASCADE 两种方式。 当删除主键或唯一性约束时,

    系统自动创建的索引也将一起删除。 如果打算删除一个主键约束或一个唯一性约束而它有外部约

    束,除非指定 CASCADE 选项,否则将不允许删除。也就是说,指定 CASCADE 时,删除的不

    仅仅是用户命名的约束,还有任何引用它的外部约束。

    例6 假定当前数据库为BOOKSHOP,库中具有DBA权限的用户需要删除PRODUCT表上的NAME的UNIQUE约束。当前的PRODUCT表结构请参见例5。删除表约束,首先需要得到该约束对应的约束名,用户可以查询系统表 SYSCONSTRAINTS,如下所示:

    SELECT NAME FROM SYSCONSTRAINTS WHERE TABLEID =(SELECT ID FROM SYSTABLES WHERE NAME = 'PRODUCT' AND SCHID=( select SCHID from sysschemas where name='PRODUCTION'));

    该系统表显示商场登记表上的所有PRIMARY KEY, UNIQUE, CHECK约束。查询得到NAME上UNIQUE约束对应的约束名,这里为CONS_PRODUCTNAME。然后,可采用以下的语句删除指定约束名的约束:

    ALTER TABLE PRODUCTION.PRODUCT DROP CONSTRAINT CONS_PRODUCTNAME;

    语句执行成功。

    展开全文
  • oracle数据库字段精度修改 方法-----通过一个临时的字段修改原有的字段精度 1,将原字段修改改变名称 2,新建字段设置精度并将原字段数据复制到该字段中 3,删除原字段的备份字段 --修改字段名TEST_AGE为...

    oracle数据库字段精度修改

    方法-----通过一个临时的字段修改原有的字段精度

    1,将原字段修改改变名称

    2,新建字段设置精度并将原字段的数据复制到该字段中

    3,删除原字段的备份字段

    --修改原字段名TEST_AGE为TEST_AGE_TMP
    alter table TEST_TABLE rename column name to TEST_AGE_TMP; 
    --增加一个和原字段名同名的字段TEST_AGE
    alter TEST_TABLE  add TEST_AGE NUMBER(3); 
    --将原字段TEST_AGE_TMP数据更新到增加的字段TEST_AGE
    update TEST_TABLE set TEST_AGE=trim(TEST_AGE_TMP);
     --更新完,删除原字段TEST_AGE_TMP
    alter table TEST_TABLE drop column TEST_AGE_TMP;

    展开全文
  • 开发过程中经常会遇到数据库已经存有数据,但经过测试发现原来的表设计中字段格式不合适的问题,现在把修改的步骤以及经验总结一下,以供参考查阅

    开发过程中经常会遇到数据库已经存有数据,但经过测试发现原来的表设计中字段格式不合适的问题,现在把修改的步骤以及经验总结一下,以供参考查阅

    1、修改原字段名name为name_tmp

    alter table tablename rename column name to name_tmp;
    

    2、增加一个和原字段名同名的字段name

    alter table tablename add name nvarchar2(20);
    

    3、将原字段name_tmp数据更新到增加的字段name 一定要显示进行数据类型转换
    方式一:
    mysql中

    update tablename set name=CAST(name_tmp AS nvarchar2(20));
    

    oracle中

    update tablename set name=to_char(name_tmp);
    

    方式二:

    update tablename set name =trim(name_tmp );
    

    4、提交数据

    commit;
    

    5、更新完,删除原字段name_tmp

    alter table tablename  drop column name_tmp;
    

    总结:
    建表过程中,如果字段只用于基本保存,建议多使用VARCHAR2(32 BYTE)格式,避免出现数字,小数点,日期转换等问题。

    展开全文
  • 1. 假设字段数据为空,则不管改为什么字段类型,可以直接执行alter table tb modify (name nvarchar2(20));2. 假设字段有数据,则改为nvarchar2(20)可以直接执行alter table tb modify (name nvarchar2(20));3. 假设...

    一  Oracle

    假如有一个表名为tb,字段段名为name,数据类型nchar(20)。

    1. 假设字段数据为空,则不管改为什么字段类型,可以直接执行

    alter table tb modify (name nvarchar2(20));

    2. 假设字段有数据,则改为nvarchar2(20)可以直接执行

    alter table tb modify (name nvarchar2(20));

    3. 假设字段有数据,则改为varchar2(40)执行时会弹出:“ORA-01439:要更改数据类型,则要修改的列必须为空”,这时要用下面方法来解决这个问题

    /*修改原字段名name为name_tmp*/

    alter table tb rename column name to name_tmp;

    /*增加一个和原字段名同名的字段name*/

    alter table tb add name varchar2(40);

    /*将原字段name_tmp数据更新到增加的字段name*/

    update tb set name=trim(name_tmp);

    /*更新完,删除原字段name_tmp*/

    alter table tb drop column name_tmp;

    4. 总结

    1)当字段没有数据或者要修改的新类型和原类型兼容时,可以直接modify修改。

    2)当字段有数据并用要修改的新类型和原类型不兼容时,要间接新建字段来转移。

    二 MySQL

    1. 增加字段

    alter table table_name add column col_name_add varchar(20);

    2. 修改字段名

    alter table table_name change column col_name_old col_name_new varchar(20);

    3. 修改字段类型和长度

    alter table table_name modify col_name varchar(20);

    4. 删除某字段

    alter table table_name drop column col_name;

    三 达梦

    示例

    /** 修改原字段 T_CONTENT 为 T_CONTENT_TEMP 注T_CONTENT类型为varchar(4000)*/

    alter table "数据库名"."表名" rename column T_CONTENT to T_CONTENT_TEMP;

    /** 增加一个和原字段名称相同的字段 T_CONTENT */

    alter table "数据库名"."表名" add T_CONTENT varchar(8000);

    /** 将原字段 T_CONTENT_TEMP数据更新到增加的字段 T_CONTENT中 */

    update "数据库名"."表名" set T_CONTENT =trim(T_CONTENT_TEMP);

    /** 更新完,删除原字段 T_CONTENT_TEMP */

    alter table "数据库名"."表名" drop column T_CONTENT_TEMP;

    commit;

    注:(修改  新增  删除)和oracle的基本相同,如上面的示例,如果都是varchar类型,可以直接修改,不需要上面name麻烦,如下所示:

    alter table "数据库名"."表名" modfiy T_CONTENT varchar(8000);

    上面主要是想讲varchar类型转化为text类型,但是报错了,就试着使用替换字段的方法,但是也报错了,除非在管理工具中改,不使用SQL语句,我没辙了,但是方法是对的,可以借鉴,错误如下:

    [执行语句1]:

    alter table "数据库名"."表名" modify T_CONTENT text;

    执行失败(语句1)

    第1 行附近出现错误[-6160]:

    数据类型的变更无效

    1条语句执行失败

    alter table "数据库名"."表名" add T_CONTENT text;

    执行失败(语句1)

    第1 行附近出现错误[-3243]:

    表[表名]中不能同时包含聚集KEY和大字段

    1条语句执行失败

    展开全文
  • 在DB2或者oracle等其他数据库中,修改字段中出现不能修改现象;有以下原因: 1、字段是否有约束? 2、字段值是否自增? 3、该表是否被使用,或者关联触发器? DB2中,插入数据过程,对字段的增加易出现隐性问题...
  • oracle 数据库修改字段

    2009-11-12 11:16:49
    我现在有一个需求,Oracle数据库中有 700多万数据,我现在想修改其中一个字段的值,数据至少 500万,(如,字段type=0的 我要修改为 type=10) 请哪位高手 告诉我 用什么方法 更快的执行。我 用一个update 语句在...
  • 语句:alter table tableName rename ... -- 修改字段名alter table tableName modify (cloumnName 数据类型); -- 修改数据类型例如: 1、创建表: CREATE TABLE Student( id varchar2(32) primary key, name...
  • 1.修改字段的长度ALTER TABLE MODIFY COLUMN 字段名 数据类型(修改后的长度)例句:ALTER TABLE test_table MODIFY COLUMN id INT(20)2.修改字段的名称alter table change 。例句:ALTER TABLE test_tableCHANGE ...
  • {"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航,为用户的数据库应用系统进行性能和风险评估,参与配合进行数据压测演练,...
  • 只更新数据库部分字段数据的方法

    千次阅读 2016-09-04 10:40:02
    只更新数据库部分字段数据的方法: Hibernate中如果直接使用Session.update(Object o);会把这个表中的所有字段更新一遍。 (一)通过控制Hibernate的update语句set后面不出现该字段即可,有3种方法: (1)XML映射...
  • 批量修改数据库字段数据类型

    千次阅读 2016-04-29 11:18:46
    在有些时候,需要将某种数据类型的字段修改为另一种数据类型,可使用下列脚本实现;例如:原来定义为decimal(18,2)类型的所有统一修改为decimal(19,4)。 – 关闭 约束 declare tb cursor for SELECT sql=’...
  • 数据库表里有数据如何修改字段类型 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...
  • alter table 表名 modify 字段名...若有数据数据库会报错错误报告 -ORA-01439: 要更改数据类型, 则要修改的列必须为空01439. 00000 - "column to be modified must be empty to change datatype"...
  • 下面本篇文章就来带大家了解一下alter table语句,介绍如何修改字段类型,希望对大家有所帮助。 在MySQL中,alter table语句是用于在已有的表中添加、修改或删除列(字段)的。1、添加字段(列)alter table 表名 add ...
  • 1.修改字段的长度语法:ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型(修改后的长度)例子:将字段的长度由10改为20ALTER TABLE attence MODIFY COLUMN id INT(20)2.修改字段的名称语法:alter table change 。...
  • 最近业务有调整, 影响较大的是库表的调整, 有的加了字段, 有的修改了主键, 一般已经使用了的数据库,SE11调整库表结构后,SE...当ABC字段相同,D不同时,保存时提示已经有相同数据存在。 但是SE11看,主键确实是
  • 数据库字段 pic 里面的数据有 20054181241305.jpg /productFiles/2007-10/20071012154826320.gif 怎么把里面的的数据改为这样的格式啊 /productFiles/20054181241305.jpg /productFiles/20071012154826320.gif...
  • JPA 查询出的某数据修改数据库对应字段发生变化 现象: 查询出的用户数据中name字段进行重新赋值,并没有进行dao层的update操作。事务结束之后发现数据库字段已更新。 fun changeName(acctList: List<Account&...
  • 数据库技巧-批量修改ORACLE数据库字段类型 如需转载请标明出处:http://blog.csdn.net/itas109 QQ技术交流群:12951803 使用工具: Navicat 11.2.7 1.新建过程函数 2.输入过程函数代码 这里的示例...
  • Oracle修改数据库字段

    2020-04-20 18:50:16
    Oracle修改数据库字段 字段没有数据或者要修改的新类型和原类型兼容时 alter table +表名+modify +字段名 +字段类型 例:alter table user modify name varchar2(100); 字段数据并用要修改的新类型和原类型不兼容...
  • 举例来说:Transaction 1 修改了一行数据,然后 Transaction 2 在 Transaction 1 还未提交修改操作之前读取了被修改的行。如果 Transaction 1 回滚了修改操作,那么 Transaction 2 读取的数据就可以看作是...
  • 1、例如修改数据表t_email 中email字段中yahoo.cn 修改为163.com查询语句执行如下:UPDATE `t_email` tSET t.`email` = REPLACE(t.`email`, 'yahoo.cn', '163.com');2、更新 runoob_id 为 3 的runoob_title 字段值的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,569
精华内容 3,827
关键字:

数据库修改字段数据