您的位置:首页 > 房产 > 家装 > MySQL

MySQL

2024/10/5 22:29:55 来源:https://blog.csdn.net/qq_65095414/article/details/140918875  浏览:    关键词: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;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com