SQL中的PRIMARY KEY, UNIQUE KEY, FOREIGN KEY。

PRIMARY KEY与UNIQUE KEY的作用

共同作用是为了约束字段/建立索引/提高查询效率

mysql PRIMARY KEY的属性:主键具有唯一性:是指一张表里只能有一个主键;

主键作用:主键primary key是为了唯一标识一个字段,使其唯一且不能为NULL,自动生成索引;

隐含定义:如果这些列没有被明确地定义为NOT NULL,MySQL会隐含地定义这些列。

主键其实也是索引,甚至在MySQL的术语里面“键”就等于“索引”,

UNIQUE KEY的属性:唯一性:定义了UNIQUE约束的字段中不能包含重复值,

可为空:在UNIQUE约束的字段上可以包含空值.

扩展:unique就是唯一,当你需要限定你的某个表字段每个值都唯一,没有重复值时使用.

比如说,如果你有一个person_Info表,并且表中有个身份证的column,那么你就可以指定该字段unique.

关系:

主键=NOT NULL +UNIQUE键的结合;

NOT NULL和UNIQUE约束最好的结合。如果这些列没有被明确地定义为NOT NULL,MySQL会隐含地定义这些列。

区别:(1) 唯一性约束所在的列允许空值,但是主键约束所在的列不允许空值。

(2) 可以把唯一性约束放在一个或者多个列上,这些列或列的组合必须有唯一的。但是,唯一性约束所在的列并不是表的主键列。

(3) 唯一性约束强制在指定的列上创建一个唯一性索引。在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。

(4) 建立主键的目的是让外键来引用

(5) 一个表最多只有一个主键,但可以有很多唯一键

SQL 约束(Constraints)

SQL 约束用于规定表中的数据规则。

约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。

# SQL CREATE TABLE + CONSTRAINT 语法CREATE TABLE table_name

(

column_name1 data_type(size) constraint_name,

column_name2 data_type(size) constraint_name,

column_name3 data_type(size) constraint_name,

....

);

在 SQL 中,我们有如下约束:NOT NULL - 指示某列不能存储 NULL 值。

UNIQUE - 保证某列的每行必须有唯一的值。

PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

CHECK - 保证列中的值符合指定的条件。

DEFAULT - 规定没有给列赋值时的默认值。

SQL NOT NULL 约束

在默认的情况下,表的列接受 NULL 值。

NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

# 下面的 SQL 强制 "P_Id" 列和 "LastName" 列不接受 NULL 值:

CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

SQL UNIQUE 约束

UNIQUE 约束唯一标识数据库表中的每条记录。

UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。

PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。

请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

下面的 SQL 在 “Persons” 表创建时在 “P_Id” 列上创建 UNIQUE 约束:

CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

UNIQUE (P_Id)

)

SQL PRIMARY KEY 约束

PRIMARY KEY 约束唯一标识数据库表中的每条记录。

主键必须包含唯一的值。

主键列不能包含 NULL 值。

每个表都应该有一个主键,并且每个表只能有一个主键。

下面的 SQL 在 “Persons” 表创建时在 “P_Id” 列上创建 PRIMARY KEY 约束:

CREATE TABLE Persons

(

P_Id int NOT NULL,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255),

PRIMARY KEY (P_Id)

)

SQL FOREIGN KEY 约束

一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。

让我们通过一个实例来解释外键。请看下面两个表:

请注意,”Orders” 表中的 “P_Id” 列指向 “Persons” 表中的 “P_Id” 列。

“Persons” 表中的 “P_Id” 列是 “Persons” 表中的 PRIMARY KEY。

“Orders” 表中的 “P_Id” 列是 “Orders” 表中的 FOREIGN KEY。

FOREIGN KEY 约束用于预防破坏表之间连接的行为。

FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

下面的 SQL 在 “Orders” 表创建时在 “P_Id” 列上创建 FOREIGN KEY 约束:

CREATE TABLE Orders

(

O_Id int NOT NULL,

OrderNo int NOT NULL,

P_Id int,

PRIMARY KEY (O_Id),

FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)

)

mysql各种key_SQL中的各种键相关推荐

  1. 用同一uuid作为两个字段的值_分库设计中的主键选择

    在先前的文章<又拍网架构中的分库设计>中,我有提到过MySQL分库设计中的主键选择问题.在这篇文章里我想对这个问题进行展开讨论,以此作为对上一篇文章的一个补充. 前面提到又拍网采用了全局唯 ...

  2. mysql删除没有索引页_InnoDB中没有主键是如何运转的

    InnoDB聚簇索引的背景 在InnoDB索引页的物理结构中,"我"讲述了"InnoDB中一切都是索引".这意味着每个InnoDB引擎的表必须有一个" ...

  3. mysql 导入主键冲突_MySQL 处理插入过程中的主键唯一键重复值的解决方法

    本篇文章主要介绍在插入数据到表中遇到键重复避免插入重复值的处理方法,主要涉及到IGNORE,ON DUPLICATE KEY UPDATE,REPLACE:接下来就分别看看这三种方式的处理办法. IG ...

  4. mysql 所有外键_mysql中的外键

    mysql中的外键 1.默认的外键存在之后,会对数据进行约束. 1)约束1:如果子表中添加的数据,外键字段对应的数据如果在父表中不存在,那么添加失败. 有数据之后: 修改:可以修改跟外键不相关的任何字 ...

  5. MySQL中包含外键无法删除数据的解决方案

    1.在数据库连接信息加入以下代码,意思就是允许执行多语句查询. allowMultiQueries=true 2.在删除语句前面加上SET FOREIGN_KEY_CHECKS=0; 意思就是取消My ...

  6. mysql 主键值向后递增1_mysql中的主键递增

    CREATE TABLE customers ( cust_id int NOT NULL AUTO_INCREMENT, cust_name char(50) NOT NULL , PRIMARY ...

  7. MySQL中删除主键

    在MySQL中删除主键需要两步.  1.如果有auto_increment,先删除之:  2.删除主键约束 primary key. 例如:  1)假设我们有个表products.里面的pid为主键, ...

  8. mysql中的主键关键字_MySQL主键(PRIMARY KEY)

    "主键(PRIMARY KEY)"的完整称呼是"主键约束".MySQL 主键约束是一个列或者列的组合,其值能唯一地标识表中的每一行.这样的一列或多列称为表的主键 ...

  9. MySQL中的外键(foreign key)

    引言 在MySQL中,我们都对主键比较了解,知道主键的主要作用是唯一区分表中的各个行:但是,对于外键(foreign key) 比较陌生.那么什么是外键呢?外键的作用是什么呢? 一.外键.外键作用及其 ...

  10. mysql中外键设置级联删除_MySQL中利用外键实现级联删除、更新

    MySQL中利用外键实现级联删除.更新 MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在 创建索引的时候,可以指 ...

最新文章

  1. ​cglib实现动态代理构建带参数的代理实例
  2. Java实现定时调度的三种方法
  3. 通用PE工具箱安装图解
  4. java一年包装_浅谈Java的包装类
  5. linux用户命令权限管理,Linux命令-用户、权限管理
  6. 一文看懂深度学习——人工智能系列学习笔记
  7. MongoDB 4.6.1 c++ driver 编译
  8. 华强北耳机芯片检测软件_关于华强北耳机air pods pro
  9. ASP.NET生成静态页面的简单实现
  10. SQLite内部机制和新特性
  11. Dev--Config Files
  12. CNN--MINIST
  13. Promise详解(resolve,reject,catch)
  14. 我被感动了!世间自有真爱 - 林林与静静
  15. java: You aren‘t using a compiler supported by lombok, so lombok will not work and has been disabled
  16. 用Sendmail转寄信件
  17. C语言课程设计——停车场管理系统
  18. 《University Calculus》-chape12-偏导数-基本概念
  19. U8 业务单据编码 相关表
  20. 战争地带2100(Warzone 2100)

热门文章

  1. 你的网站上显示Alexa世界排名的代码(表)
  2. VMware11.1.2+centOS7.4虚拟机联网问题并设置静态IP
  3. 【Spring】13、使用Spring 3的@value简化配置文件的读取
  4. 蓝色清爽可用做排行的侧边列表滑动门代码
  5. DAX CRM 模块中需要注意的地方
  6. 只有 IE 才有的 Bug or feature?
  7. read 文件一个字节实际会发生多大的磁盘IO?
  8. 基于连接跟踪机制的状态防火墙的设计与实现
  9. 并发 (一)——基本概念
  10. Centos66 编译 Freeswitch mod_shout mp3录音模块