欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL知识总结

程序员文章站 2022-04-19 18:17:41
1.MySQL数据库 MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,从而增加了速度并提高了灵活性。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中 小型网站的开发都选择 MySQL 作为 ......

1.MySQL数据库
    MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,从而增加了速度并提高了灵活性。
    MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中
  小型网站的开发都选择 MySQL 作为网站数据库,搭配 PHP 和 Apache 可组成良好的开发环境。
2.MySQL存储方式
    一台数据库服务器中会创建很多数据库,在数据库中会创建很多张表,在表中会有很多记录。
3.SQL结构化查询语言
     SQL是高级的非过程化编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚
  本文件的扩展名,可以嵌套,具有极大的灵活性和强大的功能。
4.SQL语言的分类
    (1)DDL(数据定义语言)
    (2)DML(数据操作语言)
    (3)DCL(数据控制语言)
    (4)DQL(数据查询语言)
5.MySQL数据库的创建、修改和删除
    (1)创建数据库
        语法: create database 数据库名称 [character set 字符集 collate 字符集校对规则](一般忽略);
    (2)查看数据库
      查看所有数据库:
        语法: show databases;
      查看某个数据库:
        语法: show create database 数据库名称;
    (3)修改数据库:
        语法:alter database 数据库名称 [character set 字符集 collate 字符集校对规则](一般忽略);
    (4)删除数据库:
        语法:drop database 数据库名称;
    (5)使用或者切换数据库:
        语法:use 数据库名称;
6.MySQL表的创建、修改和删除
    (1)创建表
        语法:create table 表名(
            数据名称 数据类型(长度) 约束,
            .......
        );
        注:括号内的语句用逗号进行多次创建,最后的语句不加任何标点符号
        数据类型:(MySQL所对应的Java类型)
         Java中的类型                        MySQL中的类型
            byte/short/int/long             tinyint/smallint/int/bigint
            float                            float
            double                            ouble
            boolean                            bit
            char/String                        char和varchar类型
                                             char和varchar的区别:
                                              char代表是固定长度的字符或字符串。
                                               定义类型char(8),向这个字段存入字符串hello,那么数据库使用三个空格将其补全。
                                              varchar代表的是可变长度的字符串。
                                               定义类型varchar(8), 向这个字段存入字符串hello,那么存入到数据库的就是hello。
            Date                            date/time/datetime/timestamp
                                             datetime和timestamp区别
                                              datetime就是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用null存入
                                              到数据库中
                                              timestamp也是既有日期又有时间的日期类型,如果没有向这个字段中存值,数据库使用当前的
                                              系统时间存入到数据库中。
            File                            BLOB/TEXT
        约束:
          约束作用:保证数据的完整性
          单表约束:
            主键约束:primary key (主键约束默认就是唯一 非空的)
            唯一约束:unique
            非空约束:not null
    (2)查看表
        查看一个数据库下的所有的表:
          语法:show tables;
        查看单独一个表:
          语法:desc 表名;
    (3)删除表
          语法:drop table 表名;
    (4)修改表
        增添列:
          语法: alter table 表名 add 列名 数据类型(长度) 约束;
        修改列类型,长度和约束:
          语法: alter table 表名 modify 列名 数据类型(长度) 约束;
        删除列:
          语法: alter table 表名 drop 列名;
        修改列名称:
          语法: alter table 表名 change 旧列名 新列名 数据类型(长度) 约束;
        修改表名:
          语法: rename table 表名 to 新的表名;
        修改表的字符集:
          语法: alter table 表名 character set 字符集;
7.MySQL数据的增删改查
    (1)添加表记录
        向表中插入某些列:
          语法: insert into 表名 (列名1,列名2,列名3…) values (值1,值2,值3…);
        向表中插入所有列:
          语法: insert into 表名 values (值1,值2,值3…);
      注意:
        1.值的类型与数据库中表列的类型一致;
        2.值的顺序与数据库中表列的顺序一致;
        3.值的最大长度不能超过列设置最大长度;
        4.值的类型是字符串或者是日期类型,使用单引号引起来。
    (2)修改表记录
          语法: update 表名 set 列名=值,列名=值 [where 条件];
      注意:
        1.值的类型与列的类型一致;
        2.值的最大长度不能超过列设置的最大长度;
        3.字符串类型和日期类型添加单引号。
    (3)删除表记录
          语法: delete from 表名 [where 条件];(或者truncat from 表名;)<注:truncat删除表数据无法恢复>
      注意:
        1.删除表的记录,指的是删除表中的一行记录;
        2.删除如果没有条件,默认是删除表中的所有记录。
    (4)查看表记录
          语法: select  *(或者列名) from 表 [条件];
8.MySQL解决向数据库中插入中文记录会出现错误
    解决方法:
        需要将MySQL数据库服务器中的客户端部分的字符集改为gbk,找到MySQL的安装路径:my.ini文件,修改文件中[client]下的字符集,将
      [default-charaacter-set=ISO-8895-1]改成[default-charaacter-set=gbk],然后再重新启动MySQL的服务器。
9.按不同方式查看表记录
    (1)按条件查询:
        使用where 字句
         > ,< ,<= , >= , <> *不等 , =
        like:模糊查询 , in:范围 查询 ,  条件关联:and or not
        查询李四信息: select * from 表名 where 列名[name = 李四] = '李四';
        查询李四信息并且英语大于90: select * from 表名 where 列名[name = 李四] ='李四' and 列名[Englist]>90;
        在lik可以使用: _ , %  _只能带表一个字符 %带表多个字符  * %王% 带表中间包含着个字就行
        查询姓李的学生信息: select * from 表名 where name like '%李%'
        查询英语成绩是69,75,89的学生: select * form 表名 where 列名[english] in (69 , 75 , 89);
    (2)查询排序:
        使用order by 字段名称 asc/desc; *默认是用asc , 倒序desc;
        查询学生信息按成绩排: selech * from order by 列名[english];
        查询学生成绩按倒序: selech * from order by 列名[english] desc;
        查询学生按语文成绩倒序再按英语升序排列: select * from order by  列名[chinese] desc, 列名[english] asc;
        查询姓李的学生,英语按倒序排列: select * from 表名 where 列名[name] like '李%' order by 列名[english] desc;
    (3)分组统计查询:
        聚合函数:
          sum(); 获得总数: count();*个数;  最大值:max() 最小值:min() 平均值:avg;
            获得所有成绩的和: select sum(exam)from 表名;
          count();
            获得所有的计数: select count(*) from 表名;
          max()/min();
            获得某门考试的最大和最小成绩: select max(math) from 表名;/select min(math) from 表名;
          avg()
            获得平均数:select avg(chinese) from 表名;
        分组查询
          语法:使用group by 字段名称;
           按商品名称统计,每类商品所花费的总金额:select product,sum(price) from orderitem group by product;
         注意:
            where的子句后面不能跟着聚合函数。如果现在使用带有聚合函数的条件过滤(分组后条件过滤)需要使用一个关键字HAVING;
            例:select product,sum(price) from orderitem  group by product having sum(price) > 5000 order by sum(price) asc;
10.单表查询的执行顺序流程
    select ... from ... where ...  group by ... having ...order by ...;
11.多表查询
      表与表之间的关系-外键
        作用:保证多张表之间的数据如果有关联,则关联的数据的完整性。
      设计与建表原则
        一对多:将外键设置在多的一方,指向一的主键
        多对多:必须有第三张表,这张表中最少会有两个字段作为外键,指向多对多的两张表的主键
        一对一:唯一外键约束
                主键对应:
                  实质就是建立外键并且让这个外键唯一。
      查询:
        准备环境:多表分析创建
        连接查询:关联条件就是外键
            内连接:交集, select * from 表1, 表2 where 条件
            左外连接:左表的数据和交集数据
                select * from 表1 left join 表2 on 条件
            右外连接:右表的数据和交集数据
                select * from 表1 right join 表2 on 条件
        子查询
12.分页查询
    select * from 表名 limit begin, length  :begin 从0开始,表示索引;length:表示查询多少条记录
    select * from 表名 limit number; 从第一条数据开始,总共查询number条数据。
13.MySQL常见bug
     select * from 表名 where score = '80abc' 实质就是:SELECT * FROM stu where score = 80, 会将不能转化为数值的字符舍弃
     select * from 表名 where NAME = 'abC' :MySQL查询的时候不区分大小写      
        解决方法:
            select * from stu where BINARY NAME = 'Abc'