数据库常用的数据类型和约束条件

news2024/9/22 7:24:55

文章目录

  • 一. 数据库常用的数据类型
    • 1. 数字类型
      • 1.1 整数类型:INT(m)和BIGINT(m)
      • 1.2 浮点类型:DOUBLE(m,n)
    • 2. 字符类型
      • 2.1 定长字符:CHAR(n)
      • 2.2 变长字符:VARCHAR(n)
      • 2.3 变长字符:TEXT(n)
    • 3. 日期类型
      • 3.1 语法格式:
      • 3.2 注意事项
  • 二. 约束条件
    • 1.主键约束(PRIMARY KEY)
      • 1.1 注意事项
      • 1.2 主键自增AUTO_INCREMENT
    • 2. 非空约束(NOT NULL)
  • 数据库相关文章链接

一. 数据库常用的数据类型

不同的数据库数据类型不完全一致

1. 数字类型

1.1 整数类型:INT(m)和BIGINT(m)

  • m:整数的位数
  • int(5):最大保存一个5位整数。
    • 若保存的数字为18,实际存的时候前面会补0:00018

1.2 浮点类型:DOUBLE(m,n)

  • m:数字的位数

  • n:小数部分的位数

  • m包含n

    • DOUBLE(5,3):该数字总共5位,其中有3位小数(意味着整数位2位)。

      最大个保存的数字为:99.999

    • 当保存的数字精度超过可保存精度时,会进行4舍5入

      例如person表中salary字段的类型:DOUBLE(7,4)

      INSERT INTO person (salary) VALUES(553.12568)
      实际salary保存的数字为:553.1257

    请添加图片描述

    • 当最大值需要进行四舍五入时,此时会报错:值超出了范围

请添加图片描述

2. 字符类型

2.1 定长字符:CHAR(n)

  • n表示长度,单位是字符。

  • name CHAR(10):name可以保存10个字符

  • 最大值为255个字符

  • 表中该字段保存数据时,实际在磁盘中保存数据一定是指定长度的字符。当实际保存的字符不足时会补充空格来达到长度。

    例如:name插入数据时为’张三’。那么实际存储时后面还有8个空格要占够10个字符。

  • 优点:每条记录占用的字节长度是固定的,这对于数据库扫描磁盘查询数据时效率高。

  • 缺点:浪费磁盘空间

2.2 变长字符:VARCHAR(n)

  • n表示长度,单位时字节。

  • 最大值为65535个字节

  • 表中该字段保存数据时,实际在磁盘中保存数据用多少占多少字节。

    例如:name VARCHAR(30)

    插入数据时name为’张三’,实际存储时磁盘中仅6个字节。

  • 优点:不浪费磁盘空间

  • 缺点:查询速度慢

2.3 变长字符:TEXT(n)

  • n表示长度,单位是字符
  • 最大值为65535

3. 日期类型

  • DATE:仅保存年月日
  • TIME:时分秒
  • DATETIME:保存年月日时分秒
  • TIMESTAMP:时间戳,记录UTC时间。自1970-01-01 00:00:00到表达的时间所经过的毫秒

  • 准备一张表测试各种类型

    CREATE TABLE userinfo(
    	id INT,
    	username VARCHAR(30),
    	gender CHAR(1),
    	birth DATETIME,
    	salary DOUBLE(7,2)
    )
    

3.1 语法格式:

  • 插入日期时,可以以字符串形式插入,格式为:“yyyy-MM-dd hh:mm:ss”
    MM表示两位数字的月,mm表示两位数字的分
INSERT INTO userinfo(id,username,gender,birth,salary)
VALUES (1,'张三','男','2001-02-03 12:22:55',5000.99)

3.2 注意事项

  • 插入日期时,如果类型为DATETIME,插入字符串中可以不指定时分秒

    INSERT INTO userinfo(id,username,gender,birth,salary)
    VALUES (2,'李四','女','1998-08-24',6000)
    此时时分秒都为0
    

请添加图片描述

  • DATETIME类型插入数据时不能忽略年月日

    INSERT INTO userinfo(id,username,gender,birth,salary)
    VALUES (3,'王五','男','12:15:32',5000)
    会报错,DATETIME字段不能只插入时分秒
    

请添加图片描述

  • 插入DOUBLE值时精度超过部分会四舍五入,整数部分若超过长度则会报错

    INSERT INTO userinfo(id,username,gender,birth,salary)
    VALUES (3,'王五','男','1985-06-01 12:15:32',100000)
    

二. 约束条件

可以对表添加约束条件,这样一来仅当满足约束条件的操作才可以进行。这样做可以更好的为我们的业务服务,保证数据库的操作是服务业务要求的。

1.主键约束(PRIMARY KEY)

  • 主键的特点:非空且唯一
  • 符合该特点的值才可以用来标识表中唯一的一条记录。
  • 通常一张表中的第一个字段都是主键字段,名字通常选取为:id
  • 主键约束一张表只能为一个字段添加

CREATE TABLE user1(
                    id INT PRIMARY KEY,
                    name VARCHAR(30),
                    age INT(3)
);

INSERT INTO user1(id,name,age) VALUES (1,'张三',22)
  INSERT INTO user1(id,name,age) VALUES (2,'李四',33)

1.1 注意事项

  • 主键字段不能插入重复的值

请添加图片描述

  • 主键字段不能插入NULL值

请添加图片描述

  • 不能修改重复的值

请添加图片描述

  • 不能修改为NULL

1.2 主键自增AUTO_INCREMENT

具体主键约束的字段通常会配合自增(AUTO_INCREMENT)使用 —id自增

  • 将字段定义为主键约束时,同时指定:AUTO_INCREMENT

    CREATE TABLE user2(
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(30),
        age INT(3)
    );
    
    也可以修改现有的表字段
    ALTER TABLE user1 CHANGE id id INT PRIMARY KEY AUTO_INCREMENT
    
  • 当主键字段具有自增功能时,插入数据则可以忽略主键字段的插入

 INSERT INTO user2 (name,age) VALUES('张三',22)
 INSERT INTO user2 (name,age) VALUES('李四',33)
  • 当显示的给自增字段插入NULL值时,该字段的值仍然会自增。(不推荐)
  INSERT INTO user2 (id,name,age) VALUES(NULL,'王五',36)

2. 非空约束(NOT NULL)

  • 被非空约束修饰的字段表中每条记录该字段必须有值,不能为NULL

CREATE TABLE user3(
	id INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(30) NOT NULL,
	age INT(3)
)

  • 非空约束在查看表结构时有所体现

    DESC user3
    

请添加图片描述

  • 不能将NULL值插入具有非空约束的字段中

    INSERT INTO user3 (name,age) VALUES(NULL,22)
    
  • 插入数据时不能忽略具有非空约束的字段(字段默认插入NULL)

    INSERT INTO user3(age) VALUES(33)
    

请添加图片描述

数据库相关文章链接

  1. 数据库基本概念介绍和MariaDB安装
  2. 数据库DDL数据定义语言
  3. 数据库DML数据操作语言
  4. 数据库DQL数据查询语言

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

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

相关文章

[附源码]Python计算机毕业设计Django美发店会员管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Web压测工具http_load原理分析

01、前言 http_load是一款测试web服务器性能的开源工具,从下面的网址可以下载到最新版本的http_load: http://www.acme.com/software/http_load/ 这个软件一直在保持着更新(不像webbench,已经是十年的老古董了。 webbench的源…

【Matplotlib绘制图像大全】(二十九):Matplotlib绘制热力图

前言 大家好,我是阿光。 本专栏整理了《Matplotlib绘制图像大全》,内包含了各种常见的绘图方法,以及Matplotlib各种内置函数的使用方法,帮助我们快速便捷的绘制出数据图像。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmMatp…

【经验分享】突然我的SM.MS的图床没法访问了(内附解决方法)

【经验分享】突然我的SM.MS的图床没法访问了(内附解决方法) 一大早写文章,发现Markdown里的图片全部都不能成功加载了,这个的确挺头疼的! 文章目录1 说一说现象2 简单排查一下3 查找解决方案4 实施解决方案5 总结6 更多…

高楼扔鸡蛋问题

1.对应letecode链接 高楼扔鸡蛋问题 2.题目描述 解题思路 题目是这样&#xff1a;你面前有一栋从 1 到 N 共 N 层的楼&#xff0c;然后给你 K 个鸡蛋&#xff08;K 至少为 1&#xff09;。现在确定这栋楼存在楼层 0 < F < N&#xff0c;在这层楼将鸡蛋扔下去&#xff…

Windows使用ssh协议远程连接ubuntu linux子系统

Windows使用ssh协议远程连接ubuntu linux子系统一、Windows远程连接ubuntu linux子系统二、开启ubuntu ssh服务三、获取ubuntu子系统的ip地址四、从windows上通过ssh连接到ubuntu子系统五、后记一、Windows远程连接ubuntu linux子系统 当我们在windows上安装好ubuntu子系统后&…

Linux命令总结详细

Linux命令总结详细1.前言2.基础知识2.1.执行命令格式2.2.帮助命令2.2.1.man命令2.3.部分快捷键2.3.1.Tab键2.3.2.Ctrlc组合键2.3.3.Ctrll组合键2.4.服务运行命令2.5.服务开机启动命令3.系统工作命令3.1.date时间命令3.1.1.命令解释3.1.2.命令参数3.1.3.案例3.2.reboot重启命令3…

ESP-01S使用AT指令连接阿里云

这次分享下ESP8266-01S使用AT指令连接阿里云&#xff0c;为了后面stm32--esp-01s-阿里云&#xff08;MQTT&#xff09;做铺垫 目录 步骤&#xff1a; 1.烧录阿里云固件 首先我们打开->安信可官网下载阿里云的固件&#xff0c;如图 1.1串口助手与esp-01s接线说明 注&am…

C语言——VS2019实用调试技巧

前言 要想成为一个合格的程序员&#xff0c;不仅仅要会写代码&#xff0c;更要会调试代码。咔咔一通敲代码&#xff0c;敲出了BUG&#xff0c;这时就分两种程序员&#xff0c;一种是质疑编译器的程序员&#xff0c;“什么&#xff1f;我写出了BUG&#xff0c;是不是机器出了问…

什么是混淆矩阵精度、召回率、准确性、F1 分数、FPR、FNR、TPR、TNR?

在你的数据科学生涯的开始,混淆矩阵会非常混乱,我们会有很多问题,比如什么时候使用精度?什么时候使用召回?在哪些情况下可以使用精度?因此,我将尝试在本博客中回答这些问题。 什么是混淆矩阵? 混淆矩阵是一种将预测结果和实际值以矩阵形式汇总的方法,用来衡量分类问题…

带头双向循环链表的实现

目录前言节点声明链表的初始化尾插打印链表头插尾删头删查找节点指定位置插入指定位置删除链表销毁前言 之前讲过单链表的实现&#xff0c;在实现的过程中&#xff0c;我们会发现每次删除或者在前面插入节点的时候&#xff0c;都要提前保存上一个节点的地址。这样做十分麻烦&a…

大一新生HTML期末作业个人介绍博客 使用html+css+javascript+jquery技术制作网页,含有动画,hover效果,含有表格布局

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

RV1126/RV1109 IPC板 + RK3568+鸿蒙AI视频解决方案

近年来&#xff0c;云终端产品在办公、教育、工控等行业被广泛应用&#xff0c;其具有实用性强、运维量小、数据存储更安全等特点&#xff0c;深受市场青睐。而面对复杂光照环境、人流与车流、多变人体动作等复杂场景&#xff0c;成像质量和画面效果以及细节呈现能力&#xff0…

Ansible自动化运维工具之playbook剧本编写(上)

内容预知 1.playbook的相关知识 1.1 playbook 的简介 1.2 playbook的 各部分组成 2. 基础的playbook剧本编写实例 实例1&#xff1a;playbook编写 apache的yum安装部署剧本 实例2&#xff1a;playbook编写nginx 的yum安装并且能修改其监听端口的剧本 3. playbook的定义、引…

网站如何快速变成灰色?,几行代码就搞定了!

当大家看到全站的内容都变成了灰色&#xff0c;包括按钮、图片等等。这时候我们可能会好奇这是怎么做到的呢&#xff1f;有人会以为所有的内容都统一换了一个 CSS 样式&#xff0c;图片也全换成灰色的了&#xff0c;按钮等样式也统一换成了灰色样式。但你想想这个成本也太高了&…

ThreadLocal笔记

并发的场景中&#xff0c;如果有多个线程同时修改公共变量&#xff0c;可能会出现线程安全问题&#xff0c;即该变量最终结果可能出现异常。 如果使用锁来保证资源隔离&#xff0c;会存在大量锁等待&#xff0c;会让响应时间延长很多。 ThreadLocal的核心思想是&#xff1a;共享…

云服务器centos8搭建网站 apache+php+mysql

由于对数据库容量要求比较大&#xff0c;年费用300左右的普通虚拟主机只能提供500M-1G的数据库&#xff0c;不能满足要求&#xff0c;故寻找到同样费用的云服务器单核、1G内存、系统盘50G&#xff0c;缺点是只提供基本系统centos&#xff0c;其他要自己搭建&#xff0c;经过一周…

05_openstack之Neutron网络管理

目录 一、环境准备 二、通过Horizon设置外部网络 1、创建外网网络 2、创建内网网络 3、创建路由 一、环境准备 部署openstack私有云环境&#xff1a;02_openstack私有云部署_桂安俊kylinOS的博客-CSDN博客 创建项目和用户&#xff1a;03_openstack之项目及用户管理_桂安…

fastTEXT论文解读并附实例代码

上一篇博文是入门使用级别&#xff0c;但对于面试来说则不够&#xff0c;毕竟领导一问三不知必定over&#xff0c;其基本原理还是要搞清楚&#xff0c;因而有此博文。paper在此 0&#xff0c;绪论 考虑紧致特征以减少存储空间&#xff0c;提出在PQ&#xff08; product quant…

三、CANdelaStudio入门-视图类型(View type)

本专栏将由浅入深的展开诊断实际开发与测试的数据库编辑,包含大量实际开发过程中的步骤、使用技巧与少量对Autosar标准的解读。希望能对大家有所帮助,与大家共同成长,早日成为一名车载诊断、通信全栈工程师。 本文介绍CANdelaStudio的各个视图类型:Standard View、Expert V…