五、SQL–索引/约束⑤(主键约束)

作者: 小小一颗卤蛋 | 来源:发表于2020-04-25 08:02 被阅读0次

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

主键必须能够唯一标识一条记录,即主键字段中的值必须是唯一的,而且不能包含NULL 值。虽然一张表中可以有多个UNIQUE 约束和非空约束,但每个表中只能有一个主键约束。

在CREATE TABLE语句中定义主键约束:在字段定义后添加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表中:

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 的值,所以执行该语句后数据库系统会报出如下的错误信息:

违反了 PRIMARY KEY 约束"PK__T_Person__2E1BDC42"。不能在对象 "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))

若在创建表的时没有创建主键,可在后期进行添加。

为表添加主键的方式: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)

为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;

相关文章

  • 五、SQL–索引/约束⑤(主键约束)

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

  • SQL基础01

    什么是SQL SQL中常用的关键字 SQL中的语句的种类 SQL中约束 简单约束: 示例: 主键: 添加主键约束原...

  • 索引、视图

    索引 主键和UNIQUE约束字段会自动添加索引。 约束字段会自动添加索引。 因此根据主键查询效率较高。尽量根据主键...

  • 五、SQL–索引/约束④(check约束)

    CHECK约束会: 检查输入到记录中的值是否满足一个条件,如果不满足这个条件则对数据库做的修改不会成功。如,一个人...

  • 五、SQL—索引/约束①

    在数据库系统中解决问题的技术就是索引与约束。索引用来提高数据的检索速度约束则用来保证数据的完整性 索引 索引是建立...

  • 面试积累之数据库篇(六)

    事务的4大属性:原子性,隔离性,一致性,持久性 sql完整性约束:主键约束唯一约束检查约束外键约束默认约束 sql...

  • Oracle索引

    索引具有两个功能:强制实施主键约束和唯一约束、提高性能。 索引的必要性: 主键和具有唯一性约束的列都会自动...

  • 五、SQL–索引/约束②(非空约束)

    在定义数据表的时候,默认情况下所有字段都是允许为空值的,如果需要禁止字段为空,那么就需要在创建表的时候显示指定。指...

  • 五、SQL–索引/约束⑥(外键约束)

    引出:当一些信息在表中重复出现时,就要考虑要将它们提取到新的表中,并在源表中引用新创建的中的数据。 如:很多作者都...

  • mysql数据库遇到的问题

    1,添加主键:SQL PRIMARY KEY 约束PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必...

网友评论

    本文标题:五、SQL–索引/约束⑤(主键约束)

    本文链接:https://www.haomeiwen.com/subject/ifhhwhtx.html