整理来源:

MySQL 有这一篇就够(呕心狂敲37k字,只为博君一点赞!!!)_老赖的小弟的博客-CSDN博客_mysql

MySQL数据库入门学习(多图预警+新手向~)_mathor的博客-CSDN博客_数据库学习入门

数据库安装

重启MySQL服务器

net start mysql

配置

使用自己配置好的mysql或php_study配置的mysql两种连接要登陆其中一个,必须关掉另一个mysql的相关服务

MySQL>数据库>数据表>数据

数据库操作

  • 查询数据库:show databases;
  • 创建数据库:create database xx charset = (字符编码,例如utf8)

如果想要创建不重复的数据库方法:

这里写图片描述

  • 显示数据库信息:show create database XX(数据库名);
  • 更改数据库的字符编码:alter database XX character set utf8;
  • 删除数据库:drop database XX(数据库名);

如果想要创建不重复的数据库方法:drop database if exists XX (数据库名字)

  • 选择数据库(进入):use XX(数据库名);

数据表的操作

字段1名 数据类型,
字段2名 数据类型,
.......
字段n名 数据类型
);

* ~~~
数据类型  int 整型
         tinyint 整型(0-256) 
         decimal 浮点型(总位数,小数位数) 例如 decimal(3,1)
         char(X) 定长字符型 例如 char(10)
         varchar(X) 可变长度字符型 例如varchar(10)
         text 大段文本
         binary 二进制(存储照片等)
  • 查看所有表:show tables;
  • 显示创建表:

show create table XX(表名);
show create table XX(表名) G;

  • 显示表结构:

describe(或desc) XX(表名);

  • 删除表:

drop table XX(表名);
drop table XX,XX,XX......;

数据表的约束

约束条件说明
PRIMARY KEY主键约束用于唯一标识对应的记录
FOREIGN KEY外键约束
NOT NULL非空约束
UNIQUE唯一性约束
DEFAULT默认值约束,用于设置字段的默认值
  • 主键约束:primary key用于唯一的标识表中的每一行,被标识为主键的数据在表中是唯一的且其值不能为空。
  • 非空约束:字段的值不能为空

    字段名 数据类型 NOT NULL;
  • 默认值约束:给数据表中的字段指定默认值,即当在表中插入一条新记录时若未给该字段赋值,那么,数据库系统会自动为这个字段插人默认值

字段名 数据类型 DEFAULT 默认值;

  • 唯一性约束:保证数据表中字段的唯一性,即表中字段的值不能重复出现

字段名 数据类型 UNIQUE;

  • 外键约束:常用于多张表之间的约束

<!--暂不学-->

数据的基本操作

  • 插入数据:insert into XX(表名) (字段1,字段2,字段3......) values (值1,值2,值3.......);

字段可以和数据库中的字段顺序不一致,但是值和插入字段的顺序必须一致
插入字段是可以省略的,这时插入的值和数据表的字段顺序和个数必须一致

同时插入多组数据:INSERT INTO 表名 [(字段名1,字段名2,...)]VALUES (值 1,值 2,…),(值 1,值 2,…),...;

  • 查询数据:

    • 选取所有数据:select * from XX(表名);
    • 选取某(些)字段:select 字段1,字段2,字段3......(或用"*"代替所有字段) from XX(表名);
    • 选取条件:select * from XX(表名)where 字段1 = 值1 and 字段2 = 值2 and ......;
    • 选取范围:select * from stu where score > 90 or score < 60;
    • 排序:select * from XX(表名) order by 字段x asc(desc降序);(默认就是升序)
    • 选取n个数据:select * from XX(表名) limit n;
    • 从查询结果中过滤重复数据:select distinct 字段 from XX(表名);

| 关系运算符 | 说明 |
| :----------: | :--------: |
| = | 等于 |
| <> | 不等于 |
| != | 不等于 |
| < | 小于 |
| <= | 小于等于 |
| > | 大于 |
| >= | 大于等于 |

    • in关键字查询:

    IN关键字用于判断某个字段的值是否在指定集合中。如果字段的值恰好在指定的集合中,则将字段所在的记录将査询出来。eg: select * from student where sid in ('S_1002','S_1003');

    • between and 查询:

    BETWEEN AND用于判断某个字段的值是否在指定的范围之内。如果字段的值在指定范围内,则将所在的记录将查询出来 。eg: select * from student where age between 15 and 18;

    • and 和 or查询:连接多个查询条件
    • LIKE关键字查询:

      • 普通字符串查询:select * from student where sname like 'wang';
      • 含有%通配的字符串:select * from student where sname like 'li%'/'%li'/'%li%';
      • 含有_通配的字符串:下划线通配符只匹配单个字符,如果要匹配多个字符,需要连续使用多个下划线通配符 _

      例如,字符串“ab_”匹配以字符串“ab”开始长度为3的字符串,如abc、abp等等;字符串“a__d”匹配在字符“a”和“d”之间包含两个字符的字符串,如"abcd"、"atud"等等。

    • group by 进行分组查询:

      • 与聚合函数一起使用
      • 与having一起使用

      eg:统计工资总和大于8000的部门 MySQL命令:

      select sum(salary),departmentnumber from employee group by departmentnumber having sum(salary)>8000;

    • 删除数据:delete from XX(表名) where 字段x = 值x;

    删除全部数据:delete from XX;

    • 修改数据:

    update XX(表名) set 字段1 = 值1,字段2 = 值2 where 条件;
    update XX(表名) set 字段1 = 值1;

    • sum(); 求和 select sum(字段x) from XX(表名);
      avg(); 求平均值 select avg(字段x) from XX(表名);

    max(); 求最大值 select max(字段x) from XX(表名);
    min(); 求最小值 select min(字段x) from XX(表名);
    count(); 记录数 select count(字段x) from XX(表名);
    在某字段条件下使用函数 select 函数名() from XX(表名) where 字段x = 值x;

    • 别名设置:

      • 为表取别名:SELECT * FROM 表名 [AS] 表的别名 WHERE .... ;
      • 为字段取别名:SELECT 字段名1 [AS] 别名1 , 字段名2 [AS] 别名2 , ... FROM 表名 WHERE ... ;

    表的关联

    • 多对一:多对一(亦称为一对多)是数据表中最常见的一种关系。
    • 多对多:多对多是数据表中常见的一种关系。
    • 一对一:在开发过程中,一对一的关联关系在数据库中并不常见;因为以这种方式存储的信息通常会放在同一张表中。

    ## 关联查询

    eg:查询java班的所有学生:select * from student where classid=(select cid from class where cname='Java');

    ## 关联删除

    delete from student where classid=(select cid from class where cname='Java');
    delete from class where cname='Java';

    子查询

    一个查询语句嵌套在另一个查询语句内部的查询;该查询语句可以嵌套在一个 SELECT、SELECT…INTO、INSERT…INTO等语句中

    • 带比较运算符的子查询

    eg:select * from class where cid=(select classid from student where sname='张三');

    • 带EXISTS关键字的子查询

    EXISTS关键字后面的参数可以是任意一个子查询, 它不产生任何数据只返回TRUE或FALSE,当返回值为TRUE时外层查询才会 执行

    eg:select from class where exists (select from student where sname='王五');

    • 带ANY关键字的子查询

    表示满足其中任意一个条件就返回一个结果作为外层查询条件

    eg: select * from class where cid > any (select classid from student);

    • 带ALL关键字的子查询

    带ALL关键字的子査询返回的结果需同时满足所有内层査询条件

    eg:select * from class where cid > all (select classid from student);

    顺序

    查询语句的书写顺序和执行顺序
    select ===> from ===> where ===> group by ===> having ===> order by ===> limit
    查询语句的执行顺序
    from ===> where ===> group by ===> having ===> select ===> order by ===> limi

    最后修改:2022 年 01 月 17 日
    如果觉得我的文章对你有用,请随意赞赏