精华内容
下载资源
问答
  • 关于数据库的增、删、改、查等基本操作本文不去介绍,网上大把的详细教程,这里只介绍实际使用中的一种情况:数据库修改字段名称。 在产品更迭的过程中我们有时候需要修改数据库表中已存在的字段名或字段类型,这...

    关于数据库的增、删、改、查等基本操作本文不去介绍,网上大把的详细教程,这里只介绍实际使用中的一种情况:数据库中修改字段名称。

    在产品更迭的过程中我们有时候需要修改数据库表中已存在的字段名或字段类型,这个时候我们去baidu.comjianshu.com的话找到的答案应该是以下两种:

    • alter table user CHANGE new1 new4 int;
    • alter table user rename column a to b;

    然而这两种方法都并不能在SQLite3中起作用,因为在 SQLite 中,除了重命名表和在已有的表中添加列,ALTER TABLE 命令不支持其他操作。也就是说,SQLite无法使用rename/change语句修改字段名了。但如果我们产品更迭过程中不巧有这种奇葩需求了,怎么办呢?这时候只能采取迂回政策了:

    如何把tableA中的字段oldColumn修改为newColumn

    解决方法:

    1. 在tableA中添加字段newColumn
    ALTER TABLE tableA ADD COLUMN newColumn INTEGER
    复制代码
    1. 将旧字段oldColumn的值赋值给新字段newColumn
    UPDATE tableA SET newColumn = oldColumn
    复制代码
    1. 删除旧字段oldColumn ALTER TABLE tableA DROP COLUMN oldColumn 然后到第三步你会发现又被SQLite坑了:SQLite无法删除字段!!

    第3步解决办法:(依旧是迂回政策)
    3.1. 先创建备份表tableA_backup将tableA数据备份

    CREATE TEMPORARY TABLE tableA_backup(id INTEGER PRIMARY KEY AUTOINCREMENT, newColumn INTEGER)
    复制代码

    3.2 将原表tableA中的数据对应的复制到tableA_backup表中

    INSERT INTO tableA_backup SELECT id, newColumn FROM tableA
    复制代码

    不要将旧字段oldColumn复制过去,备份表tableA_backup中没有oldColumn字段
    3.3 此时实际已经得到了改过字段名的表:tableA_backup,然后将原表tableA删掉

    DROP TABLE tableA
    复制代码

    3.4 然后创建表tableA

    CREATE TABLE tableA(id INTEGER PRIMARY KEY AUTOINCREMENT, newColumn INTEGER)
    复制代码

    3.5 再把备份表tableA_backup中的数据复制到tableA中

    INSERT INTO tableA SELECT id, newColumn FROM tableA_backup
    复制代码

    3.6 把备份表tableA_backup删除,Have done!

    DROP TABLE tableA_backup
    复制代码



    修改字段名及类型的思路就是上面这些步骤,下面给贴上代码方便大家阅读使用:
    # 方法调用:
                [self alterTable:@"currentList"
                 renameOldColumn:@"isvipa"
                     toNewColumn:@"vipType"
                andNewColumnType:@"INTEGER"
                    withDatabase:db
       allRenamedColumnsAndTypes:@"id INTEGER PRIMARY KEY AUTOINCREMENT, isinsider INTEGER, vipType INTEGER, groupcode TEXT, groupname TEXT, grouppicpath TEXT, uuid TEXT, AESkey TEXT"
           allRenamedColumnNames:@"id, isinsider, vipType, groupcode, groupname, grouppicpath, uuid, AESkey"];
    
    复制代码
    /**
     修改表中一个字段名 (sqlite3无法使用rename/change语句直接修改字段名)
    
     @param tableName 表名
     @param oldColumnName 要被修改的字段名
     @param newColumnName 字段被修改后的名称
     @param newColumnType 字段被修改后的类型
     @param db 数据库对象
     @param renamedColumnsAndTypes 修改后所有的字段及对应的类型  eg: id INTEGER PRIMARY KEY AUTOINCREMENT, isinsider INTEGER, vipType INTEGER, groupcode TEXT, groupname TEXT, grouppicpath TEXT, uuid TEXT, AESkey TEXT
     @param renamedColumnNames 修改后所有的字段名  eg: id, isinsider, vipType, groupcode, groupname, grouppicpath, uuid, AESkey FROM currentList
     */
    -(void)alterTable:(NSString *)tableName
      renameOldColumn:(NSString *)oldColumnName toNewColumn:(NSString *)newColumnName andNewColumnType:(NSString *)newColumnType
         withDatabase:(FMDatabase *)db
    allRenamedColumnsAndTypes:(NSString *)renamedColumnsAndTypes allRenamedColumnNames:(NSString *)renamedColumnNames
    {
        if (![db columnExists:oldColumnName inTableWithName:tableName])
            return;
        
        DLog(@"%@表中存在%@字段,修改%@字段名称为%@", tableName, oldColumnName, oldColumnName, newColumnName);
        // 1.添加新字段
        if (![db executeUpdate:[NSString stringWithFormat:@"ALTER TABLE %@ ADD COLUMN %@ %@", tableName, newColumnName, newColumnType]]) {
            DLog(@"%@修改字段:添加新字段%@失败", tableName, newColumnName);
        }
    
        // 2.将旧字段赋值给新字段
        if (![db executeUpdate:[NSString stringWithFormat:@"UPDATE %@ SET %@ = %@", tableName, newColumnName, oldColumnName]]) {
            DLog(@"%@修改字段:%@赋值%@字段失败", tableName, oldColumnName, newColumnName);
            return;
        }
        
        // 3.删除旧字段(sqlite3无法使用DROP删除字段,先复制备份,再创建新的表)
        if (![db executeUpdate:@"BEGIN TRANSACTION"]) {
            DLog(@"BEGIN TRANSACTION失败");
        }
        NSString *table_backup = [NSString stringWithFormat:@"%@_backup", tableName];
        NSString *sql = [NSString stringWithFormat:@"CREATE TEMPORARY TABLE %@(%@)", table_backup, renamedColumnsAndTypes];
        if (![db executeUpdate:sql]) {
            DLog(@"CREATE TEMPORARY TABLE %@ 失败", table_backup);
        }
        if (![db executeUpdate:[NSString stringWithFormat:@"INSERT INTO %@ SELECT %@ FROM %@", table_backup, renamedColumnNames, tableName]]) {
            DLog(@"INSERT INTO %@ 失败", table_backup);
        }
        if (![db executeUpdate:[NSString stringWithFormat:@"DROP TABLE %@", tableName]]) {
            DLog(@"DROP TABLE %@ 失败", tableName);
        }
        if (![db executeUpdate:[NSString stringWithFormat:@"CREATE TABLE %@(%@)", tableName, renamedColumnsAndTypes]]) {
            DLog(@"CREATE TABLE %@ 失败", tableName);
        }
        if (![db executeUpdate:[NSString stringWithFormat:@"INSERT INTO %@ SELECT %@ FROM %@", tableName, renamedColumnNames, table_backup]]) {
            DLog(@"INSERT INTO %@ SELECT FROM %@ 失败", tableName, table_backup);
        }
        if (![db executeUpdate:[NSString stringWithFormat:@"DROP TABLE %@", table_backup]]) {
            DLog(@"DROP TABLE %@ 失败", table_backup);
        }
        if (![db executeUpdate:@"COMMIT"]) {
            DLog(@"COMMIT失败");
        }
    }
    复制代码
    展开全文
  • mysql数据库修改字段名

    千次阅读 2011-08-26 13:41:02
    按照一下格式即可: alter table mapping change cFileIdName cFieldName varchar(20) not null

    按照一下格式即可:

     alter table mapping change cFileIdName cFieldName varchar(20) not null


    展开全文
  • 数据库修改字段

    千次阅读 2018-09-07 15:15:32
    修改字段 逻辑就是 1,先新增一个字段, 2,把要修改的字段值赋给新字段, 3,如果要修改的字段有外键,要先删除外键, 4,把新字段名改成老字段的名字。 aaaa 为表名 ssss 为新增字段 bbbbb 为老字段 –...

    只为自己记录,以备不时之需。

    –修改字段
    逻辑就是
    1,先新增一个字段,
    2,把要修改的字段值赋给新字段,
    3,如果要修改的字段有外键,要先删除外键,
    4,把新字段名改成老字段的名字。

    aaaa 为表名
    ssss 为新增字段
    bbbbb 为老字段

    – 新增一个字段
    ALTER TABLE aaaa ADD ssss varchar(100);

    – 把值赋给新字段
    update aaaa base set base.ssss=base.bbbbb;

    – 删除外键,把老字段删掉
    ALTER TABLE aaaa DROP COLUMN bbbbb;

    – 把新字段的名字改为老字段的
    alter table aaaa change ssss renterid varchar(100) not null;

    展开全文
  • oracle数据库字段精度修改 方法-----通过一个临时的字段修改原有的字段精度 ...--修改字段名TEST_AGE为TEST_AGE_TMP alter table TEST_TABLE rename column name to TEST_AGE_TMP; --增加一个和原字段名...
  • mysql数据库修改字段类型

    千次阅读 2019-01-08 13:53:00
    修改字段类型: alter table表名 modifycolumn 字段名字 decimal(18, 4) ; 转载于:https://www.cnblogs.com/czlovezmt/p/10238589.html
  • MySQL数据库修改字段的长度

    千次阅读 2019-03-23 17:01:00
    数据库版本:5.7.22 ...使用DDL语句:alter table 表名 modify 字段名 字符类型(长度) 例如: alter table db2.admin modify password char(40); 转载于:https://www.cnblogs.com/root0/p/10584626.html...
  • 语句:alter table tableName rename ... -- 修改字段名alter table tableName modify (cloumnName 数据类型); -- 修改数据类型例如: 1、创建表: CREATE TABLE Student( id varchar2(32) primary key, name...
  • def get_add_fileds(): 添加字段 db.update(where,{'$set':{'... 修改字段名 db.update(where, {'$rename':{"source_time":"date"}}, COLLECTION, BASE)...
  • 达梦数据库修改字段信息采坑记

    千次阅读 2020-05-18 17:05:44
    达梦的“DM管理工具”有坑。... 直接在表属性中修改字段长度就都能改到;用SQL修改,导航栏那里就修改不到,但是实际是修改成功了的。 问题解决:SQL中没通过模式去获取表名(模式.table_name)的原因。
  • 数据库中的字段和实体类中的字段名修改成一样的名字 方法二: 如果是自定以mapper.xml文件中手写的sql查询语句,可以给字段起一个别名例如这里就可以写成select name as u_name from… 方法三: 使用注解.
  • 数据库修改表名,字段名 字段类型

    万次阅读 多人点赞 2017-11-28 15:46:09
    修改表:  (1)修改表的名称呢  alter table 表名 rename to 新的名字;  demo:  alter table ta1 rename to ta0;  (2)添加一个新字段  alter table 表名
  • SQL修改数据库名字、表名字、字段名字 【资料来自网络】 修改数据库名字:alter database 原数据库名称 modify name=新数据库名称 添加字段: ALTER TABLE SupplierADD LoginPassword varchar(20) 不需要...
  • 1、查询字段类型 select b.name as tablename,a.name as columnname,c.name as typename,a.max_length as typelength from sys.columns a inner join sys.tables b on b.object_id=a.object_id inner join sys....
  • 有时候不需要出库,在数据库修改一些内容,就需要用到下列语句! sql语句为: UPDATE `table_name` SET `field_name` = replace (`field_name`,'from_str','to_str') WHERE...field_name —— 字段名 fro
  • 修改数据库字段类型或名字

    千次阅读 2019-01-30 18:10:00
    ########WF_WORK_FLOW_LOG修改字段类型 1. ##修改原字段名NAME为NAME_TMP 1 ALTER TABLE WF_WORK_FLOW_LOG RENAME COLUMN WORK_WHOLE_FLOW TO WORK_WHOLE_FLOW_TMP; 2.##增加一个和原字段名同名的字段NAME 1 ...
  • 数据库修改表字段类型和字段名

    千次阅读 2016-09-26 11:49:34
    数据库修改字段类型: ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (col_name::integer); 如果字段内容里包含有空格,使用: ALTER TABLE the_table ALTER COLUMN col_name TYPE integer ...
  • Oracle修改数据库字段

    2020-04-20 18:50:16
    Oracle修改数据库字段 字段没有数据或者要修改的新类型和原类型兼容时 alter table +表名+modify +字段名 +字段类型 例:alter table user modify name varchar2(100); 字段有数据并用要修改的新类型和原类型不兼容...
  • Oracle数据库修改Number字段属性

    千次阅读 2016-04-17 10:53:03
    在Oracle数据库中,我们会因为一些需求或其他原因要修改数据库的字段属性,但是直接用语句:alter table TEST_TABLE modify (TEST_AGE NUMBER (3) DEFAULT null );...--修改字段名TEST_AGE为TEST_AGE_TMP alt
  • update 表名 set 字段名=新值 条件; update users set recordNum=2 where id =2; 2、修改某个字段的默认值 alter table 表名 alter column 字段名set default 默认值; alter table users alter column recordNum set...
  • 添加字段 ALTER TABLE 表名 ADD 字段名 数据类型【属性】; 修改字段 ALTER TABLE 表名 CHANGE 原字段名,新字段名,数据类型【属性名】; 删除字段 ALTER TABLE 表名 DROP 字段名
  • 测试项目的导入功能时,发现代码和数据库之间不吻合,导致导入Excel文件失败。...2.选择目标数据库(被修改或对比的库) 3.选择要修改字段(运行查询) 选择你要修改字段,点击运行,你的目标数...
  • 数据库字段名

    2011-01-05 13:59:00
    DeleteMark 是原本表示删除标志的,DeletionStateCode 才是微软CRM里的标准字段名。 CreateDate 是原本表示创建时间的,CreateOn 才是微软CRM里的标准字段名。 CreateUserRealname 是原本表示创建人的,...
  • update 要修改的表 set 字段名=replace(字段名,‘要修改的字符’,'修改为什么字符') where 条件eg:update dsa_devices_management set name=replace(name,'2-','2') where category='WIBU'...
  • 修改数据库字段名称类型:alter table tableName ... -- 修改字段名 alter table tableName modify (cloumnName 数据类型); -- 修改数据类型1、创建表: CREATE TABLE TABLE_NAME(  id varchar2(32) primary key,
  • SQL更改表名,数据库名,字段名

    万次阅读 2018-05-15 11:10:08
    如二、更改字段名alter table 表名 change 要修改字段名 新字段名 新字段的数据类型;如:三、更改数据库名1.创建一个新数据库;2.将旧数据库的表全部rename到新数据库中;3.删除旧数据库。...
  • update 表名 set 字段名=replace(字段名,‘原数据内容’,‘替换后的数据内容’)

空空如也

空空如也

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

数据库修改字段名