zoukankan      html  css  js  c++  java
  • 数据库操作

    数据库操作

    1、结构化查询语句分类

    名称解释命令
    DDL(数据定义语言) 定义和管理数据对象,如数据库、数据表等 CREATE、DROP、ALTER
    DML(数据操作语言) 用于操作数据库对象中所包含的数据 INSERT、UPDATE、DELETE
    DQL(数据查询语言) 用于查询数据库数据 SELECT
    DCL(数据控制语言) 用于管理数据库的语言,包括管理权限及数据更改 GRANT、commit、rollback

    ?>具体的数据库sql教程:(菜鸟教程)https://www.runoob.com/mysql/mysql-tutorial.html


    2、数据库列类型

    ?> 数值类型

    类型说明范围(有符号)范围(无符号)存储需求
    tinyint 非常小的数据 (-128,127) (0,255) 1字节
    smallint 较小的数据 (-32 768,32 767) (0,65 535) 2字节
    mediumint 中等大小的数据 (-8 388 608,8 388 607) (0,16 777 215) 3字节
    int 标准整数 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 4字节
    bigint 较大的整数 (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 8字节
    float 单精度浮点数 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 4字节
    double 双精度浮点数 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 8字节
    decimal 字符串形式的浮点数 依赖于M和D的值 依赖于M和D的值 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2

    ?>字符串类型

    类型大小用途
    CHAR 0-255 bytes 定长字符串
    VARCHAR 0-65535 bytes 变长字符串
    TINYBLOB 0-255 bytes 不超过 255 个字符的二进制字符串
    TINYTEXT 0-255 bytes 短文本字符串
    BLOB 0-65 535 bytes 二进制形式的长文本数据
    TEXT 0-65 535 bytes 长文本数据
    MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
    MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
    LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
    LONGTEXT 0-4 294 967 295 bytes 极大文本数据

    ?>日期和时间型数值类型

    类型大小 ( bytes)范围格式用途
    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 混合日期和时间值,时间戳

    ?> NULL值

    • 理解为 "没有值" 或 "未知值"

    • 不要用NULL进行算术运算 , 结果仍为NULL

    !>注意: char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。

    CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

    BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

    BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

    有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。


    3、数据字段属性

    UnSigned

    • 无符号的

    • 声明该数据列不允许负数 .

    ZEROFILL

    • 0填充的

    • 不足位数的用0来填充 , 如int(3),5则为005

    Auto_InCrement

    • 自动增长的 , 每添加一条数据 , 自动在上一个记录数上加 1(默认)

    • 通常用于设置主键 , 且为整数类型

    • 可定义起始值和步长

      • 当前表设置步长(AUTO_INCREMENT=100) : 只影响当前表

      • SET @@auto_increment_increment=5 ; 影响所有使用自增的表(全局)

    NULL 和 NOT NULL

    • 默认为NULL , 即没有插入该列的数值

    • 如果设置为NOT NULL , 则该列必须有值

    DEFAULT

    • 默认的

    • 用于设置默认值

    • 例如,性别字段,默认为"男" , 否则为 "女" ; 若无指定该列的值 , 则默认值为"男"的值

    以Navicat for MySQL为例:

     

     DROP TABLE IF EXISTS `sys_job`;
     CREATE TABLE `sys_job` (
       `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '岗位ID',
       `name` varchar(255) NOT NULL COMMENT '岗位名称',
       `enabled` bit(1) NOT NULL COMMENT '岗位状态',
       `job_sort` int(5) DEFAULT NULL COMMENT '排序',
       `is_deleted` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '逻辑删除 1(true)已删除, 0(false)未删除',
       `create_time` datetime NOT NULL COMMENT '创建日期',
       `create_by` varchar(20) NOT NULL COMMENT '创建人',
       `update_time` datetime NOT NULL COMMENT '更新时间',
       `update_by` varchar(20) NOT NULL COMMENT '更新人',
       `version` bigint(32) NOT NULL COMMENT '版本',
       PRIMARY KEY (`id`) USING BTREE,
       UNIQUE KEY `uniq_name` (`name`),
       KEY `inx_enabled` (`enabled`)
     ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='岗位';

    4、数据表的类型

    ?>设置数据表的类型

     CREATE TABLE 表名(
        -- 省略一些代码
        -- Mysql注释
        -- 1. # 单行注释
        -- 2. /*...*/ 多行注释
     )ENGINE = MyISAM (or InnoDB)
     ​
     -- 查看mysql所支持的引擎类型 (表类型)
     SHOW ENGINES;

    MySQL的数据表的类型 : MyISAM , InnoDB , HEAP , BOB , CSV等...

    常见的 MyISAM 与 InnoDB 类型:

    名称MyISAMInnoDB
    事务处理 不支持 支持
    数据行锁定 不支持 不支持不支持支持
    外键约束 不支持 支持
    全文索引 支持 不支持
    表空间大小 较小 较大,约2倍!

    经验 ( 适用场合 ) :

    • 适用 MyISAM : 节约空间及相应速度

    • 适用 InnoDB : 安全性 , 事务处理及多用户操作数据表

     

    ?>数据表的存储位置

    • MySQL数据表以文件方式存放在磁盘中

      • 包括表文件 , 数据文件 , 以及数据库的选项文件

      • 位置 : Mysql安装目录data下存放数据表 . 目录名对应数据库名 , 该目录下文件名对应数据表 .

    • 注意 :

      • * . frm -- 表结构定义文件

      • * . MYD -- 数据文件 ( data )

      • * . MYI -- 索引文件 ( index )

      • InnoDB类型数据表只有一个 *.frm文件 , 以及上一级目录的ibdata1文件

      • MyISAM类型数据表对应三个文件 

    ?>设置数据表字符集

    我们可为数据库,数据表,数据列设定不同的字符集,设定方法 :

    • 创建时通过命令来设置 , 如 : CREATE TABLE 表名()CHARSET = utf8;

    • 如无设定 , 则根据MySQL数据库配置文件 my.ini 中的参数设定

     

  • 相关阅读:
    多线程之 Final变量 详解
    多线程之 Volatile 变量 详解
    并发安全问题之HashMap
    探索设计模式目录
    MYsql 锁详解 锁 与索引的关系
    JVM GC 相关
    sql 注入 及 in 注入
    00
    03
    02
  • 原文地址:https://www.cnblogs.com/mmdz/p/15406633.html
Copyright © 2011-2022 走看看