zoukankan      html  css  js  c++  java
  • mysql数据库表的类型介绍

    目录

    前言

    之前我们讲了下载安装数据库,还有如何卸载(虽然直接重装系统就好)

    那么现在让我们来讲讲

    """
    1、数据库与表的剩余操作
        编码配置、引擎介绍
    2、数据库字段的操作
    3、数据库的数据类型
    4、数据库字段的约束条件
    """
    

    数据库的配置

    通过配置文件统一配置的目的是统一管理

    • 服务端(mysqld)
    • 客户端(client)

    那么如果我们配置了mysqld(服务端)的编码为utf8,那么再创建的数据库,默认编码都采用utf8

    配置流程

    1. 在mysql安装目录下,创建文件----->my.ini

      ps : mac下配置文件名叫my.cnf

    2. 设置配置文件内容并保存

      [mysqld] #服务器配置
      port=3306    #可以修改数据库默认端口
      character-set-server=utf8 #编码格式
      collation-server=utf8_general_ci
      [client] #mysql再见的客户端叫[mysql],配置[client]即配置了[mysql],也配置了其他存在方式的客户端,比如Navicat可视化客户端
      default-character-set=utf8
      
    3. 重启数据库服务

    数据库修改信息

    修改字符编码

    • alter database 数据库名 charset=编码格式;

    用户操作(**********)

    为特定的数据库分配该数据库的操作权限的用户

    • grant 权限们 on 数据库.表 to 用户名@'主机名' identified by '密码';

      1. all:所有权限
      2. oldboy.*:表示oldboy数据库下所有表
      3. oldboy@'localhost':本机可以通过oldboy用户登录
      4. identified by 'Oldboy123':密码为Oldboy123
      • grant all on oldboy.* to oldboy@'localhost' identified by 'Oldboy123';

    撤销权限

    • revoke 权限1,权限2,...on 数据库名.表名 from 用户名@'主机名';

    删除用户

    • drop user 用户名@'主机名';

    数据库表的引擎:驱动数据的方式-优化

    前言:引擎是建表时候的规定,提供给表使用的,不是数据库。用于优化数据库模式


    展示引擎语句

    • show engines;
    # innodb(默认): 支持事务, 行级锁, 外键
    create table t11(id int)engine=innodb;
    
    # myisam: 查询效率要优于innodb, 当不需要支持事务, 行级锁, 外键, 可以通过设置myisam来优化数据库
    create table t12(id int)engine=myisam;
    
    # blackhole:黑洞,存进去的数据都会消失(可以理解不存数据)
    create table t13(id int)engine=blackhole;
    
    # memory:表结构是存储在硬盘上的,但是表数据全部存储在内存中
    create table t14(id int)engine=memory;
    

    数据库模式

    前言:mysql 5.7以后默认为安全模式


    5.6版本
    • 非安全模式:sql_model=no_engine_substitution
    • 安全模式:sql_model=strict_trans_tables
    # 查看当前数据库模式:
    show variables like "%sql_mode%"; # %匹配0~n个任意字符 => 模糊查询
    
    # 临时设置为安全模式,服务重启后会被重置
    set global sql_mode="strict_trans_tables";  # 在root用户登录状态下
    # 在设置后,quit断开数据库连接后(服务器不重启)就会进入安全模式
    
    # 安全模式下,非安全模式下sql执行的警告语句,都会抛异常
    create table t1(name char(2));
    insert into t1 values ("ab") # 正常
    insert into t1 values ("guapi") # 错误 Data too long for column 'name' at row 1
    

    mysql支持的数据类型

    数据类型


    • 数据类型表
    类型 大小 范围(有符号) 范围(无符号)unsigned约束 用途
    TINYINT 1字节 (-128,127) (0,255) 小整数值
    SMALLINT 2字节 (-32768,32767) (0,65535) 大整数值
    MEDIUMINT 3字节 (-8388608,8388607) (0,16777215) 大整数值
    INT或INTEGER 4字节 (-2147483648,2147483 647) (0,4294967295) 大整数值
    BIGINT 8字节 (-9233372036854775808,9223372036854 775807) (0,18446744073709551 615) 极大整数值
    FLOAT 4字节float(255,30) (-3.402823466E+38,-1.175494351E-38),0,(1.175 494351E-38,3.402823466351E+38) 0,(1.175494351E-38,3.402823466E+38) 单精度浮点数值
    DOUBLE 8字节double(255,30) (-1.7976931348623157E+308,-2.225073858 5072014 E-308),0,(2.2250738585072014E-308,1.7976931348623157E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精准浮点数值
    DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2double(65,30) 依赖于M和D的值 依赖于M和D的值 x小数值
    • 有符合的8位前面第一位是表示符号的,后边只能显示7位
    • 整数 int: create table 表 (id1 int(4),id2 int(11));
      • int默认是有符号的
      • int 默认11位 整数
      • 它能表示的数字的范围不被宽度约束#它只能约束数字的显示宽度
    • 整数 int: create table 表 (id1 int unsigned,id2 int); #unsigned 指定取除int符号
    • 小数 float: create table 表 (f1 float(5,2),d1 double(5,2)); #float单精度浮点数值 #double双精度浮点数值 (5,2)整数,小数范围限制
    • 小数 float: create table 表 (f1 float,d1 double); 默认值
    • 小数 float: create table 表(d1 decimal,d2 decimal(25,20));#decimal 小数值 默认与指定(25,20)

    字符串类型


    • 字符串类型表
    类型 大小 用途
    CHAR 0-255字节 定长字符串
    VARCHAR 0-65535 字节 变长字符串
    TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
    TINYTEXT 0-255字节 短文本字符串
    BLOB 0-65 535字节 二进制形式的长文本数据
    TEXT 0-65 535字节 长文本数据
    MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
    MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
    LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
    LONGTEXT 0-4 294 967 295字节 极大文本数据
    • 定长单位 char
      • char:不可变,定长高效
    • 边长单位 varchar
      • varchar:变长省空间

    时间类型


    • 日期类型表
    类型 大小 (字节) 范围 格式 用途
    DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 年月日
    TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时分秒
    YEAR 1 1901/2155 YYYY 年份值
    DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 年月日时分秒
    TIMESTAMP 4 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳
    • 日期类型

      • year:年: yyyy(1901/2155)

      • date:年-月-日 yyyy-MM-dd(1000-01-01/9999-12-31)

      • time:时:分:秒 HH:mm:ss

      • datetime:yyyy-MM-dd HH:mm:ss(1000-01-01 00:00:00/9999-12-31 23:59:59)

      • timestamp:yyyy-MM-dd HH:mm:ss(1970-01-01 00:00:00/2038-01-19 ??)

        • 不赋值会有当前系统时间
      • now()函数现在时间

    ENUM | SET类型


    • 类型表
    类型 大小 用途
    ENUM 对1-255个成员的枚举需要1个字节存储; 对于255-65535个成员,需要2个字节存储; 最多允许65535个成员。 单选:选择性别
    SET 1-8个成员的集合,占1个字节 9-16个成员的集合,占2个字节 17-24个成员的集合,占3个字节 25-32个成员的集合,
    占4个字节 33-64个成员的集合,占8个字节 多选:兴趣爱好
    • create table 表(name char(12),gender ENUM('male','female'),hobby set('抽烟','喝酒','烫头','洗脚'));
    • insert into t12 values('gandan','不详','抽烟,喝酒,洗脚,洗脚,按摩');
  • 相关阅读:
    Linux初识(命令, 文件, 系统管理)
    【JavaScript学习整理】DOM对象(location history screen navigator)
    Charles进行HTTPS抓包(iOS为例)
    【JavaScript学习整理】js基础
    【css学习整理】浮动,清除
    【css学习整理】css基础(样式,语法,选择器)
    【html学习整理】meta,img,表格,表单
    【LeetCode】无重复字符的最长子串
    【html学习整理】常用标签
    【LeetCode】种花问题
  • 原文地址:https://www.cnblogs.com/ledgua/p/11574914.html
Copyright © 2011-2022 走看看