精华内容
下载资源
问答
  • postgresql 表不设置主键问题

    千次阅读 2018-11-22 10:51:58
    (postgresql 使用pgadmin不能修改无主键表数据,navicat 批量复制数据时,也会因为表格没有主键导致多行数据覆盖,和复制失败等情况,当前使用insert语句是没有问题的 ) 实在是想不明白当时哪位大...

    由于多系统整合,需要将当前系统的数据库表格修改为视图的形式映射其他系统的表格。在做这项工作时需要导入数据和修改数据在这个过程中我发现了一个大坑,其他系统表格居然都没有主键。

    (postgresql 使用pgadmin不能修改无主键的表数据,navicat 在批量复制数据时,也会因为表格没有主键导致多行数据覆盖,和复制失败等情况,当前使用insert语句是没有问题的 )

    实在是想不明白当时哪位大神设计的这个数据库,也想不明白表格为什么不设置主键,而且基本上所有表都不添加主键。

    注 : 若有大神知道数据库表为什么不设置主键,万请告知,万分感谢。

    这里说一下主键的作用,来阐述数据库设计中表中需不需要主键(谨代表个人观点 )

    1)主键约束 包含 唯一约束和非空约束。主键能唯一表示了二维表中的唯一一行数据。

    2)一般数据库会使用主键来组织表行数据,其他索引只是存储了这个主键的索引位置,所以查询的时候如果用到主键查询排序应该更快。

    3)只是postgresql没有主键是存在一些很坑的错误,上面已经说了一下我遇见的问题。

    4)主键能在一定程度上保证数据不重复,唯一性。

    5)主键是作为删除,更新最好的标示。

    6)在某些数据库表中要求必须需要主键,例如:mysql的innodb数据库引擎 中必须有主键,不设置主键它会默认 设置主键

    7)数据库主键可以优化。(减少数据冗余)

     

     

    展开全文
  • 物化视图:以前用的普通的视图,普通视图就是一段逻辑语句,对性能没有任何的提升,也不能创建索引,而物化视图会把视图里查询出来的数据在数据库上建立快照,它和物理一样,可以创建索引,主键约束等等,性能会有...

    物化视图:以前用的普通的视图,普通视图就是一段逻辑语句,对性能没有任何的提升,也不能创建索引,而物化视图会把视图里查询出来的数据在数据库上建立快照,它和物理表一样,可以创建 索引,主键约束等等,性能会有质的提升,但是其有缺点,会占用,可以设置它定时自动更新一次,也可以手动更新,当然也是可以设置及时更新的,但是会拉慢基表的增删改查操作,在这里我只讲思路,具体的话大家可以自己去研究。

    --创建物化视图,每天晚上22:00:00自动更新
    create materialized view VM_PSNPERSONINFO 
    refresh force on demand start with sysdate next to_date( concat( to_char( sysdate+1,'dd-mm-yyyy'),' 22:00:00'),'dd-mm-yyyy hh24:mi:ss')
    as
    SELECT dt.personid, c.employeeid,d.unitcode,d.unitname,d.label,
           dt.unitid,dt.startdate,dt.enddate
      FROM (
             SELECT DISTINCT b.personnelid personid,SUBSTR (a.effectdate, 1, 10) startdate,
             MIN (CASE WHEN a.effectdate < b.effectdate THEN b.effectdate ELSE N'9999-99-99' END) AS enddate,
             MIN (a.adjustresult) unitid
             FROM psnadjust a LEFT JOIN psnadjust b
             ON a.personnelid = b.personnelid
             WHERE a.adjusttype = '2' AND b.adjusttype = '2'
             GROUP BY b.personnelid, a.effectdate
            ) dt
           INNER JOIN psnaccessioninfo c
               ON c.personid = dt.personid
           INNER JOIN orgstdstruct d
               ON d.unitid = dt.unitid
    ORDER BY employeeid, unitcode, startdate;
    

      

    http://www.cnblogs.com/zhxhdean/archive/2011/05/16/2047795.html

    http://blog.163.com/ybhjj2005@126/blog/static/561082842007235010598/

    http://www.cnblogs.com/liuzhendong/archive/2011/10/10/2205744.html

    转载于:https://www.cnblogs.com/51net/p/3721670.html

    展开全文
  • 注意: A.中有数据不能创建约束 ...主键是每行的唯一标识符,仅仅通过它就能准确定位到一行,其中主键整个表中不能有重复,必须包含唯一的值(不能为NULL)。 alter table t_group  alter column id i...

    注意:

    A.表中有数据不能创建约束

     

    B.视图下设置后,要点击保存(只有保存后在才看的到)


    c   别忘了,点刷新,才会出来呀!


    1、主键约束 primary key

    主键是每行的唯一标识符,仅仅通过它就能准确定位到一行,其中主键列在整个表中不能有重复,必须包含唯一的值(不能为NULL)。


    alter table t_group  
      alter column id int not null      --修改字段类型
    go


    alter table t_group
      add constraint pk_group_Id --字段创建主键约束
      primary key(id)
    go


    constraint  [kənˈstrent]  约束


    2、外键约束 foreign key

    外键既能确保数据完整性,也能表现表之间的关系。添加了外键之后,插入引用表的记录要么必须被引用表中被引用列的某条记录匹配,要么外键列的值必须设置为NULL。

      外键和主键不一样,每个表中的外键数目不限制唯一性。在每个表中,每一有-~253个外键。唯一的限制是一个列只能引用一个外键。一个列可以被多个外键引用。

    如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的。

    比如说:

    create table t_group (   
        id int not null,   
        name varchar(30),   
        primary key (id)   
    );  
     
    insert into t_group values (1, 'Group1');   
    insert into t_group values (2, 'Group2');
     
    create table t_user (   
        id int not null,   
        name varchar(30),   
        groupid int,   
        primary key (id),   
        foreign key (groupid) references t_group(id) on delete cascade on update cascade  
    );  
     
    insert into t_user values (1, 'qianxin', 1); --可以插入   
    insert into t_user values (2, 'yiyu', 2);    --可以插入   
    insert into t_user values (3, 'dai', 3);    --错误,无法插入,用户组3不存在,与参照完整性约束不符 
     
    insert into t_user values (1, 'qianxin', 1);   
    insert into t_user values (2, 'yiyu', 2);   
    insert into t_user values (3, 'dai', 2);   
    delete from t_group where id=2;              --导致t_user中的2、3记录级联删除   
    update t_group set id=2 where id=1;          --导致t_user中的1记录的groupid级联修改为2 
    

    create table t_group (   
        id int not null,   
        name varchar(30),   
        primary key (id)   
    );  
     
    insert into t_group values (1, 'Group1');   
    insert into t_group values (2, 'Group2');
     
    create table t_user (   
        id int not null,   
        name varchar(30),   
        groupid int,   
        primary key (id),   
        foreign key (groupid) references t_group(id) on delete cascade on update cascade  
    );  
     
    insert into t_user values (1, 'qianxin', 1); --可以插入   
    insert into t_user values (2, 'yiyu', 2);    --可以插入   
    insert into t_user values (3, 'dai', 3);    --错误,无法插入,用户组3不存在,与参照完整性约束不符 
     
    insert into t_user values (1, 'qianxin', 1);   
    insert into t_user values (2, 'yiyu', 2);   
    insert into t_user values (3, 'dai', 2);   
    delete from t_group where id=2;              --导致t_user中的2、3记录级联删除   
    update t_group set id=2 where id=1;          --导致t_user中的1记录的groupid级联修改为2 


    3、唯一约束unique 

    指定列中的每个值必须是唯一的。可以多列唯一。

    alter table Account
        add constraint AK_AccountName    --约束名
        unique (Account_Name)    -- 列名
    

    alter table Account
        add constraint AK_AccountName    --约束名
        unique (Account_Name)    -- 列名

    补充:

    1.主键约束(PRIMARY KEY)

    1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。 
    2) 是不可能(或很难)更新. 
    3) 主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).
    4) 主健可作外健,唯一索引不可;

    2.唯一性约束(UNIQUE)
    1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束.
    2) 只要唯一就可以更新. 
    3) 即表中任意两行在  指定列上都不允许有相同的值,允许空(NULL).
    4) 一个表上可以放置多个唯一性约束

    3.唯一索引(INDEX)

       创建唯一索引可以确保任何生成重复键值的尝试都会失败。

       唯一性约束和主键约束的区别:
        (1).唯一性约束允许在该列上存在NULL值,而主键约束的限制更为严格,不但不允许有重复,而且也不允许有空值。
        (2).在创建唯一性约束和主键约束时可以创建聚集索引和非聚集索引,但在 默认情况下主键约束产生聚集索引,而唯一性约束产生非聚集索引

     

       约束和索引, 前者是用来检查数据的正确性,后者用来实现数据查询的优化,目的不同。
       唯一性约束与唯一索引有所不同:

       (1).创建唯一约束会在Oracle中创建一个Constraint,同时也会创建一个该约束对应的唯一索引。

       (2).创建唯一索引只会创建一个唯一索引,不会创建Constraint。

       也就是说其实唯一约束是通过创建唯一索引来实现的。

       在删除时这两者也有一定的区别:

       删除唯一约束时可以只删除约束而不删除对应的索引,所以对应的列还是必须唯一的,

       而删除了唯一索引的话就可以插入不唯一的值。

     


    4、CHECK约束

    CHECK约束约束可以和一个列关联,也可以和一个表关联,因为它们可以检查一个列的值相对于另外一个列的值,只要这些列都在同一个表中以及值是在更新或者插入的同一行中。CHECK约束还可以用于检查列值组合是否满足某一个标准。

      可以像使用where子句一样的规则来定义CHECK约束。CHECK约束条件的示例如下: 

    目标

    SQL

    限制Month列为合适的数字

    BETWEEN 1 AND 12

    正确的SSN格式

    LIKE'[0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]'

    限制为一个快递公司的特定列表

    IN('UPS','Fed Ex',EMS')

    价格必须为正数

    UnitPrice >= 0

    引用同一行中的另外一列

    ShipDate >= OrderDate


      上面给出的列表只是一小部分,而条件实际上市无限多的。几乎所有可以放到where子句的条件都可以放到该约束中。而且和其他选择(规则和触发器)相比,CHECK约束执行速度更快。

      在已存在的表中添加一个CHECK约束:

    alter table Account

        add constraint CN_AccountAge

        check 

        (Account_Age > 18);    -- 插入年龄必须大于18

      如果此时视图添加一条不满足的记录,将报如下错误:

    insert into Accountvalues (22,'洪',17)

    消息547,级别16,状态0,第1 行

    INSERT 语句与 CHECK 约束"CN_AccountAge"冲突。该冲突发生于数据库"Nx",表"dbo.Account", column 'Account_Age'。

    语句已终止。
     

    5、DEFAULT约束

    DEFAULT约束在INSERT INTO语句没有为列指定值的时候提供一个默认值。

    示例

    例如,以下SQL创建了一个名为CUSTOMERS的表,包含5个列。其中,SALARY列的默认值为5000.00,如果INSERT INTO语句没有为该列指定值,将会使用默认的5000.00。

     

    CREATE TABLE CUSTOMERS(
    ID INT NOT NULL,
    NAME VARCHAR (20) NOT NULL,
    AGE INT NOT NULL,
    ADDRESS CHAR (25) ,
    SALARY DECIMAL (18, 2) DEFAULT 5000.00, PRIMARY KEY
    PRIMARY KEY (ID)
    );

     

    如果该表已经存在,你可以使用类似以下的语句为SALARY列添加一个NOT NULL约束:

     

    ALTER TABLE CUSTOMERS
       MODIFY SALARY  DECIMAL (18, 2) DEFAULT 5000.00;

    删除默认约束

    使用以下SQL删除DEFAULT约束:

     

    ALTER TABLE CUSTOMERS
       ALTER COLUMN SALARY DROP DEFAULT;

    禁用约束

    ALTER TABLE CUSTOMERS

    WITHNOCHECK    ------- 临时禁用约束

    ADD CONSTRAINT

    CHECK  ........

     

     

     

     

     

    展开全文
  • 数据库需要设置主键,主键是非重复的,而Access设置自动编号,即每当向表中添加一条新记录时,从1开始,每次递增 1。自动编号字段不能更新。1、设置自动编号在表设计视图下,数据类型下拉选择自动编号即可2、设置...

    数据库表需要设置主键,主键是非重复的,而Access设置自动编号,即每当向表中添加一条新记录时,从1开始,每次递增 1。自动编号字段不能更新。

    1、设置自动编号

    在表设计视图下,数据类型下拉选择自动编号即可

    d34d3e93c8e65fefd1bb23884616c02e.png

    2、设置GUID

    GUID即全球唯一识别码的自动编号:全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的字符串。GUID主要用于在拥有多个节点、多台计算机的网络或系统中。GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中的 x 是 0-9 或 a-f 范围内的一个32位十六进制数。现阶段,任何计算机都不可能生成两个相同的GUID。为了方便今后的分类搜索查询,确保唯一性。它的每条记录都是唯一不重复的值,类似:{9E4038C8-E965-45B1-BDE1-9F06E6B280A3}

    在设计视图中建立GUID列时,数据类型选择自动编号。同时,在下面常规选项卡中“字段大小”中选择了“同步复制 ID”,索引中选择了“有(无重复)”。

    c55f99467ee53bc76aa65bf2fafaeee2.png

    3、自定义获取GUID

    分享一个自定义的获取全球唯一识别码的GUID函数

    Private Type GUID

    Data1 As Long

    Data2 As Long

    Data3 As Long

    Data4(8) As Byte

    End Type

    Private Declare Function CoCreateGuid Lib "ole32.dll" ( _

    pguid As GUID) As Long

    Private Declare Function StringFromGUID2 Lib "ole32.dll" ( _

    rguid As Any, _

    ByVal lpstrClsId As Long, _

    ByVal cbMax As Long) As Long

    自定义一个函数

    Public Function GetNewGuild() As String

    Dim g As GUID

    Dim b() As Byte

    Dim lSize As Long

    Dim lR As Long

    CoCreateGuid g

    lSize = 40

    ReDim b(0 To (lSize * 2) - 1) As Byte

    lR = StringFromGUID2(g, VarPtr(b(0)), lSize)

    GetNewGuild = Left$(b, lR - 1)

    End Function

    展开全文
  • Oracle不能像MySQL那样设置主键自增,写入数据的时候需要用 <序列+触发器>的方式使数据表的一列或多列实现自增。两者可在视图中创建,也可以使用sql语句创建。 1、创建序列 dual 的sql语句: create ...
  • Oraclet的触发器

    2011-06-04 21:58:17
     触发器中不能使用数据库事务控制语句 COMMIT; ROLLBACK, SVAEPOINT 语句;  由触发器所调用的过程或函数也不能使用数据库事务控制语句;  触发器中不能使用LONG, LONG RAW 类型;  触发器内可以参照LOB ...
  • 我们能不能在程序把这个错误的SQL语句修正确呢? 我需要的正确的SQL:delete from brpms.TB_RPT_PLAN where UUID = ? 或者说润乾本身就可以通过配置来修正这个错误?还是我哪里配置错误了,请帮忙分析下,谢谢了! ...
  • 在数据表中操作数据:说明如何添加、修改和删除表的数据。说明如何使用 DataTable 事件来检查对表数据的更改。   创建和使用 DataView:描述如何创建 DataTable 数据的动态视图,这些视图通常用于数据绑定...
  • 2-5-3 在数据表输入数据 2-5-4 调整字段的列宽与行高 2-6 数据表编辑技巧 2-6-1 选取记录或字段数据 2-6-2 移动字段 2-6-3 复制与删除数据 2-6-4 隐藏字段与取消隐藏 2-6-5 冻结字段 2-7 关于表的二三事 2-...
  • sql总结.doc

    2019-08-27 22:08:51
    4、视图还可以被嵌套,一个视图中可以嵌套另一个视图。 (5) 视图的优缺点 优点:1.简单性。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使用户不必为以后...
  • 视图就是一个或多个的查询结果,它是一张虚拟的,因为它并不能存储数据视图的作用、优点: 限制对数据的访问 让复杂查询变得简单 提供数据的独立性 可以完成对相同数据的不同显示 创建、修改视图 create or...
  • 6.3.1 定义数据表的字段和主键 160 6.3.2 设置默认值 162 6.3.3 设置标识列 162 6.3.4 建立表与表之间的关系 163 6.3.5 创建索引 166 6.3.6 创建约束 167 6.3.7 设置数据表所在文件组 169 6.4 用T-SQL语言...
  • 6.3.1 定义数据表的字段和主键 160 6.3.2 设置默认值 162 6.3.3 设置标识列 162 6.3.4 建立表与表之间的关系 163 6.3.5 创建索引 166 6.3.6 创建约束 167 6.3.7 设置数据表所在文件组 169 6.4 用T-SQL语言...
  • SELECT 语句的查询结果显示工作,可以直接对查询结果进行再操作,如 修改、插入行、删除行、提 交(将表格数据改变写入相应的数据库表中)、多功能拷贝、将选择的单元格数据导出为 XLS /CSV /INSERT SQL /...
  • 创建时,经常会创建该主键、外键、唯一约束、Check约束等  语法结构 create table 表名( [字段名] [类型] [约束] ……….. CONSTRAINT fk_column FOREIGN KEY(column1,column2,…..column_n) ...
  • SQL Server2005基础教程

    2012-07-10 21:30:58
     5.11 设置主键   5.12 创建关系  5.13 使用SQL语句ALTER TABLE  5.14 小结  第6章 创建索引和数据库关系图  6.1 什么是索引  6.2 确定是什么导致了好的索引   6.3 确定是什么导致了坏的索引   ...
  • 数据库资料

    2018-04-01 22:00:33
    主要包含最基础的数据库语句,很适合初学者,目标使用企业管理器创建数据库表设置表主键、外键和建立之间的关系为增加约束数据完整性 数据完整性 数据存放在表中数据完整性的问题大多是由于设计引起的” ...
  • sql试 题答案和试题

    2009-12-11 16:40:54
    9、视图是一种常用的数据对象,它是提供(1___)和(1___)数据的另一种途径,可以简化数据库操作,当使用多个数据表来建立视图时,表的连接不能使用(2___)方式,并且不答应该语句包括(3___)等要害字。...
  • 下面将介绍如何使用Hibernate Code Generation来产生数据库映射Java对象,首先要数据库创建,并设置号字段名和主键主键很重要,关于主键的选择建议你使用与业务无关的ID作为主键);打开Hibernate视图找到...
  • 12.4.1 在视图中使用order by 205 12.4.2 having子句中的逻辑 206 12.4.3 对列和分组函数进行排序 207 12.4.4 连接列 208 12.5 更多分组可能性 208 第13章 当一个查询依赖于另一个查询时 209 13.1 高级子查询...
  • 834.6.3 使用输入掩码 874.7 使用Northwind Traders示例数据库 884.8 向现有的数据库添加一个新表 904.8.1 设计Personnel Actions表 914.8.2 创建Personnel Actions表 934.8.3 在数据表视图中直接创建一个表 ...
  • 834.6.3 使用输入掩码 874.7 使用Northwind Traders示例数据库 884.8 向现有的数据库添加一个新表 904.8.1 设计Personnel Actions表 914.8.2 创建Personnel Actions表 934.8.3 在数据表视图中直接创建一个表 ...
  • 834.6.3 使用输入掩码 874.7 使用Northwind Traders示例数据库 884.8 向现有的数据库添加一个新表 904.8.1 设计Personnel Actions表 914.8.2 创建Personnel Actions表 934.8.3 在数据表视图中直接创建一个表 ...
  • 834.6.3 使用输入掩码 874.7 使用Northwind Traders示例数据库 884.8 向现有的数据库添加一个新表 904.8.1 设计Personnel Actions表 914.8.2 创建Personnel Actions表 934.8.3 在数据表视图中直接创建一个表 ...
  • 834.6.3 使用输入掩码 874.7 使用Northwind Traders示例数据库 884.8 向现有的数据库添加一个新表 904.8.1 设计Personnel Actions表 914.8.2 创建Personnel Actions表 934.8.3 在数据表视图中直接创建一个表 ...
  • 834.6.3 使用输入掩码 874.7 使用Northwind Traders示例数据库 884.8 向现有的数据库添加一个新表 904.8.1 设计Personnel Actions表 914.8.2 创建Personnel Actions表 934.8.3 在数据表视图中直接创建一个表 ...
  • 834.6.3 使用输入掩码 874.7 使用Northwind Traders示例数据库 884.8 向现有的数据库添加一个新表 904.8.1 设计Personnel Actions表 914.8.2 创建Personnel Actions表 934.8.3 在数据表视图中直接创建一个表 ...
  • 834.6.3 使用输入掩码 874.7 使用Northwind Traders示例数据库 884.8 向现有的数据库添加一个新表 904.8.1 设计Personnel Actions表 914.8.2 创建Personnel Actions表 934.8.3 在数据表视图中直接创建一个表 ...

空空如也

空空如也

1 2 3 4 5 6
收藏数 107
精华内容 42
关键字:

在数据表视图中不能设置主键