MySQL

基本概念

1.什么是数据库(database)

保存数据的容器,通常是一个或者一组文件

2.为什么使用数据库? 

 把数据存储在程序中无法持久化数据

把数据直接存储在自己创建的文件当中有很大缺点

  • 数据量打的时候特别慢
  • 无法单独对一条数据进行操作,需要全部取出来,循环操作

3.如何操作数据库?

  • 通过一门语言专门操作数据库的语言----SQL

  • SQL(Structured Query Language),是一种专门用来操作数据的编程语言

  • Sql特点

    • 是很多数据库管理系统例如mysql,orcale等的通用语言

    • 简单易学,语句全都是由描述性极强的英语单词组成,且数目不多

    • 不区分大小写,与java一样使用;作为结束符

    • 使用--或者#添加注释

  • sql分类

    • DDL(data definition language)

      • 操作数据库和表

    • DML

      • 操作记录的增删改

    • DQL

      • 操作记录的查询

    • DCL

      • 操作用户的权限

    • TCL

      • 操作数据的事务安全

4.数据库分类 

  • 从数据存储结构上划分

    • 关系型数据库

      • 行结构,以行为主,一行代表一条数据

    • 非关系型数据库

      • 列结构,以列为主,一列代表一列数据

      • 字典结构,键值对存储数据

MySQL基本操作 

 1.安装

自行根据资料中提供的软件以及安装文档安装

2.操作 

  • 1.安装数据库管理系统(DBMS)这款软件,例如mysql

  • 2.登录数据库软件

    • cmd命令 mysql -u root -p

    • 图形化软件,例如navicat

  • 3.输入对应操作数据库的sql

基本SQL 

1.sql操作对象有哪些? 

数据库(dababase)

表(table)

  • 一个数据库中可以包含多张表,就像文件夹与文件的关系一样,因此真正负责保存数据的是表,但同一个库中表名字不能相同

行(row)

  • 表中的记录,一行就代表一条记录。一张表中可以有多行,有几行就代表该表中存了几条数据,就像Excel表与行的关系一样

列(column)

  • 列代表表中一部分数据,行由列组成,就像Excel行与单元格的关系一样

2.数据库 

  • create database [if not exists] 数据库名;

  • show databases;

  • use 数据库名;

  • drop database [if exists] 数据库名;

SHOW DATABASES;#查看全部数据库
CREATE DATABASE test84; #创建数据库
USE test84;#切换数据库
DROP DATABASE test84;#删除指定数据库

3.操作数据表 

 创建表之前

  • 创建表之前

    • 学会对数据进行分列

    • 学会指定列的数据类型

      • 整数类型

        • tinyint    (对应java byte)

        • int          (对应java int)

        • bigint       (对应java long)

      • 字符串类型

        • char      (对应 String)

        • varchar (对应 String,可变化,可变长字符串)

      • 浮点数类型(区别,精度,大小)

        • float      (对应 float)

        • double    (对应double)

        • decimal   (对应BigDecimal)

      • 时间类型(存储要和java对应)

        • date            (年与日)

        • time       (时分秒)

        • datetime   (年与日时分秒)

        • timestamp  (时间戳)

    • 学会给列指定长度

      • 数据类型的长度

        • 1. 字符型

          • char(n):最大长度为255个字符

          • varchar(n):最大长度为65535个字符(受字符编码影响)

        • 2.整数型

          • tinyint: 1字节,范围-128~127

          • int/integer: 4字节,范围-2147483648~2147483647

          • bigint: 8字节,范围-9223372036854775808~9223372036854775807

        • 3.浮点数型

          • float(n):4字节,n代表数字位数,总位数不超过24

          • double(n):8字节,n代表数字位数,总位数不超过53

          • decimal(m,d):m+2字节,m代表总长度,d代表小数位数,总位数不超过65

    • 学会给列指定约束(可以添加多个约束)

      • 1)主键

        • primary key

          • 给每一条记录增加唯一标识,非空且唯一

          • 自增 auto_increment

      • 2)唯一

        • unique

      • 3)非空

        • not null

      • 4)默认值

        • default

    • 学会给列添加注释

      • comment ' '

创建表 

建表之前先建模 (建模很重要,添加约束,设计要严谨,控制数据长度,添加注释)

create table 表名(
  列名 数据类型(长度) 约束条件 comment ' ',
  列名 数据类型(长度) 约束条件 comment ' ',
  .....

);
CREATE TABLE student(
  id INT(255) AUTO_INCREMENT UNIQUE COMMENT '序号',
  id_number VARCHAR(18) UNIQUE COMMENT '身份证号',
  studentname VARCHAR(255) NOT NULL COMMENT '学生姓名',
  age INT COMMENT '年龄',
  birth DATE COMMENT '生日',
  gender TINYINT(1) COMMENT '性别',
  height DECIMAL(3, 2) COMMENT '身高',
  score INT DEFAULT 0 COMMENT '分数', -- 假设默认分数为0,您可以根据需要修改
  create_time DATETIME COMMENT '创建时间',
  update_time DATETIME COMMENT '更新时间'
);

查看数据库中全部表 showtables

SHOW TABLES ;

删除表droptables表名   

更新表 

  • 添加新列

    • alter table 表名 add 新列名 数据类型(长度)约束 comment ' '

    • ALTER TABLE student ADD address VARCHAR(50) COMMENT '地址' AFTER score;#插入列到score后,不写AFTER score;默认插入到最后。
      
  • 删除列

    • alter table 表名 drop column 要删除列名;

    • ALTER TABLE student DROP COLUMN address; #删除address列
      

查看建表sql 

show create table 表名; 

4.数据增删改 

  • 添加记录

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

    • 单条插入

    • insert into student(id_number, studentName, age, birth, gender, height, address, create_time, update_time)
      values ('41162520057776','鲁家见',0,'2024-08-05',0,1.8,'河南周口',now(),now());
    • 多条插入

    • insert into student(id_number, studentName, age, birth, gender, height, address, create_time, update_time)
      values
             ('41162520457776','鲁家见',0,'2024-08-05',0,1.8,'河南周口',now(),now()),
             ('41162520057756','刘峰',0,'2024-08-05',0,1.8,'河南周口',now(),now()),
             ('41162520057716','工单',0,'2024-08-05',0,1.8,'河南周口',now(),now()),
             ('41162520057766','山湾的',0,'2024-08-05',0,1.8,'河南周口',now(),now()),
             ('41162520057276','小件',0,'2024-08-05',0,1.8,'河南周口',now(),now());
  • 修改记录

    • update 表名 set 列名1=值1,列名2=值2 [where 条件]

    • 修改全部数据

    • update student set age = 18;

    • 根据条件修改数据

    • update student set studentName = '八嘎雅鹿' where id = 1;
  • 删除记录

    • delete from 表名 [where 条件]

    • 根据条件删除数据

    • delete from student where id > 1;

5.数据查询 

 简单查询

  • 基本语法(除法查询全部否则不能使用*会降低效率)

    • select ... from 表名

  • 别名

    • select 列名 [as] 列别名 from 表名 [as] 表别名

    • 使用别名把下滑行转小驼峰

    • select create_time as createTime from student;
    • 取别名可以省略as

    • select create_time createTime from student;
      
  • 去重关键字

    • select distinct 列名 from 表名

    • sql中字符串拼接concat(要拼接的字段)

    • select distinct concat(studentName,'',age) as nameAge from student;
    • 去重一般只针对一个字段去重

    • select distinct age from student;

 条件查询

  • select ... from 表名 where 条件

    • 关系运算符

    • in关键字(里面值不能超过1024)

      • select ... from 表名 where 列名 in(值1,值2..);

      • in查询(查询年龄等于0,或18)

      • select * from student where age in(0,18);
    • between关键字

      • select ... from 表名 where 列名 between 较小的值 and 较大的的值

      • 查询范围时间范围常用

      • select * from student where age between -1 and 100;
    • is null关键字

      • is null 为空

      • is not null 不为空

    • 逻辑运算符

      • and

      • or

      • not

        • 取反

          • 常与In ,between连用

            • not in()

            • select * from student where age not in (0);
            • not between

    • like关键字

      • _ 单个任意字符

      • select * from student where studentName like '鲁__';
        
      • % 多个任意字符

      • select * from student where studentName like '小%';

聚合函数 

  • count

    • 返回某列的行数

      • 如果是count(*)使用*通配符则代表统计所有符合条件的行数,包括null

      • 单独统计某列 count(列名),会忽略掉值为null的列

忽略掉值为null空行

  • max
  • min
  • sum
  • avg
  • 还有大量函数.....

分组 

  • select 分组列,聚合函数() from 表名 group by 分组 having 分组后条件

    • where在分组前条件过滤,不能使用聚合函数

    • having在分组后条件过滤,可以使用聚合函数

    • group by 使用查出来数据一定要构成关系型数据库要求的行列结构(常识)

    • group by 也可以对多列进行分组,与单列分组一样,其实就是把多个列拼接后的值相同的放进一组

排序 

  • select ... from 表名 order by 排序列 [asc | desc](一般针对数字或者时间进行排序)

    • asc 升序 默认值

    • desc 降序

    • select *
      from emp order by  id desc ;

限制结果 

  • select ... from 表名 where .... limit 个数(取结果前几个)(限制结果必须写在最后)

分页

  • select ... from 表名 limit 开始行数,检索行数

  • select *
    from emp limit 0,5;
    
    select *
    from emp limit 5,5;
  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值