精华内容
下载资源
问答
  • 今天sql server论坛看到一个帖子:如何数据库中某...员工,有字段:人员id,姓名,人员编码,人员入职时间,现在希望要增加一个字段显示工龄,就是公司工作的时间,如 1.5年。 if object_id('emp') is not null

    今天在sql server论坛看到一个帖子:如何让数据库中某一个字段随时间自动更新?

    那么如何来实现呢?

    可以用触发器,那么先要写个触发器,但是可能会影响性能。

    想了想,其实用sql server提供的 计算列,就可以轻松实现这个需求。


    例子如下:

    员工表,有字段:人员id,姓名,人员编码,人员入职时间,现在希望要增加一个字段显示工龄,就是在公司工作的时间,如 1.5年。

    if object_id('emp') is not null
       drop table emp
    go
    
    
    CREATE TABLE emp
        (
          emp_id INT PRIMARY KEY , 
          emp_name NVARCHAR(10) not null,
          emp_code VARCHAR(20) not null,
          hire_date DATE not null
        );
    go
    
    
    INSERT  INTO emp
    VALUES  ( 1, N'张三', '0000000100', '2015-01-01' );
    

    实现方法就是新增一个计算列:

    alter table emp
    add employment_time as cast(datediff(month,hire_date,GETDATE())*1.0/12 as numeric(8,1));
    
    select  * from emp;
    查询结果:


    何让数据库中某一个字段随时间自动更新

    展开全文
  • Andoird的SQLiteOpenHelper类中有一个onUpgrade方法。帮助文档中只是说当数据库升级时该方法被触发。...到1.1版本时,你在数据库的某个表中增加一个字段。那么软件1.0版本用的数据库在软件1.1版本就要被升级了。

    Andoird的SQLiteOpenHelper类中有一个onUpgrade方法。帮助文档中只是说当数据库升级时该方法被触发。经过实践,解决了我一连串的疑问:

    1. 帮助文档里说的“数据库升级”是指什么?


    你开发了一个程序,当前是1.0版本。该程序用到了数据库。到1.1版本时,你在数据库的某个表中增加了一个字段。那么软件1.0版本用的数据库在软件1.1版本就要被升级了。


    2. 数据库升级应该注意什么?


    软件的1.0版本升级到1.1版本时,老的数据不能丢。那么在1.1版本的程序中就要有地方能够检测出来新的软件版本与老的数据库不兼容,并且能够有办法把1.0软件的数据库升级到1.1软件能够使用的数据库。换句话说,要在1.0软件的数据库的那个表中增加那个字段,并赋予这个字段默认值。


    3. 程序如何知道数据库需要升级?


    SQLiteOpenHelper类的构造函数有一个参数是int version,它的意思就是指数据库版本号。比如在软件1.0版本中,我们使用SQLiteOpenHelper访问数据库时,该参数为1,那么数据库版本号1就会写在我们的数据库中。


    到了1.1版本,我们的数据库需要发生变化,那么我们1.1版本的程序中就要使用一个大于1的整数来构造SQLiteOpenHelper类,用于访问新的数据库,比如2。


    当我们的1.1新程序读取1.0版本的老数据库时,就发现老数据库里存储的数据库版本是1,而我们新程序访问它时填的版本号为2,系统就知道数据库需要升级。


    4. 何时触发数据库升级?如何升级?


    当系统在构造SQLiteOpenHelper类的对象时,如果发现版本号不一样,就会自动调用onUpgrade函数,让你在这里对数据库进行升级。根据上述场景,在这个函数中把老版本数据库的相应表中增加字段,并给每条记录增加默认值即可。


    新版本号和老版本号都会作为onUpgrade函数的参数传进来,便于开发者知道数据库应该从哪个版本升级到哪个版本。


    升级完成后,数据库会自动存储最新的版本号为当前数据库版本号。



    做Android应用,不可避免的会与SQLite打交道。随着应用的不断升级,原有的数据库结构可能已经不再适应新的功能,这时候,就需要对SQLite数据库的结构进行升级了。 SQLite提供了ALTER TABLE命令,允许用户重命名或添加新的字段到已有表中,但是不能从表中删除字段。

    并且只能在表的末尾添加字段,比如,为 Subscription添加两个字段:

    1 ALTER TABLE Subscription ADD COLUMN Activation BLOB;

    2 ALTER TABLE Subscription ADD COLUMN Key BLOB;



      另外,如果遇到复杂的修改操作,比如在修改的同时,需要进行数据的转移,那么可以采取在一个事务中执行如下语句来实现修改表的需求。

      1. 将表名改为临时表

             ALTER TABLE Subscription RENAME TO __temp__Subscription;


      2. 创建新表

            CREATE TABLE Subscription (OrderId VARCHAR(32) PRIMARY KEY ,UserName VARCHAR(32) NOT NULL ,ProductId VARCHAR(16) NOT NULL);

      

          3. 导入数据  

             INSERT INTO Subscription SELECT OrderId, “”, ProductId FROM __temp__Subscription;

      或者  

            INSERT INTO Subscription() SELECT OrderId, “”, ProductId FROM __temp__Subscription;

      * 注意 双引号”” 是用来补充原来不存在的数据的

      

          4. 删除临时表  

            DROP TABLE __temp__Subscription;


      通过以上四个步骤,就可以完成旧数据库结构向新数据库结构的迁移,并且其中还可以保证数据不会应为升级而流失。

      当然,如果遇到减少字段的情况,也可以通过创建临时表的方式来实现。


    Android应用程序更新的时候如果数据库修改了字段需要更新数据库,并且保留原来的数据库数据:

    这是原有的数据库表

    CREATE_BOOK = "create table book(bookId integer primarykey,bookName text);";

    然后我们增加一个字段:

    CREATE_BOOK = "create table book(bookId integer primarykey,bookName text,bookContent text);";

    首先我们需要把原来的数据库表重命名一下

    CREATE_TEMP_BOOK = "alter table book rename to _temp_book";

    然后把备份表中的数据copy到新创建的数据库表中

    INSERT_DATA = "insert into book select *,' ' from _temp_book";(注意' '是为新加的字段插入默认值的必须加上,否则就会出错)。

    然后我们把备份表干掉就行啦。

    DROP_BOOK = "drop table _temp_book";

    然后把数据库的版本后修改一下,再次创建数据库操作对象的时候就会自动更新(注:更新的时候第一个创建的操作数据的对象必须是可写的,也就是通过这个方法getWritableDatabase()获取的数据库操作对象)

    然后在onUpgrade()方法中执行上述sql语句就OK了

    public class DBservice extends SQLiteOpenHelper{

        private String CREATE_BOOK = "create table book(bookId integer primarykey,bookName text);";

        private String CREATE_TEMP_BOOK = "alter table book rename to _temp_book";

        private String INSERT_DATA = "insert into book select *,'' from _temp_book";

        private String DROP_BOOK = "drop table _temp_book";

     public DBservice(Context context, String name, CursorFactory factory,int version) {

      super(context, name, factory, version);

     }

     @Override

     public void onCreate(SQLiteDatabase db) {

      db.execSQL(CREATE_BOOK);

     }

     @Override

     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

      switch (newVersion) {

      case 2:

       db.execSQL(CREATE_TEMP_BOOK);

       db.execSQL(CREATE_BOOK);

       db.execSQL(INSERT_DATA);

       db.execSQL(DROP_BOOK);

       break;

      }

     }

    展开全文
  • 求一sql语句:数据库中同时对所有表增加一个相同的字段,该如何写这sql语句。请各位大人帮帮忙。
  • 今天sql server论坛看到一个帖子:如何数据库中某一个字段随时间自动更新?...员工,有字段:人员id,姓名,人员编码,人员入职时间,现在希望要增加一个字段显示工龄,就是公司工作的时间,如 1.5年。 ...

    今天在sql server论坛看到一个帖子:如何让数据库中某一个字段随时间自动更新?

    那么如何来实现呢?

    可以用触发器,那么先要写个触发器,但是可能会影响性能。

    想了想,其实用sql server提供的 计算列,就可以轻松实现这个需求。


    例子如下:

    员工表,有字段:人员id,姓名,人员编码,人员入职时间,现在希望要增加一个字段显示工龄,就是在公司工作的时间,如 1.5年。

     

    if object_id('emp') is not null
       drop table emp
    go
    
    
    CREATE TABLE emp
        (
          emp_id INT PRIMARY KEY , 
          emp_name NVARCHAR(10) not null,
          emp_code VARCHAR(20) not null,
          hire_date DATE not null
        );
    go
    
    
    INSERT  INTO emp
    VALUES  ( 1, N'张三', '0000000100', '2015-01-01' );
    


    实现方法就是新增一个计算列:

     

     

    alter table emp
    add employment_time as cast(datediff(month,hire_date,GETDATE())*1.0/12 as numeric(8,1));
    
    select  * from emp;

    查询结果:

     


    何让数据库中某一个字段随时间自动更新

     

    转载于:https://www.cnblogs.com/momogua/p/8304412.html

    展开全文
  • 表增加一个字段,定义是基本类型有默认值,新生成的数据没问题但是历史数据该字段都是空值,导致程序会出错,JavaBean的字段类型double和数据库中的空值不匹配,本来想get和set做点文章,返回一个默认值,...
  • 如果要数据表中添加一个字段,应该如何表示呢?下面就为您介绍表添加字段的SQL语句的写法,希望可以让您对SQL语句有更深的认识。 通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default ...

    转载文章原地址:http://database.51cto.com/art/201009/228236.htm


    如果要在数据表中添加一个字段,应该如何表示呢?下面就为您介绍表添加字段的SQL语句的写法,希望可以让您对SQL语句有更深的认识。

    通用式: alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数
    增加字段: alter table [表名] add 字段名 smallint default 0 增加数字字段,整型,缺省值为0 
    alter table [表名] add 字段名 int default 0 增加数字字段,长整型,缺省值为0
    alter table [表名] add 字段名 single default 0 增加数字字段,单精度型,缺省值为0 
    alter table [表名] add 字段名 double default 0 增加数字字段,双精度型,缺省值为0
    alter table [表名] add 字段名 Tinyint default 0 增加数字字段,字节型,缺省值为0

    alter table [表名] add 字段名 text [null] 增加备注型字段,[null]可选参数
    alter table [表名] add 字段名 memo [null] 增加备注型字段,[null]可选参数

    alter table [表名] add 字段名 varchar(N) [null] 增加变长文本型字段 大小 为N(1~255)
    alter table [表名] add 字段名 char [null] 增加定长文本型字段 大小固定为255

    alter table [表名] add 字段名 Datetime default 函数 增加日期型字段,其中 函数 可以是 now(),date()等,表示缺省值
    (上面都是最常用的,还有其他的属性,可以参考下面的数据类型描述)

    删除字段: alter table [表名] drop 字段名

    修改变长文本型字段的大小:alter table [表名] alter 字段名 varchar(N)

    删除表: drop table [表名]

    创建表:
    sql="CREATE TABLE [表名] ([字段1,并设置为主键] int IDENTITY (1, 1) NOT NULL CONSTRAINT PrimaryKey PRIMARY KEY,"&_
    "[字段2] varchar(50),"&_
    "[字段3] single default 0,"&_
    "[字段4] varchar(100) null,"&_
    "[字段5] smallint default 0,"&_
    "[字段6] int default 0,"&_
    "[字段7] date default date(),"&_
    "[字段8] int default 1)"
    conn.execute sql


    展开全文
  • 问题就是当设计好表结构之后,后期如果需要往表中增加字段,默认会把该字段放到表的最后,并且字段特别多而我们又想把有关联性的字段放在一起,这时就要修改字段顺序。修改顺序之前,我们先来看看Oracle数据库表中...
  • 那么如何在发布新的版本时保证线上数据库与本地数据库中的表字段都是统一的了,下面我说一个比较笨的方法去保证两个数据库无差异。 1、将线上的数据库架构生成成为SQL,操作如下: 选择某线上数据库 → 任务 → ...
  • 问题就是当设计好表结构之后,后期如果需要往表中增加字段,默认会把该字段放到表的最后,并且字段特别多而我们又想把有关联性的字段放在一起,这时就要修改字段顺序。修改顺序之前,我们先来看看Oracle数据库表中...
  • 如何一个数据库表添加主键

    千次阅读 2020-12-03 09:46:06
    要想给数据库表格增加主键,当然这分为两种情况。 1你还没建立表格。...2.创建的时候所有字段后面使用primary key(主键字段列表)来创建主键(如果有多个字段作为主键被称为复合主键) *CREATE TABLE
  • 最近对一个django项目进行修改,其中models.py添加了新的字段,需要同步到数据库。 尝试使用 python manage.py syncdb 提示成功,但未对数据库进行任何操作,到数据库中查看,新字段并没有同步进来。 解决办法...
  • 这就好办了,在表中增加整数型字段,整数的每个二进制bit位就可以作为一个标,这样大大节省了空间,例如long型整数就可以为63个标所用(java中long整型有64位)。 怎么打标:打标就是把标对应字段的某个bit位...
  • 维护公司的数据库时,...那么首先找出重复记录(先这个表增加一个新的递增列): select min(id) as id from Tuserandreport group by usercode,reportnamehaving count(*) > 1 然后就可以删除它了 dele...
  • 解决方法1、给某一张增加一个字段,这里我们就以node_table这张表来举例,在数据库命令行输入下面指令 :alter table node_table add id int2、更改id字段属性为自增属性,在数据库命令行输入下面指令 :alter ...
  • dedecms默认是没有栏目图片功能的,为了便于灵活管理就给每个栏目增加一个...1. 首先,给栏目分类表`dede_arctype`表增加缩略图字段`typeimg`,用phpMyAdmin或其他数据库管理工具,直接数据表中添加该字段,或者运...
  • 业务表设计中,删除数据一般建议不使用物理删除,而是使用逻辑删除,逻辑删除时,就存在一个问题:如何保证表中字段唯一性 解决方案 删除标志可以不局限为true、false,比如使用0表示未删除,-1、-2、-3.........
  • 应用程序一张基础配置信息,保存着一些字典信息,键值时根据需要由应用程序按序增加的。这类需求用主键字段值管理上。现在发现这样一个问题,该字典会新插入相同的键,导致应用取键值时出现多条。 我们...
  • 如何在MySQl数据库中给已有的数据添加自增ID? 由于使用MySQL数据库还没有多久的缘故,在搭建后台往数据库导入数据的时候...1、给某一张增加一个字段,这里我们就以node_table这张表来举例,在数据库命令行输入...
  • 如何提高增加包含大量记录的表的主键...系统审计表自然也有这个要求—需要增加一个identify的字段,但这个表中有2000多万条记录,使用以下SQLl语句:alter table erAuditEventTime add EventTime_ID int IDENTITY...
  • 如何在数据库中存储有顺序的数据

    千次阅读 2011-10-23 21:19:00
    数据库中的记录都是按照集合的方式来组织的,一个记录集中的... 一种直接而有效的方法是,记录集(或中增加一个“顺序”列(或叫“索引”字段),对表进行存入、取出或者排序的操作时,都可以依据“索引”字段...
  • APP版本升级,数据库数据如何办?

    千次阅读 2016-07-16 14:51:40
    问题:Android数据库更新并保留原来的数据如何实现 Andoird的SQLiteOpenHelper类中有一个onUpgrade方法。帮助文档中只是说当数据库升级时该方法...到1.1版本时,你在数据库的某个表中增加一个字段。那么软件1.0版
  • 当我从最开始设计字段的时候,我试图不主索引里增加太多的字段以便加快数据库的运行速度。然后我意识到特定的组查询和信息采掘既不准确速度也不快。结果只好主索引重建而且合并了数据字段。我发现有一个...
  • 实际项目需求如下:商户有商户费率模板号这个字段,我们要求该字段的规则是:ST+当前日期YYYYMMDD+6位序列号(左边不够是用0填补) 如:TS20200610000001和TS20200610000002 备注:当前字段非自增主键,单我们又...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 367
精华内容 146
关键字:

数据库如何在表中增加一个字段