精华内容
下载资源
问答
  • 创建主键 创建外键 创建约束

    千次阅读 2015-06-24 11:46:56
    创建表(包括创建主键,外键,非空列,唯一) **************** 创建主键(三种方法) **************** 创建学生表: 第一种: create table student (sno char(5) primary key,/*学号*/ /*可以直接指定主键*/ sname char...

    创建主键(三种方法)

    ****************

    创建学生表:

    第一种:

    create table student

    (sno char(5) primary key,/*学号*/ /*可以直接指定主键*/

    sname char(20) not null,/*姓名*/

    ssex char(3) not null,/*性别*/

    sage integer not null,/*年龄*/

    sdept char(15);/*系别*/

    第二种:

    create table student

    (sno char(5) not null,

    constraint pk_student   /*可以指定主键名称*/

    primary key (sno),

    sname char(20) not null ,/*非空,不可重复*/

    ssex char(3) not null,

    sage integer ,

    sdept char(15));

    第三种:

    创建课程表:

    create table course

    (cno char(5),/*课程号*/

    cname char(20) not null unique,/*课程名,非空,不可重复*/

    cpno char(5),/*前置课程号(学此课之前必修课)*/

    ccredit number);/*学分*/

    通过修改表,设置主键.

    alter table course

    add constraint pk_course

    primary key (cno);

    *************

    创建外键(3种方法)

    *************

    创建"学生-课程-成绩"表

    create table sc

    (sno char(5) constraint fk_student   /*第一种,写在属性定义里面的*/  /*可以指定外键名称,*/

    references student(sno),

    cno char(5),

    foreign key(cno) /*可省略外键名称*/

    references course(cno),

    grade number);

    **********

    第二种

    **********

     

    create table sc

    (sno char(5),

    constraint fk_student   /*第二种,写在属性定义外面的*/

    foreign key (sno)

    references student(sno),

    cno char(5),

    foreign key(cno)

    references course(cno),

    grade number);

    ***********

    第三种

    ***********

    alter table sc

    add constraint fk_student

    foreign key(sno)

    references student(sno);

     

    ****************************

    建好表之后,新增或修改,删除约束

    ****************************

    先用此语句查看某个表的所有约束:

    select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS from user_constraints WHERE TABLE_name=upper('&TABLE_Name');

    0.增加not null约束

    alter table student modify sname not null;

    1.修改null约束

    alter table student modify sname null;/*姓名可以为空*/

    2.增加主键约束

    alter table student

    add constraint pk_student

    primary key(id);

    3.删除主键约束

    先用此语句查看某个表的所有约束:

    select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS from user_constraints WHERE TABLE_name=upper('&TABLE_Name');

    这里要删除的是约束"fk_student"

    alter table drop constraint  fk_student;

    4.增加外键约束

    alter table sc

    add constraint fk_student

    foreign key(sno)

    references student(sno);

    5.删除外键约束

    需要知道要删除的外键名称,

    先用此语句查看某个表的所有约束:

    select TABLE_NAME,CONSTRAINT_NAME,SEARCH_CONDITION,STATUS from user_constraints WHERE TABLE_name=upper('&TABLE_Name');

    alter table drop constraint fk_student;

    6.添加unique约束

    alter table course modify cname unique;

    添加unique的同时,会自动创建一个相同名称的索引.

    7.取消unique

    alter table course

    drop constraint sys_c005472;

    8.删除索引

    查找要删除的索引名称

    运行此语句:

    select index_name,table_owner,table_name,tablespace_name,status from user_indexes order by table_name;

    然后运行

    drop index sys_coo5472;

     

    今天在对一个表,对其中一个属性,新建unique约束,

    但是提示:ora-02261:such unique or primary key already exists in the table

    原因是该属性已经是primary key了.

    如果该属性已经有unique约束,则不能赋予该属性primary key约束.

    1.一个表只能有一个primary key,可以有多个unique约束

    2.当创建primary key的时候,会同时建立一个索引,名字和primary key的名称相同.

    3.当某属性为primary key,会默认新增not null约束,当删除primary key后,not null属性取消.

    4.表的一个属性可以同时设定not null和primary key约束.

     

     

     

     

     

     

     

    /*撤消主键*/ alter table [Student] drop primary key (S_id)

    /*增加主键*/ alter table [Student] add primary key (S_id)

    展开全文
  • Kudu 创建主键

    千次阅读 2019-08-09 23:43:48
    Impala 操作/读写 Kudu,使用druid连接池 Kudu 原理、API使用、代码 Kudu Java API 条件查询 spark读取kudu表导出数据为parquet文件... Kudu 创建主键 每个Kudu 表必须设置Pimary Key(unique), 另外Kudu表...

     


    每个Kudu 表必须设置Pimary Key(unique), 另外Kudu表不能设置secondary index, 经过实际性能测试, 本文给出了选择Kudu主键的几个策略, 测试结果纠正了我之前的习惯认知.
    
    简单介绍测试场景: 表中有一个unqiue字段Id, 另外还有一个日期维度字段histdate, 有三种设置kudu PK的方法, 分别是:
    表设计方案1 (histdate, id)作为联合主键, 日期字段放在前. 
    表设计方案2 (id,histdate)作为联合主键, 日期字段放在后. 
    表设计方案3 (id)作为单字段主键.
    
    先给出测试数据:

    结论:
    1. 选择性强的字段(比如 id 字段) 应该放在PK清单最前面, 这个规则对查询性能影响最大. 
    2. PK清单中只加必要的字段, 越少越好.
    3. 如果查询针对PK中所有字段都加了条件, 其性能是最优的. 但只要有一个PK字段未加上条件, 就完全用不上PK索引,性能就很差. 
    4. where条件中各个字段条件的先后顺序并不关键. 
    5. Kudu表使用Java API Insert的速度还是很好的, 单线程达到了1万笔/秒多. Kudu Update 效率也很高, 实测对一个窄表做全字段update, 其速度达到了Insert速度的88%, 
       而vertica的update效率比insert差很多. 
    
    在测试之前的误区:
    误区1. (histdate,id)组合PK应该是最优的, 因为在数仓中经常按照日期做查询, 把日期放在PK清单最前面, 应该有助于提升查询性能, 结果发现无论是日期+id组合查询,
            还是id单独查询, 该方案性能都最差, 甚至不如完全不在PK清单中的 duplicated_id 的定位查询. 
    误区2. 即使给部分PK字段加上过滤条件, 查询也会利用上PK index, 结果证明是完全利用不上index.
    
    
    具体表结构:
    
    -- 下面三个表的 id 取值为: java.util.UUID.randomUUID().toString(), duplicated_id和id取值相同. 
    
    CREATE TABLE kudu_testdb.perf_test_t1
    ( 
    histdate    timestamp ENCODING BIT_SHUFFLE COMPRESSION LZ4,
    id    string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
    value int,
    duplicated_id    string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
    PRIMARY KEY (histdate,id)  
    ) 
    PARTITION BY HASH (histdate,id) PARTITIONS 2 
    STORED AS KUDU
    TBLPROPERTIES (
      'kudu.table_name' = 'testdb.perf_test_t1',
      'kudu.master_addresses' = '10.205.6.1:7051,10.205.6.2:7051,10.205.7.3:7051'
    );
    
    
    CREATE TABLE kudu_testdb.perf_test_t2
    ( 
    histdate    timestamp ENCODING BIT_SHUFFLE COMPRESSION LZ4,
    id    string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
    value int,
    duplicated_id    string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
    PRIMARY KEY (id,histdate)  
    ) 
    PARTITION BY HASH (id,histdate) PARTITIONS 2 
    STORED AS KUDU
    TBLPROPERTIES (
      'kudu.table_name' = 'testdb.perf_test_t2',
      'kudu.master_addresses' = '10.205.6.1:7051,10.205.6.2:7051,10.205.7.3:7051'
    );
    
    
    CREATE TABLE kudu_testdb.perf_test_t3
    ( 
    id    string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
    histdate    timestamp ENCODING BIT_SHUFFLE COMPRESSION LZ4,
    value int,
    duplicated_id    string ENCODING PLAIN_ENCODING COMPRESSION SNAPPY,
    PRIMARY KEY (id)  
    ) 
    PARTITION BY HASH (id) PARTITIONS 2
    STORED AS KUDU
    TBLPROPERTIES (
      'kudu.table_name' = 'testdb.perf_test_t3',
      'kudu.master_addresses' = '10.205.6.1:7051,10.205.6.2:7051,10.205.7.3:7051'
    );
    

     

     

     

     

    展开全文
  • mysql中创建主键的三种方式 方式一 给uid设置主键 CREATE TABLE user( uid INT PRIMARY KEY, uname VARCHAR(10), address VARCHAR(20) ) 方式二 给uid设置主键 CREATE TABLE user( uid ...

    mysql中创建主键的三种方式

    方式一

    给uid设置主键

    
    CREATE TABLE user(
       uid INT PRIMARY KEY,
       uname VARCHAR(10),
       address VARCHAR(20)
    )
    

    方式二

    给uid设置主键

    CREATE TABLE user(
       uid INT,
       uname VARCHAR(10),
       address VARCHAR(20),
       PRIMARY KEY(uid)
    )
    

    方式三

    给uid设置主键

    CREATE TABLE user(
     uid INT,
     uname VARCHAR(10),
     address VARCHAR(20)
    )
    ALTER TABLE user ADD PRIMARY KEY(uid);
    

    联合主键创建方式

    给uid和uname设置联合主键

    CREATE TABLE user(
    	uid INT,
    	uname VARCHAR(10),
    	address VARCHAR(20),
    	PRIMARY KEY(uid,uname)
    )
    

    删除主键约束

    ALTER TABLE USER DROP PRIMARY KEY;
    
    展开全文
  • Oracle创建主键的三种方式

    千次阅读 2021-03-05 10:11:58
    Oracle中创建主键,可以有几种方式。第一种,在建表的时候同时指定主键,SQL> create table t_pk_01 (id number, constraint pk_id...

    Oracle中创建主键,可以有几种方式。

    第一种,在建表的时候同时指定主键,

    SQL> create table t_pk_01 (id number, constraint pk_id_01 primary key(id));
    Table created.
    

    创建主键约束的同时,他会自动创建一个唯一索引,

    SQL> select table_name, constraint_name, constraint_type from user_constraints where table_name='T_PK_01';
    TABLE_NAME                     CONSTRAINT_NAME                C
    ------------------------------ ------------------------------ -
    T_PK_01                        PK_ID_01                       P
    
    
    SQL> select table_name, index_name, uniqueness from user_indexes where table_name='T_PK_01';
    TABLE_NAME                     INDEX_NAME                     UNIQUENES
    ------------------------------ ------------------------------ ---------
    T_PK_01                        PK_ID_01                       UNIQUE
    

    第二种,创建表,再alter table增加主键约束,

    SQL> create table t_pk_02 (id number);
    Table created.
    
    
    SQL> alter table t_pk_02 add constraint pk_id_02 primary key (id);
    Table altered.
    

    我们从10046来看下alter table到底做了什么,

    SQL> alter session set events '10046 trace name context forever, level 12';
    Session altered.
    
    
    SQL> alter session set tracefile_identifier='bisal';
    Session altered.
    
    
    SQL> alter table t_pk_02 add constraint pk_id_02 primary key (id);
    Table altered.
    
    
    SQL> alter session set events '10046 trace name context off';
    Session altered.
    
    
    SQL> select distinct(m.sid),p.pid,p.tracefile from v$mystat m,v$session s,v$process p where m.sid=s.sid and s.paddr=p.addr;
           SID        PID   TRACEFILE
    ---------- ----------- -------------------------------------------------------------------------------
           189         22   /u01/app/oracle/diag/rdbms/dcm/DCM/trace/DCM_ora_18653_bisal.trc
    

    从trace我们能看到,对T_PK_02加了share模式锁,指定nowait,先创建的约束,然后创建了唯一索引,

    ...
    LOCK TABLE "T_PK_02" IN SHARE MODE  NOWAIT
    ...
    alter table t_pk_02 add c
    ...
    update con$ ...
    ...
    insert into con$ ...
    ...
    CREATE UNIQUE INDEX "BISAL"."PK_ID_02" on "BISAL"."T_PK_02"("ID") NOPARALLEL
    

    第三种,分开创建主键约束和主键索引。

    主要有两个场景。

    (1) 当使用CTAS创建表时,

    SQL> create table t_pk_03 as select * from t_pk_01;
    Table created.
    

    主键约束并未带过来,

    SQL> select table_name, constraint_name, constraint_type from user_constraints where table_name='T_PK_03';
    no rows selected
    
    
    SQL> select table_name, index_name, uniqueness from user_indexes where table_name='T_PK_03';
    no rows selected
    

    此时如果表中存在很多的数据,直接使用方法2,可能会带来两个问题,

    1. 创建唯一索引的用时。

    2. 唯一索引允许包含空值,因为主键约束不允许空值,还需要判断字段是否为空的用时。

    对(1),从trace,我们可以看到,默认创建唯一索引的时候,并未指定online,因此用时取决于数据量。

    对(2),如果字段设置NOT NULL,应该不需要判断,如果没设置,则需要判断字段中是否含空值,还是取决于表的数据量。

    因此,可以选择先在线创建唯一索引,再增加主键约束,从trace能看到,此时增加主键约束的过程中,不会再操作索引,

    SQL> create unique index pk_id_03 on t_pk_03(id) online;
    Index created.
    
    
    SQL> alter table t_pk_03 add constraint pk_id_03 primary key (id);
    Table altered.
    

    (2) 往往在生产环境,数据表空间和索引表空间是分开的,如果采用第一种和第二种的方式,主键索引会创建在执行用户的默认表空间,很可能是数据表空间,因此分开创建,还可以在创建索引的时候,指定tablespace,明确索引表空间,

    SQL> create unique index pk_id_03 on t_pk_03(id) tablespace xxx;
    Index created.
    

    近期更新的文章:

    小白学习MySQL - 数据库软件和初始化安装

    小白学习MySQL - 闲聊聊

    Redis和Sentinel的安装部署和配置

    “火线”和“零线”

    通过索引提升SQL性能案例一则

    如何手动添加jar包到maven本地库?

    1元股权转让的一点思考

    如何打造一个经常宕机的业务系统?

    Linux恢复误删文件的操作

    Linux的scp指令使用场景

    Oracle处理IN的几种方式

    如何搭建一支拖垮公司的技术团队?

    IP地址解析的规则

    MySQL的skip-grant-tables

    国产数据库不平凡的一年

    Oracle要求顺序的top数据检索问题

    日常工作中碰到的几个技术问题

    了解一下sqlhc

    Oracle的MD5函数介绍

    Oracle 19c的examples静默安装

    sqlplus登录缓慢的解决

    VMWare 11安装RedHat Linux 7过程中碰到的坑

    COST值相同?是真是假?

    Oracle 11g的examples静默安装

    同名的同义词和视图解惑

    v$和v_$的一些玄机

    文章分类和索引:

    公众号700篇文章分类和索引

    展开全文
  • 创建主键约束

    2012-08-01 22:41:37
    一、在Table中创建主键约束 创建主键约束可以在创建表或修改表时进行创建 一个表只能有一个Primary Key约束,不能在主键内的任何列中输入NULL值。 if object_id('house')is not null drop table house create ...
  • ORALCE 创建主键&唯一约束同时也创建索引原理:主键和唯一约束都是限制表字段值不能重复,必须唯一的约束;当一个表中建有主键或唯一约束时,oracle会自动创建对应主键或唯一约束的索引,这索引是oracle自动...
  • sql语句创建主键

    千次阅读 2016-09-26 11:39:07
    对于有数据的表,在企业管理器里面创建索引时,容易...在已有表里创建主键:alter table t_inputdata add constraint PK_t_inputdata primary key(sysid,appsysid,areaid,siteid,varietyid,sysupday,priceid, pe
  • MySQL 创建主键,外键和复合主键的语句 作者: 字体:[增加 减小] 类型:转载 MySQL 创建主键,外键和复合主键的方法,需要的朋友可以参考下。 1.创建主键语法  ALTER TABLE table_name ...
  • SQLServer中创建主键的方法

    千次阅读 2019-09-16 19:21:45
    SQLServer中创建主键的方法 2018年04月07日 09:44:48乘舟御风阅读数 9607 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。 本文链接:...
  • oracle 建表时创建主键 create table student (id number constraint id_pri primary key, name1 varchar(8) ); 创建复合主键: create table teacher (id number, name1 varchar(8), constraint aba_pri ...
  • 创建主键报错一例

    千次阅读 2014-09-01 13:56:14
    大数据量创建主键报错:
  • Navicat Premium中Oracle创建主键自增 1.选中表进入设计,选择触发器, 触发器名称,混合不选,每行,出发前,插入时,启用 2.下面展示触发器代码。 // A code block BEGIN SELECT SEQ_EXAM_KNOWLEDGE_BASE....
  • 无主键mysql表创建主键

    千次阅读 2018-12-26 08:49:23
    那么,以前留下来的表需要重新建立主键,但是这里可能会遇到一些表,你无法选出一些字段组合,作为主键。那么这时该怎么办? 一般出现这种情况,首先你需要考虑:该数据表是否是分区表? 怎么查看是分区表还是非分区...
  • Oracle创建主键自增表

    2014-01-21 22:08:47
    --Oracle创建主键自增表 --1、创建表 Student create table Student(  id number NOT NULL primary key,  username varchar2(20) , /*主键,自动增加*/  password varchar2(20)  ); --2、创建自动增长...
  • SQL server 2008 创建主键为自增列的表

    千次阅读 2018-11-14 04:01:01
    SQL server 2008 创建主键为自增列的表
  • 分区表不建议创建主键的原因

    千次阅读 2017-06-14 17:31:06
    分区表不建议创建主键的原因 摘要: 分区表尽量不要建主键,因为建主键的同时会建一个唯一性的全局索引,在drop分区表时如果不指定update global indexes则 会使索引失效,导致数据无法入库。 如果非要建主键,...
  • MySQL如何创建主键 Alter table add PRIMARY KEY的用法和例子
  • 创建主键时,所对应的列如果没有索引,数据库默认会自动创建一个索引;如果对于列有索引,那么创建主键不会再创建索引。这里要注意,列值必须满足主键的要求(唯一,非空),简单测试如下: SQL> create table ...
  • 创建主键(三种方法) **************** 创建学生表: 第一种: create table student (sno char(5) primary key,/*学号*/ /*可以直接指定主键*/ sname char(20) not null,/*姓名*/ ssex char(3) ...
  • oracle中创建主键以及添加主键

    千次阅读 2016-07-04 12:05:49
    --创建主键表,用于更新 create   table   temprt( rd varchar2(18)  primary   key , id  int ); --将目的表的值插入到创建的表 insert   into   temprt  select   rowid,rownum  ...
  • ORACLE创建主键自增表

    千次阅读 2010-08-01 16:29:00
    --创建表,设置主键自增 Create Table stu( uerId NUMBER(4) Not Null Primary Key, username Varchar(20), userpass Varchar(20), email varchar2(30),... --创建主键自增序
  • 前几天在创建数据表时,想偷个懒,使用一个序列给两个表创建主键自增功能,结果。。。。。。情景:为宠物中心创建一个简单的数据库,要求如下:
  • MySQL如何创建主键,外键和复合主键

    千次阅读 2019-10-28 14:36:13
    1.主键语法 ①创建时:create table sc ( studentnoint, courseidint, scoreint, primary key (studentno) ); ②修改时:ALTER TABLE table_name ADD CONSTRAINT pk_name PRIMARY KEY(列名); 前提是原先没有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 341,298
精华内容 136,519
关键字:

创建主键