MySQL(50)如何使用UNSIGNED属性?

在 MySQL 中,UNSIGNED 属性用于数值数据类型(如 TINYINTSMALLINTMEDIUMINTINTBIGINT),表示该列只能存储非负整数。使用 UNSIGNED 属性可以有效地扩展列的正整数范围,因为它不需要为负数保留空间。

1. 定义与用途

  • 定义UNSIGNED 属性用于指定数值列只能存储非负整数。
  • 用途:用于只需要存储正数的场景,如计数器、ID、库存数量等。

2. 范围

不同数据类型的 UNSIGNED 和未使用 UNSIGNED 时的取值范围如下:

  • TINYINT
    • 有符号(默认):-128 到 127
    • 无符号:0 到 255
  • SMALLINT
    • 有符号(默认):-32,768 到 32,767
    • 无符号:0 到 65,535
  • MEDIUMINT
    • 有符号(默认):-8,388,608 到 8,388,607
    • 无符号:0 到 16,777,215
  • INT
    • 有符号(默认):-2,147,483,648 到 2,147,483,647
    • 无符号:0 到 4,294,967,295
  • BIGINT
    • 有符号(默认):-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
    • 无符号:0 到 18,446,744,073,709,551,615

3. 示例代码

以下是一些示例代码,展示了如何使用 UNSIGNED 属性创建表,并插入和检索数据。

创建表

创建一个包含 UNSIGNED 属性的表:

CREATE DATABASE test_unsigned_db;
USE test_unsigned_db;CREATE TABLE inventory (item_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,item_name VARCHAR(50) NOT NULL,quantity INT UNSIGNED DEFAULT 0  -- 无符号整数,默认值为0
);
插入数据

插入一些数据:

-- 插入数据
INSERT INTO inventory (item_name, quantity) VALUES 
('Laptop', 50),
('Smartphone', 100),
('Tablet', 30);
检索数据

检索数据:

SELECT item_id, item_name, quantity FROM inventory;

检索结果:

+---------+-------------+----------+
| item_id | item_name   | quantity |
+---------+-------------+----------+
|       1 | Laptop      |       50 |
|       2 | Smartphone  |      100 |
|       3 | Tablet      |       30 |
+---------+-------------+----------+
插入负数数据(将失败)

尝试插入负数数据:

-- 尝试插入负数数据,将失败
INSERT INTO inventory (item_name, quantity) VALUES 
('Camera', -10);

执行结果:

ERROR 1264 (22003): Out of range value for column 'quantity' at row 1

4. 更复杂的示例:用户积分系统

以下是一个更复杂的示例,展示了如何在用户积分系统中使用 UNSIGNED 属性。

创建用户积分表
CREATE TABLE user_points (user_id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,points BIGINT UNSIGNED DEFAULT 0  -- 无符号大整数,默认值为0
);
插入用户数据

插入一些用户数据:

-- 插入用户数据
INSERT INTO user_points (username, points) VALUES 
('john_doe', 1000),
('jane_smith', 1500),
('alice_jones', 2000);
检索用户数据

检索用户数据:

SELECT user_id, username, points FROM user_points;

检索结果:

+---------+-------------+--------+
| user_id | username    | points |
+---------+-------------+--------+
|       1 | john_doe    |   1000 |
|       2 | jane_smith  |   1500 |
|       3 | alice_jones |   2000 |
+---------+-------------+--------+
尝试插入负数积分(将失败)

尝试插入负数积分:

-- 尝试插入负数积分,将失败
INSERT INTO user_points (username, points) VALUES 
('tom_hanks', -500);

执行结果:

ERROR 1264 (22003): Out of range value for column 'points' at row 1

5. 注意事项

  • 范围限制:由于 UNSIGNED 属性只允许非负数,试图插入负数会导致错误。
  • 自动递增:对于自动递增(AUTO_INCREMENT)的列,使用 UNSIGNED 属性可以有效地扩展 ID 的正整数范围。
  • 兼容性:确保业务逻辑不需要存储负数,否则使用 UNSIGNED 会导致数据插入失败。

小结

  • UNSIGNED 属性:用于指定数值列只能存储非负整数,适用于计数器、ID、库存数量等场景。
  • 扩展正整数范围:使用 UNSIGNED 可以有效地扩展列的正整数范围。
  • 实际应用:通过指定 UNSIGNED 属性,可以确保数据的正整数范围符合业务需求,提高数据完整性和一致性。

通过理解 UNSIGNED 属性的用途和特点,可以更好地设计和优化数据库表,确保数据插入操作符合业务需求。上述示例展示了如何在实际应用中使用 UNSIGNED 属性设计数据库表,并插入和检索数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/83417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是链游,链游系统开发价格以及方案

2025 Web3钱包开发指南:从多版本源码到安全架构实战 在数字资产爆发式增长的今天,Web3钱包已成为用户进入链上世界的核心入口。作为开发者,如何高效构建安全、跨链、可扩展的钱包系统?本文结合前沿技术方案与开源实践&#xff0c…

文件IO流

IO使用函数 标准IO文件IO(低级IO)打开fopen, freopen, fdopenopen关闭fcloseclose读getc, fgetc, getchar, fgets, gets, fread printf fprintfread写putc, fputc, putchar, fputs, puts, fwrite scanf fscanfwrite操作文件指针fseeklseek其它fflush rewind ftell 文件描述符 …

云原生DMZ架构实战:基于AWS CloudFormation的安全隔离区设计

在云时代,传统的DMZ(隔离区)概念已经演变为更加灵活和动态的架构。本文通过解析一个实际的AWS CloudFormation模板,展示如何在云原生环境中构建现代化的DMZ安全架构。 1. 云原生DMZ的核心理念 传统DMZ是网络中的"缓冲区",位于企业内网和外部网络之间。而在云环境…

一、虚拟货币概述

1. 定义 - 虚拟货币是一种基于网络技术、加密技术和共识机制的数字货币,它不依赖传统金融机构发行,而是通过计算机算法生成,例如比特币、以太坊等。 2. 特点 - 去中心化:没有一个单一的机构或个人控制整个虚拟货币系统&#xff0c…

Make All Equal

给定一个循环数组 a1,a2,…,ana1​,a2​,…,an​。 你可以对 aa 至多执行 n−1n−1 次以下操作: 设 mm 为 aa 的当前大小,你可以选择任何两个相邻的元素,其中前一个不大于后一个(特别地,amam​ 和 a1a1​ 是相邻的&a…

任务中心示例及浏览器强制高效下载实践

1. 效果展示 这里的进度展示,可以通过我们之前讲到的Vue3实现类ChatGPT聊天式流式输出(vue-sse实现) SSE技术实现,比如用户点击全量下载时,后台需要将PDF文件打包为ZIP文件,由于量较大,需要展示进度,用户点…

SpringBoot整合Flowable【08】- 前后端如何交互

引子 在第02篇中,我通过 Flowable-UI 绘制了一个简单的绩效流程,并在后续章节中基于这个流程演示了 Flowable 的各种API调用。然而,在实际业务场景中,如果要求前端将用户绘制的流程文件发送给后端再进行解析处理,这种…

2025 Java面试大全技术文章大纲

2025 Java面试大全技术文章大纲 基础篇 Java核心语法 数据类型与包装类自动装箱与拆箱原理String、StringBuffer、StringBuilder区别final关键字作用场景 面向对象特性 多态的实现机制抽象类与接口的异同设计模式:单例的七种写法泛型擦除与桥接方法 进阶篇 J…

Python aiohttp 全面指南:异步HTTP客户端/服务器框架

边写代码零食不停口 盼盼麦香鸡味块 、卡乐比(Calbee)薯条三兄弟 独立小包、好时kisses多口味巧克力糖、老金磨方【黑金系列】黑芝麻丸 边写代码边贴面膜 事业美丽两不误 DR. YS 野森博士【AOUFSE/澳芙雪特证】377专研美白淡斑面膜组合 优惠劵 别光顾写…

归并排序:高效稳定的分治算法

归并排序 归并排序采用分治策略实现稳定排序&#xff0c;其核心思想是将序列递归分解后进行有序合并。 def merge_sort(arr):if len(arr) < 1:return arrmid len(arr) // 2left merge_sort(arr[:mid])right merge_sort(arr[mid:])result []i j 0while i < len(le…

go语言基础|slice入门

slice slice介绍 slice中文叫切片&#xff0c;是go官方提供的一个可变数组&#xff0c;是一个轻量级的数据结构&#xff0c;功能上和c的vector&#xff0c;Java的ArrayList差不多。 slice和数组是有一些区别的&#xff0c;是为了弥补数组的一些不足而诞生的数据结构。最大的…

网络攻防技术九:网络监听技术

文章目录 一、网络监听概述二、网络流量劫持三、数据采集与解析四、网络监听检测与防范1、检测实施监听主机2、防范网络通信被监听 一、网络监听概述 主要解决问题&#xff1a;网络流量劫持、在监听点上采集并分析网络数据。主要涉及网卡数据采集、协议分析技术。 二、网络流量…

Cat.1与Cat.4区别及应用场景

Cat.1 和 Cat.4 都是 LTE&#xff08;4G&#xff09;网络中的终端设备类别&#xff0c;主要区别在于 数据传输速率、复杂度和功耗&#xff0c;这直接影响了它们的应用场景和成本。 以下是它们的主要区别&#xff1a; 数据传输速率 (核心区别)&#xff1a; Cat.1 (Category 1)&…

【后端高阶面经:架构篇】51、搜索引擎架构与排序算法:面试关键知识点全解析

一、搜索引擎核心基石&#xff1a;倒排索引技术深度解析 &#xff08;一&#xff09;倒排索引的本质与构建流程 倒排索引&#xff08;Inverted Index&#xff09;是搜索引擎实现快速检索的核心数据结构&#xff0c;与传统数据库的正向索引&#xff08;文档→关键词&#xff0…

深度学习入门:从零搭建你的第一个神经网络

深度学习入门&#xff1a;从零搭建你的第一个神经网络 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 深度学习入门&#xff1a;从零搭建你的第一个神经网络摘要引言第一章&#xff1a;神经网络基础原理1.1 神经元…

Hadoop 3.x 伪分布式 8088端口无法访问问题处理

【Hadoop】YARN ResourceManager 启动后 8088 端口无法访问问题排查与解决(伪分布式启动Hadoop) 在配置和启动 Hadoop YARN 模块时&#xff0c;发现虽然 ResourceManager 正常启动&#xff0c;JPS 进程中也显示无误&#xff0c;但通过浏览器访问 http://主机IP:8088 时却无法打…

docker B站学习

镜像是一个只读的模板&#xff0c;用来创建容器 容器是docker的运行实例&#xff0c;提供了独立可移植的环境 https://www.bilibili.com/video/BV11L411g7U1?spm_id_from333.788.videopod.episodes&vd_sourcee60c804914459274157197c4388a4d2f&p3 目录挂载 尚硅谷doc…

鸿蒙OSUniApp微服务架构实践:从设计到鸿蒙部署#三方框架 #Uniapp

UniApp微服务架构实践&#xff1a;从设计到鸿蒙部署 引言 在最近的一个大型跨平台项目中&#xff0c;我们面临着一个有趣的挑战&#xff1a;如何在UniApp框架下构建一个可扩展的微服务架构&#xff0c;并确保其在包括鸿蒙在内的多个操作系统上流畅运行。本文将分享我们的实践…

Freemarker快速入门

Freemarker概述 FreeMarker 是一款 模板引擎&#xff1a; 即一种基于模板和要改变的数据&#xff0c; 并用来生成输出文本(HTML网页&#xff0c;电子邮件&#xff0c;配置文件&#xff0c;源代码等)的通用工具。 它不是面向最终用户的&#xff0c;而是一个Java类库&#xff0c…

操作系统:生态思政

操作系统&#xff1a;生态思政 操作系统&#xff08;OS&#xff09;作为数字世界的基石&#xff0c;其意义远超单纯的技术平台。它构建了一个包含开发者、用户、硬件厂商在内的复杂生态系统&#xff0c;其设计理念、运行规则与生态治理模式&#xff0c;无不深刻映射着特定的价…