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

    2018-10-21 01:36:00
    第一范式要求每张表都要有主键,因此主键约束...从这种意义上来说,主键约束是UNIQUE 约束和非空约束的组合。虽然一张表中可以有多个UNIQUE 约束和非空约束,但是每个表中却只能有一个主键约束。在CREATE TABLE语句...

    第一范式要求每张表都要有主键,因此主键约束是非常重要的,而且主键约束是外键关联的基础条件。主键约束为表之间的关联提供了链接点。

    主键必须能够唯一标识一条记录,也就是主键字段中的值必须是唯一的,而且不能包含NULL 值。从这种意义上来说,主键约束是UNIQUE 约束和非空约束的组合。虽然一张表中可以有多个UNIQUE 约束和非空约束,但是每个表中却只能有一个主键约束。在CREATE TABLE语句中定义主键约束非常简单,和UNIQUE 约束和非空约束非常类似,只要在字段定义后添加PRIMARY KEY关键字即可。不过在DB2中,主键列也必须显式的定义为NOT NULL。下面的代码创建了员工信息表,并且将字段FNumber 设置为主键字段:

    
    MYSQL、MSSQLServer:
    
    CREATE TABLE T_Person (FNumber VARCHAR(20) PRIMARY KEY,FName VARCHAR(20),FAge INT) Oracle: CREATE TABLE T_Person (FNumber VARCHAR2(20) PRIMARY KEY,FName VARCHAR2(20),FAge NUMBER (10)) DB2: CREATE TABLE T_Person (FNumber VARCHAR(20) NOT NULL PRIMARY KEY,FName VARCHAR(20),FAge INT) 

    创建完T_Person表后,请执行下面的SQL语句预置一些初始数据到T_Person表中:

    
    INSERT INTO T_Person (FNumber, FName, FAge) VALUES ( "1" , "kingchou", 20); INSERT INTO T_Person (FNumber, FName, FAge) VALUES ( "2" , "stef", 22); INSERT INTO T_Person (FNumber, FName, FAge) VALUES ( "3" , "long", 26); INSERT INTO T_Person (FNumber, FName, FAge) VALUES ( "4" , "yangzk", 27); INSERT INTO T_Person (FNumber, FName, FAge) VALUES ( "5" , "beansoft", 26); 

    执行完毕后就能在表T_Person中的看到下面的数据:

    
    FNUMBER FNAME FAGE
    
    1 kingchou 20
    
    2 stef 22
    
    3 long 26 4 yangzk 27 5 beansoft 26 

    接着执行下面的SQL语句进行测试:

    
    INSERT INTO T_Person (FNumber, FName, FAge) VALUES ( "3" , "sunny", 22); 

    由于表T_Person 中已经存在FNumber 等于3 的值了,所以执行上边的SQL 语句后数

    据库系统会报出如下的错误信息:

    • 违反了 PRIMARY KEY 约束"PKT_Person2E1BDC42"。不能在对象 "dbo.T_Person" 中插入重复键。

    现在可以删除T_Person表了:

    
    DROP TABLE T_Person;
    

    除了这种由单一字段组成的主键之外,还可以由多个字段来组成主键,这样的主键被称为复合主键或者联合主键。复合主键的定义和复合唯一约束的定义类似,下面的SQL 语句用来创建员工信息表,并且将字段FNumber 和FName设置为复合主键:

    
    MYSQL、MSSQLServer:
    
    CREATE TABLE T_Person (FNumber VARCHAR(20),FName VARCHAR(20),FAge INT,CONSTRAINT pk_1 PRIMARY KEY(FNumber,FName)) Oracle: CREATE TABLE T_Person (FNumber VARCHAR2(20)FName VARCHAR2(20),FAge NUMBER (10) ,CONSTRAINT pk_1 PRIMARY KEY(FNumber,FName)) DB2: CREATE TABLE T_Person (FNumber VARCHAR(20) NOT NULL,FName VARCHAR(20) NOT NULL,FAge INT,CONSTRAINT pk_1 PRIMARY KEY(FNumber,FName)) 

    尽管在创建表的时候就定义主键是一个好的习惯,但是如果表创建了时候没有定义主键,那么也可以在以后添加主键,其添加方式与添加UNIQUE 约束类似,也就是使用ALTER TABLe语句。不过通过这种方式添加主键的时候有一个附加条件,那就是组成主键的字段必须包含NOT NULL约束。如果在没有添加非空约束的字段上创建主键,系统将会爆出错误信息。

    首先创建一个没有主键的T_Person 表,注意其中的字段FNumber 和FName 添加了非空约束:

    
    MYSQL、MSSQLServer:
    
    CREATE TABLE T_Person (FNumber VARCHAR(20) NOT NULL,FName VARCHAR(20) NOT NULL,FAge INT) Oracle: CREATE TABLE T_Person (FNumber VARCHAR2(20) NOT NULL,FName VARCHAR2(20) NOT NULL,FAge NUMBER (10)) DB2: CREATE TABLE T_Person (FNumber VARCHAR(20) NOT NULL,FName VARCHAR(20) NOT NULL,FAge INT) 

    可以执行下面的SQL语句为T_Person创建主键约束:

    
    ALTER TABLE T_Person ADD CONSTRAINT pk_1 PRIMARY KEY(FNumber,FName) 

    最后删除主键约束的方式与删除UNIQUE 约束以及CHECK 约束的方式相同,只要使

    用带有DROP子句的ALTER TABLE 语句即可:

    
    ALTER TABLE T_Person
    
    DROP CONSTRAINT pk_1; 

    这个语句在MYSQL中无效,在MYSQL中要执行下面的SQL语句才能删除主键:

    
    ALTER TABLE T_Person
    
    DROP PRIMARY KEY;

    转载于:https://www.cnblogs.com/yuyu666/p/9823697.html

    展开全文
  • 主键约束和唯一约束

    千次阅读 2019-03-07 21:30:59
    主键约束和唯一约束主键约束和唯一约束的区别普通索引和唯一索引Mysql中的索引普通索引(非唯一索引)唯一索引唯一索引主键约束的唯一索引唯一约束的唯一索引创建唯一索引删除主键约束和唯一约束自动创建的唯一索引 ...


    主键约束和唯一约束都会创建唯一索引

    主键约束和唯一约束的区别

    • 不同之处在于主键约束的索引键(唯一索引)在定义上不允许为NULL,而唯一约束的索引键(唯一索引)在定义上允许为NULL
    主键约束唯一约束
    所在的列不允许空值所在的列允许空值
    一个表上只能有一个主键约束一个表上可以有多个唯一约束或一个

    普通索引和唯一索引

    Mysql中的索引

    唯一索引和普通索引使用的结构都是B-tree,执行时间复杂度都是O(log n)。
    在这里插入图片描述

    1.Table
    表的名称。
    2.Non_unique
    如果索引不能包括重复词,则为0。如果可以,则为1。
    3.Key_name
    索引的名称。
    4.Seq_in_index
    索引中的列序列号,从1开始。
    5.Column_name
    列名称。
    6.Collation
    列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。
    7.Cardinality
    索引中唯一值的数目的估计值。
    8.Sub_part
    如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。
    9.Packed
    指示关键字如何被压缩。如果没有被压缩,则为NULL。
    10.Null
    如果列含有NULL,则含有YES。如果没有,则该列含有NO。
    11.Index_type
    用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。
    12.Comment
    多种评注

    普通索引(非唯一索引)

    普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列创建索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。

    唯一索引

    普通索引允许被索引的数据列包含重复的值。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。

    这么做的好处:一是简化了MySQL对这个索引的管理工作,这个索引也因此而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;如果是,MySQL将拒绝插入那条新记录。也就是说,唯一索引可以保证数据记录的唯一性。事实上,在许多场合,人们创建唯一索引的目的往往不是为了提高访问速度,而只是为了避免数据出现重复。

    唯一索引

    主键约束的唯一索引

    • 主键约束的索引键在定义上不允许为NULL

    1.在创建主键约束时,自动为主键列创建一个唯一索引,并且索引列不允许为null
    2.主键约束创建的唯一索引,可以是聚集索引(clustered),也可以是非聚集索引(nonclustered)

    id int not null primary key nonclustered;
    id int not null primary key clustered;
    

    唯一约束的唯一索引

    • 唯一约束的索引键上的NULL值是相等的,不允许重复的NULL值出现在索引键或其组合。

    1.在关系表中,唯一约束的列是唯一的,但是可以为null
    2.在唯一性约束中,null值是相等的
    3.如果唯一性约束的列是单列,那么只有一行数据列能够为null
    4.如果唯一性约束的列是多列,那么列的任意一种组合,不能相同
    5.在创建唯一性约束时,强制在指定的列上创建一个唯一性索引。在默认情况下,创建唯一性的非聚簇索引,通过clustered 或 nonclustered来指定创建的索引是聚集索引,还是非聚集索引

    id int unique nonclustered;
    id int unique clustered;
    

    创建唯一索引

    使用create unique index命令创建唯一索引

    create unique nonclustered index idx_unique_id on Test(name);
    create unique clustered index cidx_unique_id  on Test(name)
    

    在这里插入图片描述

    删除主键约束和唯一约束自动创建的唯一索引

    由于唯一索引是由主键约束或唯一性约束自动创建的,因此,必须删除约束,才能删除索引。

    alter table Test drop key  [PK__constraint_name]
    alter table Test drop key  [UQ__constraint_name]
    

    在这里插入图片描述

    展开全文
  • MySQL主键约束

    2020-11-23 08:44:38
    1、主键约束 特点: (1)一个表有且只能有一个主键约束 (2)主键约束意味着,唯一并且非空 (3)主键约束名PRIMARY (4)创建主键会自动创建对应的索引,同样删除主键对应的索引也会删除 2、在建表的时候如何指定...

    1、主键约束
    特点:
    (1)一个表有且只能有一个主键约束
    (2)主键约束意味着,唯一并且非空
    (3)主键约束名PRIMARY
    (4)创建主键会自动创建对应的索引,同样删除主键对应的索引也会删除

    2、在建表的时候如何指定主键约束

    create table 【数据库名.】表名称(
    	字段名1 数据类型  primary key,
    	字段名2 数据类型,
    	。。。。
    );
    

    例如:

    create table test.t_stu(
    	sid int primary key,
    	sname varchar(20),
    	gender char
    );
    
    mysql> desc t_stu;
    +--------+-------------+------+-----+---------+-------+
    | Field  | Type        | Null | Key | Default | Extra |
    +--------+-------------+------+-----+---------+-------+
    | sid    | int(11)     | NO   | PRI | NULL    |       |
    | sname  | varchar(20) | YES  |     | NULL    |       |
    | gender | char(1)     | YES  |     | NULL    |       |
    +--------+-------------+------+-----+---------+-------+
    3 rows in set (0.00 sec)
    
    insert into t_stu values(1,'张三','男'),(1,'李四','女');#错误的
    
    mysql> insert into t_stu values(1,'张三','男'),(1,'李四','女');
    ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'  违反了主键约束
    
    insert into t_stu values(1,'张三','男'),(2,'李四','女');
    

    3、建表后如何指定主键约束

    alter table 【数据库名.】表名称 add primary key(字段列表);
    
    create table test.t_stu(
    	sid int,
    	sname varchar(20),
    	gender char
    );
    
    alter table test.t_stu add primary key(sid);
    

    4、主键约束分为两种:
    (1)单列主键约束
    (2)复合主键约束
    建表时如何指定复合主键约束:

    create table 【数据库名.】表名称(
    	字段名1 数据类型,
    	字段名2 数据类型,
    	。。。。,
    	primary key(字段列表)
    );
    

    建表后如何指定复合主键约束:

    alter table 【数据库名.】表名称 add primary key(字段列表);
    
    create table t_course(
    	cid int primary key,
    	cname varchar(20)
    );
    
    #现在要求sid和cid的组合是主键,是唯一的
    create table xuanke(
    	sid int,
    	cid int,
    	score int,
    	primary key(sid,cid)
    );
    

    5、删除主键约束

    alter table 【数据库名.】表名称 drop primary key;
    
    展开全文
  • 主键约束----复合主键

    2020-01-12 18:33:29
    主键约束 (一)概述 1、关键字 :primary key 2、特点:增加主键约束的列(字段)的值必须是非空 + 唯一的,一个表只有一个主键约束 3、作用:保证表中不会出现两条无法区分的记录 4、要求:每一张表都必须有主键...

    主键约束
    (一)概述
    1、关键字 :primary key
    2、特点:增加主键约束的列(字段)的值必须是非空 + 唯一的,一个表只有一个主键约束
    3、作用:保证表中不会出现两条无法区分的记录
    4、要求:每一张表都必须有主键约束
    5、分类
    单列主键约束
    复合主键约束
    (二)使用主键约束
    1、创建主键约束
    (1)在建表时指定主键约束
    create table 【数据库名.】表名称(
    字段1 数据类型 primary key,
    字段2 数据类型,

    );

    create table 【数据库名.】表名称(
    字段1 数据类型,
    字段2 数据类型,
    …,
    primary key(字段1)
    );

    例如:
    create table dept(
    id int primary key,
    name varchar(20),
    description varchar(100)
    );

    create table dept(
    id int ,
    name varchar(20),
    description varchar(100),
    primary key(id)
    );
    mysql> desc dept;
    ±------------±-------------±-----±----±--------±------+
    | Field | Type | Null | Key | Default | Extra |
    ±------------±-------------±-----±----±--------±------+
    | id | int(11) | NO | PRI | NULL | |
    | name | varchar(20) | YES | | NULL | |
    | description | varchar(100) | YES | | NULL | |
    ±------------±-------------±-----±----±--------±------+

    insert into dept values(1,‘财务部’,‘发钱的’);
    insert into dept values(1,‘财务部’,‘发钱的’);在这里插入图片描述

    mysql> insert into dept values(1,‘财务部’,‘发钱的’);
    ERROR 1062 (23000): Duplicate entry ‘1’ for key ‘PRIMARY’

    (2)建表后指定主键约束
    create table dept(
    id int,
    name varchar(20),
    description varchar(100)
    );
    修改表结构:
    alter table dept add primary key(id);

    2、删除主键约束
    修改表结构
    alter table 表名称 drop primary key;

    例如:
    alter table dept primary key;

    3、复合主键----

    (1)在建表时指定主键约束
    create table 【数据库.】表名称(
    字段1 数据类型,
    字段2 数据类型,
    字段3 数据类型,
    …,

    primary key(字段列表)

    );

    说明:复合主键不能在列后面加,需要单独指定

    (2)建表后指定主键约束
    alter table 【数据库.】表名称 add primary key(字段列表,字段列表);

    例如:
    create table stu(
    sid int primary key, #学号
    sname varchar(20) #姓名
    );
    create table course(
    cid int primary key, #课程编号
    cname varchar(20) #课程名称
    );
    create table score(
    sid int, #学号
    cid int, #课程编号
    score int #对应的成绩
    );

    insert into stu values(1,‘张三’),(2,‘李四’);
    insert into course values(1001,‘java’),(1002,‘mysql’);
    insert into score values(1,1001,89),(1,1002,90),(2,1001,56),(2,1002,69);

    mysql> select * from stu;
    ±----±------+
    | sid | sname |
    ±----±------+
    | 1 | 张三 |
    | 2 | 李四 |
    ±----±------+
    2 rows in set (0.00 sec)

    mysql> select * from course;
    ±-----±------+
    | cid | cname |
    ±-----±------+
    | 1001 | java |
    | 1002 | mysql |
    ±-----±------+
    2 rows in set (0.00 sec)

    mysql> select * from score;
    ±-----±-----±------+
    | sid | cid | score |
    ±-----±-----±------+
    | 1 | 1001 | 89 |
    | 1 | 1002 | 90 |
    | 2 | 1001 | 56 |
    | 2 | 1002 | 69 |
    ±-----±-----±------+
    4 rows in set (0.00 sec)

    alter table score add primary key(sid,cid);
    在这里插入图片描述

    create table score(
    sid int, #学号
    cid int, #课程编号
    score int, #对应的成绩
    primary key(sid,cid)
    );

    变通成如下这种:
    create table score(

    id int,

    没有业务意义,只是唯一标记一行

    sid int,		#学号
    cid int,		#课程编号
    score int,		#对应的成绩
    

    primary key(id)

    );

    展开全文
  • MySQL||主键(primary key)及主键约束

    千次阅读 2019-07-24 22:43:02
    MySQL主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。 选取设置主键约束的字段 主键约束即在表中定义一个主键来唯一确定表中每一行...
  • 主键约束和唯一约束都会创建唯一索引,不同之处在于主键约束的索引键在定义上不允许为NULL,而唯一约束的索引键在定义上允许为NULL;唯一约束认为索引键上的NULL值是相等的,不允许重复的NULL值出现在索引键或其组合...
  • 分为单字段主键和多字段组合主键。 使用主键时,应注意:       1.每个表只能有一个主键       2.主键不能为NULL,不允许重复,必须唯一标识一条记录       3.联合主键需唯一且最小,即去掉联合主键中的...
  • MySQL 主键约束

    千次阅读 2019-01-30 17:00:19
    主键,又称住码,是表中一列或多列的组合主键要求主键列的数据唯一,并且不允许为空,主键能够唯一地表识表中的一条记录, 可以结合外键定义不同数据表之间的关系,并且可以加快数据库查询的速度。主键和 记录...
  • MySQL -- 主键约束

    千次阅读 2018-03-23 16:03:46
    MySQL – 主键约束  主键,是一个表中一列或者多列的组合,规定主键不能重复,也不能为空值,且每个表只能有一个主键,主键是唯一性索引的一种,但二者并不等同。 在MySQL的官方说明中,MySQL是这样处理主键...
  • 一张表里只能有一个主键约束,可以有多个唯一约束 主键约束的字段不能为null,而唯一约束的字段可以为null值 主键约束(PRIMARY KEY) 1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。 2) ...
  • 1、主键约束  表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束。  如果为表...
  • 约束类型按功能包括有:非空约束、主键约束、唯一约束、默认约束、外键约束、 【自动编号】AUTO_INCREMENT 起始值为1,增量为1。 自动编号的字段必须为数值型,若为浮点数小数位数必须为0。 自动编号必须和主键组合...
  • 主键约束和唯一约束都会创建唯一索引,不同之处在于主键约束的索引键在定义上不允许为NULL,而唯一约束的索引键在定义上允许为NULL;唯一约束认为索引键上的NULL值是等待的,不允许重复的NULL值出现在索引键或其组合...
  • primary key 主键约束 和 unique 唯一约束 相似但是还是有细微区别: unique在下面两个情况下可以使用: 1 unique约束可以多个列组合,一个表只可以有一个primary key 约束,而可以有多个unique约束。 2 ...
  • mysql 5.7 使用主键约束

    2017-10-14 11:12:10
    主键约束要求主键的数据唯一,并且不允许为空。主键能够唯一的标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。主键和记录之间的关系如同×××和人间的关系,他们之间...
  • sql主键约束

    千次阅读 2018-03-17 10:52:37
    数据字段属性:UNSIGNED :无...AUTO_INCREMENT :自动增长的,通常用于设置主键,且为整数类型,可定义起始值和步长;NULL 、NOT NULL :空 和 非空DEFAULT :默认的,用于设置默认值 MySQL主键(Primary Key)是唯...
  • 主键约束:primary key 外键约束:foreign key 默认约束:Default 检查约束:Check 非空约束:not null 某一列的值不能为空 创建表时添加约束 CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name为...
  • 关于主键约束enable和disable的问题

    千次阅读 2017-07-07 11:12:22
    其实对于主键约束而言,它是非空约束+唯一约束的组合。而自动创建的唯一索引,就是用来实现唯一性这一规则的。 当我们disable掉主键约束后,它会自动删掉当初自动创建的唯一索引。 同理,当我们enable主键后,它又...
  • MySQL之主键约束(PRIMARY KEY语句)

    千次阅读 2019-08-26 16:32:19
    MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可以强制表的实体完整性。主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表...
  • 什么是主键约束、外键约束、唯一约束 主键约束: 使用单列或者多列组合,表示每一条记录的唯一性,值不能为空 外键约束: 是为了加强数据表之间的关键的表中的单列或者多列值,必须依赖另外的表存在 唯一...
  • 主键约束相当于唯一约束+非空约束的组合主键约束列不允许重复,也不允许出现空值 如果是多列组合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。 每个表最多只允许一个主键,建立主键约束可以在...
  • 什么是约束? 数据库—由若干张数据表组成(理解为一个类库) 数据表—由行和列组成的一个二维数组(理解为一个类) 列—字段(理解为表中对象的一个属性) 行—理解为表中的一个对象 ...1.主键约束(PR...
  • 1.主键约束 PRIMARY KEY 每张表只能存在一个主键 主键保证了记录的唯一性 主键自动为not null create table Student( id int primary key, s_name varchar(20) ); 2.自增长 AUTO_INCREMENT AUTO_INCREMENT自动编号 ...
  • 设置表字段的主键约束(PRIMARY KEY,PK) 主键是表的一个特殊字段,能唯一标识该表中的每条信息。主键和记录的关系,如同身份证和人的关系。主键用来标识每个记录,每个记录的主键值都不同。身份证用来表明人的身份...
  • 1、主键约束 primary key 主键是每行的唯一标识符,仅仅通过它就能准确定位到一行,其中主键列在整个表中不能有重复,必须包含唯一的值(不能为NULL)。 alter table t_group  alter column id i...
  • Oracle主键约束的创建,添加和删除

    千次阅读 2014-07-04 18:10:58
    Oracle主键约束的创建,添加和删除  2010-06-27 10:40:16| 分类:learning | 标签:|字号大中小 订阅 oracle的主键约束添加删除 1、创建表的同时创建主键约束 一、无命名 create table accounts ( ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,625
精华内容 16,650
关键字:

组合主键约束