MySQL_01

数据库简介

理解

  • 用于持久化保存数据的管理软件

  • 保存数据技术

    • 1、将数据保存到内存中:变量、对象、数组、集合
      特点:易失性
    • 2、持久化保存技术:IO
      特点:可操作性比较差,效率低
    • 数据库:是一个存储数据的仓库本质上是一个文件系统、可以通过结构化查询语言简称sql对里面的数据进行CRUD(增删改查)

特点

  • 可以持久化保存数据
  • 保存数据是有组织、有结构
  • 以表的形式保存数据 方便操作
  • 提供丰富的sql语句 操作数据

数据库分类

  • 关系型数据库

    • Orcale、MySQL、SQLServer、DB2...

    • 存储数据是以行和列的形式存储、这一系统的行与列构成了表、若干张表构成库。数据与数据之间有关联关系

    • 特征

      • java类名对应数据库的表名
      • java类中的属性对应数据库表中字段
      • java类中的属性的类型对应数据库中表中字段类型
      • java类中创建一个对象对应数据库中表中一条数据
  • 非关系型数据库

    • redis、MongDB、HBase...

    • 应用场景

      • 数据要被查询
      • 数据不易修改
    • 数据是列、图片、文档、字符串..等形式进行存储、数据与数据之间没有任何关系

  • 区别

    • 关系型数据库将数据存储在硬盘、非关系型数据库存储内存中
    • 非关系检索效率要远远高于关系型数据库

数据库系统结构

  • DB:数据库,存储数据的容器
  • DBMS: 数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB
  • SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库软件特有的,数据库通用语言

SQL基本分类

结构化查询语言是一门特殊的编程语言

主要用途:用于对数据库中数据增删改查

DDL

  • 数据定义语言:对数据库的创建和删除 以及对数据库表的创建删除和修改

  • 关键字

    • create、drop、alter

DML

  • 数据库查询语言:对数据库表中数据 增、删、改、查

  • 关键字

    • insert、delete、update

DQL

  • 数据查询语言:对数据库表中数据查询

  • 关键字

    • select

DCL

  • 数据控制语言:指定用户 分配权限

  • 关键字

    • grant、reoke

数据类型

整型

  • tinyint/smallint/int/bigint

浮点型

  • float(n,m)/double(n,m)/decimal(n,m) 准确值 n和m可以省略
  • n:整数位+小数位的个数
  • m:小数位的个数

字符型

  • varchar(n) 变长字符串 n必选 保存字符串最大个数 性能低
  • char(n) 定义字符串 n可选 默认为1 保存字符最大个数 性能高

日期

  • date 日期 年月日

  • time 时分秒

  • datetime 日期 年月日时分秒

  • timestamp 时间戳 1970年开始 2037年12月31日 23:59:59

  • datetime和timesstamp区别

    • datetime最大表示日期是9999年12月31日 23:59:59、timestamp最大表示日期是 2037年12月31日 23:59:59
    • datetime默认是null、而timestamp默认值是当前日期

注意

  • mysql中没有boolean类型、通常我们会使用int类型来表示boolean类型 0:false 1:true

DDL

库的管理

  • 关键字

    • create创建 drop删除 alter修改 show展示 database数据库
  • 查看所有的数据库

    • show databases
  • 创建数据库

    • 语法一:create database 数据库名称;
    • 语法二:create database if not exists 数据库名称;
  • 删除数据库

    • 语法一:drop database 数据库名称
    • 语法二:drop database if exists 数据库名称;
  • 使用库

    • use 数据库名称;
  • 查看创建数据库语句

    • show create database 数据库名称;

表的管理

  • 关键字

    • show 展示 alter 修改 create 创建 table 表 drop 删除
  • 查看所有表

    • show tables;
  • 创建表

    • 语法一

      • create table 表名称(
        字段名称 数据类型.
        字段名称 数据类型,
        字段名称 数据类型
        ...
        );
    • 语法二

      • create table if not exists 表名称(
        字段名称 数据类型.
        字段名称 数据类型,
        字段名称 数据类型
        ...
        );
  • 删除表

    • drop table 表名称;
  • 查看表结构(查询表的列数和每列表对应的数据类型)

    • desc 表名称;
  • 查看创建表语句

    • show create table 表名称;

表的修改

  • 修改表名

    • alter table 表名称 rename 新名称;
  • 修改列名

    • alter table 表名称 change 原列名 新列名 数据类型;
  • 修改列类型

    • 方式一

      • alter table 表名称 modify 列名称 新类型;
    • 方式二

      • alter table 表名称 change 原列名 新列名 数据类型;
  • 添加列

    • alter table 表名 add 列名 数据类型;
  • 删除列

    • alter table 表名 drop 列名;

DML

关键字

  • 增insert 删delete 改update

插入

  • 不指定字段插入

    • insert into 表名 values(值1,值2,值3...);

    • 注意

      • 数值直接给值
      • 除数值之外的任意类型都需要加引号
      • 默认给所有的字段插入值
  • 指定字段插入

    • insert into 表名 (字段1,字段2,字段3,字段n) values(值1,值2,值3,值n);
    • 注意:字段和值必须一一对应
  • 方式三

    • insert into 表名 set 字段1=值1,字段2=值2,字段3=值3,字段N=值N
  • 批量插入

    • insert into 表名 (字段1,字段2,字段3,字段n) values(值1,值2,值3,值N),(值1,值2,值3,值n),(值1,值2,值3,值n)

删除

  • 删除单个

    • delete from 表名 [where 条件];
  • 删除所有

    • delete from 表名;
    • truncate table 表名;
  • delete删除和truncate删除的区别

    • 方式上:delete会逐行删除、truncate删除整张表、重新创建一个一模一样的表结构
    • 效率上:delete效率低、truncate效率高
    • 回滚上:delete删除数据可以回滚(找回来)truncate一旦删除数据将无法回滚
    • 主键自增序列上:delete删除会保留原有自增序列、truncate删除不会保留

修改

  • 修改单个

    • update 表名 set 字段1=值1,字段2=值2,字段3=值3,字段N=值N [where 条件]
  • 修改全部

    • update user set password =‘456‘,sex=‘男‘;

MySQL常见约束

概述

  • 用于限定当前列中的值 保证数据的准确性和有效性

常见约束

  • not null被约束的列不能为空
  • unique 唯一约束 被约束的列的值不允许重复 null可以有多个
  • primary key 主键约束 值不能重复,不能为null
    提高查询效率(主键约束默认回给当前列创建一个索引)一个表通常只有一个主键
  • default 默认约束 指定默认值
  • foreign key 外键约束 描述两个表之间的关系, 从一个表中(从表)某一列的值 来源于另一个表(主表)的主键值

除not null和default都支持表级约束

  • 表级约束可以同时约束多列、列级约束只能约束一列

添加约束

  • 方式一:创建表的时候添加约束
    create table person(
    字段名 字段类型 约束, #列级约束写法
    字段名 字段类型 约束
    )

  • create table person(
    字段名 字段类型 ,
    字段名 字段类型 ,
    #表级约束写法
    约束(约束的字段)
    )

  • 方式二:给已存在的表上添加约束(注意当前表中数据没有违反约束行为)
    alter table 表名 modify 字段名 字段类型 约束;

  • 添加主键自增约束:将主键的维护全交给数据进行管理

    • 要求当前列必须设置主键
    • 主键列必须是int类型
    • 自增量为1
    • create table person(
      字段名 primary key auto_increment,
      字段名 字段类型 约束
      )
  • 万能公式

    • alter table 表名 modify 字段名 字段类型 约束;

删除约束

  • 删除列级约束

    • alter table 表名 modify 列名 数据类型
  • 删除表级约束

    • 主键约束2步

      • 1-1 alter table 表名 drop primary key
      • 1-2 alter table 表名 modify 列名 数据类型
    • 删除唯一约束

      • alter table 表名 drop index 索引名称

MySQL_01

上一篇:【java】一种自动生成数据库文档的方法


下一篇:MySQL 8.0 for docker安装