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

主键必须能够唯一标识一条记录,也就是主键字段中的值必须是唯一的,而且不能包含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;

mysql主键约束代码_主键约束(示例代码)相关推荐

  1. python大作业代码_爬虫大作业(示例代码)

    1.选一个自己感兴趣的主题(所有人不能雷同). 每天都有接触各大平台推送的新闻,了解到了校园外的大小事.故此,对新浪新闻标题的关键字的爬取,看看最近发生的实时,也想比较下标题党还是和实际内容的差异. ...

  2. 体重测试java算法代码_标准体重计算示例代码

    package api.jisuapi.weight; import api.util.HttpUtil; import net.sf.json.JSONObject; public class Bm ...

  3. python实现杨辉三角思路_Python极简代码实现杨辉三角示例代码

    Python极简代码实现杨辉三角示例代码 杨辉三角,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列. 把每一行看做一个list,写一个generator,不断输出下一行的list ...

  4. python抠图精确到发丝_Python用5行代码实现批量抠图的示例代码

    前言 对于会PhotoShop的人来说,抠图是非常简单的操作了,有时候几秒钟就能扣好一张图.不过一些比较复杂的图,有时候还是要画点时间的,今天就给大家带了一个非常快速简单的办法,用Python来批量抠 ...

  5. python抠图_Python用5行代码实现批量抠图的示例代码

    前言 对于会PhotoShop的人来说,抠图是非常简单的操作了,有时候几秒钟就能扣好一张图.不过一些比较复杂的图,有时候还是要画点时间的,今天就给大家带了一个非常快速简单的办法,用Python来批量抠 ...

  6. templet 显示字段外键对应名_主外键和外键约束

    主外键和外键约束 主键 主键(primary key):一列(或一组列),其值能够唯一区分表中每个行 . 外键 外键(foreign key) 外键为某个表中的一列,它包含另一个表的主键值,定义了两个 ...

  7. mysql 主键 聚集索引_主键索引就是聚集索引吗?

    这个问题很刁钻! 答案是错的. 的确在mysql数据库innodb引擎里面,主键的确就是聚集索引. 但是myisam引擎里面主键也不是聚集索引. 另外在sql server中还可以显示的指定聚集索引. ...

  8. vscode中怎样格式化js代码_如何在Visual Studio代码(VSCode)中格式化代码

    回答(30) 2 years ago 对于那些想要自定义要格式化的JavaScript文件的人,可以使用 JSfiles 属性上的任何扩展名同样适用于HTML . { "beautify.o ...

  9. 史上最烂代码_历史上最大的代码库

    史上最烂代码 Here's a diagram of the biggest codebases in history, as measured by lines of code: 这是历史上最大的代 ...

最新文章

  1. cocos 射线检测 3D物体 (Sprite3D点击)
  2. MySQL数据库-理论基础
  3. python教程书籍-初学者最好的Python书籍列表
  4. hibernate的初次使用
  5. magento产品批量导出导入
  6. python交互模式下tab键自动补全
  7. Hadoop学习笔记(一):零Linux基础安装hadoop过程笔记
  8. 基于better-scroll实现的类似ios选择器
  9. linux shell ps kill 某个名字的所有进程
  10. javac编译java_使用javac编译java文件
  11. 用iSSH代替Mobile Terminal管理iOS
  12. CAD卸载/完美解决安装失败/如何彻底卸载清除干净cad各种残留注册表和文件的方法
  13. 基于光流和RNN的长视频微表情检测
  14. Ubuntu18.04搭建源码搜索引擎Opengrok
  15. SpringSecurity(安全)、Shiro简介
  16. 如何添加xp操作系统的打印服务器,xp系统添加局域网打印机的简单方法
  17. win10怎么玩经典扫雷?繁星软件园推荐大家试试Windows7Games吧,亲测好用的扫雷Win10电脑版下载!!!
  18. 全国大学生智能汽车大赛(二):电感采样、卡尔曼滤波、方向控制代码
  19. java 界面线性布局_Android用户界面设计:线性布局
  20. 第2期——WLAN射频和信道

热门文章

  1. c语言中strtod用法,strtod ( ) 和 atof ( )【C语言库函数源代码】
  2. JSON转义URL斜杠处理
  3. 手机版腐蚀rust_腐蚀Rust下载腐蚀Rust中文版下载-游迅网
  4. android应用开发-从设计到实现 2-5 图标的使用
  5. git修改本地分支名称和远程分支名称
  6. 简支梁挠度计算公式推导_挠度计算公式的基本推导
  7. 怎么学 JavaScript?
  8. leaflet 插件使用
  9. android中的计步问题及计步传感器分析
  10. 云服务器下载安装mongo数据库并远程连接详细图文版本(全)