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


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

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

    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)
      )
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

    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)
    
    • 1
    • 2

    3.2 注意事项

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

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

    请添加图片描述

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

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

    请添加图片描述

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

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

    二. 约束条件

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

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • 当主键字段具有自增功能时,插入数据则可以忽略主键字段的插入

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

    2. 非空约束(NOT NULL)

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

    CREATE TABLE user3(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	name VARCHAR(30) NOT NULL,
    	age INT(3)
    )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 非空约束在查看表结构时有所体现

      DESC user3
      
      • 1

    请添加图片描述

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

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

      INSERT INTO user3(age) VALUES(33)
      
      • 1

    请添加图片描述

    数据库相关文章链接

    1. 数据库基本概念介绍和MariaDB安装
    2. 数据库DDL数据定义语言
    3. 数据库DML数据操作语言
    4. 数据库DQL数据查询语言
  • 相关阅读:
    速览 ETHGlobal Async 黑客松决赛项目:DAO 治理隐私保护趋势涌现
    lnmp架构之mysql主从复制(二)
    ALSA project the C library reference (ALSA工程 C库参考说明)
    2023 年 Web 应用程序开发最佳技术堆栈
    qt+opengl(一)
    玩转数据可视化之R语言ggplot2:(十)坐标轴和刻度线设置1
    ssm日常项目中问题集合
    互联网后端技术大全!
    UE4和C++ 开发-常用的宏(二)UPROPERTY(类似于Unity中C#的特性[SerializeField])
    你不知道的Set集合
  • 原文地址:https://blog.csdn.net/aiheshuicxy/article/details/128162196