首页 > 数据库 >SQL主键怎么使用,你会了吗?

SQL主键怎么使用,你会了吗?

时间:2023-08-03 18:04:29浏览次数:44  
标签:Customers SQL PRIMARY 主键 使用 TABLE NULL id

Primary Key 的重要性和使用方法

SQL主键怎么使用,你会了吗?_主键

SQL主键(Primary Key)是关系数据库中的一个重要概念,它用于唯一标识表中的每一行数据,并确保数据的完整性和一致性。本文将介绍SQL主键的定义、作用以及在数据库设计和查询中的使用方法。

Primary Key

主键是一列或一组列,用于唯一标识表中的每一行数据。主键有如下作用:

  1. 唯一标识数据:主键确保表中的每一行数据都具有唯一的标识符,避免了数据冗余和重复。
  2. 数据完整性:主键约束确保表中的主键列不包含空值(NULL),并且每个主键值都是唯一的。这样可以防止数据不完整或不一致的情况发生。
  3. 关系建立:主键可以用作与其他表之间建立关系的依据,实现表之间的连接和引用。

当主键包含多个字段时,又称为复合键(Composite Primary Key)。

注意事项

在设计主键时,应使用尽可能少的字段,这不但能减少存储空间,还能提升查询性能。主键包含的字段越少,所需要的存储空间就越小,就性能而言,更少的数据意味着更快速地处理。

SQL 规定,主键长度不能超过 900 个字节。Oracle 规定,主键不能超过 32 个字段。

创建主键

我们可以通过如下方法创建主键:

  1. 在创建表时定义主键,代码如下:
CREATE TABLE 表名 (
    列1 数据类型 PRIMARY KEY,
    列2 数据类型,
    ...
);
  1. 创建表后定义主键,代码如下:
ALTER TABLE 表名
ADD PRIMARY KEY (列1);

删除主键

使用下面的语句可以删除表的主键约束:

ALTER TABLE 表名 DROP PRIMARY KEY;

主键的约束和属性

主键可以具有以下约束和属性:

  • 唯一性约束(UNIQUE):主键的值必须是唯一的,不能重复。
  • 非空约束(NOT NULL):主键的值不能为NULL,确保数据完整性。
  • 自动递增属性(AUTO_INCREMENT):主键的值可以自动增长,简化插入操作。

主键使用原则

在使用主键时,我们可以遵循下列原则,提升数据库的性能,方便我们的使用:

  • 选择合适的列作为主键:主键应选择那些稳定、唯一且不可更改的列作为标识符。
  • 避免过度使用复合主键:复合主键由多个列组成,但过多的复合主键可能导致查询和维护复杂性增加。
  • 考虑性能因素:主键的选择和设计应考虑查询性能,尽量避免使用过长的列作为主键。
  • 处理主键冲突:在插入数据时,需要处理可能出现的主键冲突情况,如使用自动递增主键或手动处理。

使用示例

比如我们要创建一个Customers的表,包含id等字段,如下:

CREATE TABLE Customers (
    id      INT              NOT NULL   AUTO_INCREMENT,
    name    VARCHAR(20)      NOT NULL,
    age     TINYINT UNSIGNED NOT NULL,
    city    INT UNSIGNED     NOT NULL,
    Consumption amount      FLOAT       DEFAULT '0.0',
    country CHAR(3)          NOT NULL   DEFAULT '',
    email   VARCHAR(30)  UNIQUE  NOT NULL,
    PRIMARY KEY (id)
);

我们将id设置为了Customers的主键,并且将其设置为自增。

如果 Customers 表和 id 字段都已经存在,则可以使用 ALTER TABLE 命令添加主键,语法如下:

ALTER TABLE Customers ADD PRIMARY KEY (id);

注:只有在首次创建数据表时,那些被声明为不能包含 NULL 值的字段,才能使用 ALTER TABLE 命令添加为主键。

如果我们在创建表时,需要添加多个主键,语法如下:

CREATE TABLE Customers (
    id      INT              NOT NULL   AUTO_INCREMENT,
    name    VARCHAR(20)      NOT NULL,
    age     TINYINT UNSIGNED NOT NULL,
    city    INT UNSIGNED     NOT NULL,
    Consumption amount      FLOAT       DEFAULT '0.0',
    country CHAR(3)          NOT NULL   DEFAULT '',
    email   VARCHAR(30)  UNIQUE  NOT NULL,
    PRIMARY KEY (id, email)
);

上述语法即将idemail设置为主键。

如果 Customers 表已经存在,则可以使用下面的 SQL 语句在 id email字段上添加主键:

ALTER TABLE Customers
ADD CONSTRAINT PK_CUSTID PRIMARY KEY (id, email);

当我们要删除 Customers 表主键时,语法如下:

ALTER TABLE Customers DROP PRIMARY KEY;

总结

SQL主键是关系数据库中确保数据完整性和一致性的重要机制。通过为表中的每一行数据定义唯一的标识符,主键保证了数据的唯一性,允许有效地进行数据操作和查询。使用主键,可以建立表之间的关系,并提高数据库的性能和可维护性。因此,在数据库设计和查询过程中,合理定义和使用主键是至关重要的一步。


标签:Customers,SQL,PRIMARY,主键,使用,TABLE,NULL,id
From: https://blog.51cto.com/u_15640304/6951592

相关文章

  • jmeter自定义参数使用固定前缀
    使用元件随机变量参数填写方式若随机数取值为123生成值为:name_000000123若随机数取值为12312321生成值为:name_012312321......
  • mysql事务和索引详解
    mysql事务和索引详解1.事务注:事务就是一组操作的集合,成功一起成功,失败一起失败事务控制:开启事务:starttransaction;/begin;提交事务:commit;回滚事务:rollback;使用方法:首先graphTBid1[开启事务]-->id2{执行mysql}id2-->|语句全部执行成功|id3>提交事务]id2-->|语......
  • 在vue中使用Electron开发C/S架构中的C(客户端界面)
    Electron简介:Electron是利用web前端技术进行桌面应用开发的一套框架。我是用的nodejs版本(16.18.1)和npm版本(8.19.2):创建vue-electron项目,鄙人测试了两种方式创建vue-electron项目,如下所示:1、vue-cli-plugin-electron-builder插件方式1.全局安装vue-cli:  npminstall-g@vue/......
  • 在Volo.Abp微服务中使用SignalR
    假设需要通过SignalR发送消息通知,并在前端接收消息通知的功能创建SignalR服务在项目中引用abpadd-packageVolo.Abp.AspNetCore.SignalR在Module文件中添加对模块依赖[DependsOn(...typeof(AbpAspNetCoreSignalRModule))]publicclassIdentityApplication......
  • sqlserver没有足够的内存继续执行程序
      需求,导出的数据库表,数据生成的sql脚本很大运行sql脚本内存不足。 解决方法:一,通过sqlcmd工具来执行大的脚本1,用管理员身份打开命令行工具有些可能要进入到cdC:\ProgramFiles\MicrosoftSQLServer\100\Tools\Binn目录运行sqlcmd2,运行 sqlcmd-S.-Usa-P123......
  • 使用ELK搭建社工库
    ELK是什么东西?ELK是ElasticSearch、Logstash、Kibana三个应用的缩写。ElasticSearch简称ES,主要用来存储和检索数据。Logstash主要用来往ES中写入数据。Kibana主要用来展示数据。为什么用ELK?传统的社工库通常用MySQL数据库来进行搭建,在相当大的数据下检索效率非常低下。在这种关......
  • kibana4 的安装、配置和使用
        Kibana5都出来了......    简介kibana 是 Elastic.co 提供的个性化统计数据、图标展示页面,而 kibana4 则是一个全新的改版,与 kibana3 有着本质的不同kibana3 实质上是一组页面,通过 nginx 或 Apache 或其他任何一个服务器配置域名到目录的映射,实现访......
  • @Order 一个使用场景
    @order注解是spring-core包下的一个注解,@Order的作用是定义SpringIOC容器中Bean的执行顺序的优先级(这里的顺序也可以理解为存放到容器中的先后顺序)。遇到过使用@Order的场景:某个利用Redisincr自增编码,服务迁移,Redis数据没有维护好,导致自增的编码丢失,下一次自增又会从头开始,这......
  • FreePBX使用AMI接口给分机来电播放系统录音
    FreePBX使用AMI接口给分机来电播放系统录音这里可以预先制作好一段语音文件,将其上传到FreePBX系统录音中,通过AMI接口Playback给分机来电播放系统录音制作用于播放的语音文件准备好需要播放的语音文件,下面将准备的文本”欢迎您的来电,这是是xxx公司,这里能找到您需要的产品....“,我......
  • MySQL Workbench的使用教程
    MySQLWorkbench 是MySQLAB最近释放的可视数据库设计工具。这个工具是设计MySQL数据库的专用工具。MySQLWorkbench拥有很多的功能和特性;这篇由DjoniDarmawikarta 写的文章通过一个示例展现了其中的一些。我们将针对一个订单系统建立一个物理数据模型,这里的订单系统可以......