MySQL基础记录

213 阅读5分钟

一 MySQL的分类

DDL:Data Definition Language --数据定义语言
DML:Data Manipulation Language --数据操作语言
DQL:Data Query Language --数据查询语言
DCl:Data Control Language --数据控制语言

以上表格供语句使用

二.DDL

DDL:操作数据库CRUD
    1.Create:创建
        create database 数据库名称;
        create database if not exists 数据库名称;
        create database 数据库名称 character set 字符集名;
    2.Retrieve:查询
        show databases;                        查询所有数据库的名称
        show create database 数据库名称;       查询某个数据库的创建语句
     3.Update:修改
        修改数据库的字符集
        alter database 数据库名称  character set 字符集名称;
     4.Delete:删除
        drop database 数据库名称;
        drop database if exists 数据库名称;
     5.使用数据库
     查询当前正在使用的数据库
     select database();
     use database;

     二.操作表
     1.Create
        create table 表名(
            列名1 数据类型1,
            列名2 数据类型2,
            列名3 数据类型3,
            ...
            列名n 数据类型n
            );
        数据库类型
            int
            double
            date
            datetime
            timestamp
            varchar
     2.Retrieve
        查询某个数据库中所有的表名称
        show tables;
        查询表结构
        desc 表名;
     3.Update
        1.修改表名
            alter table 表名 rename to 新的表名;
        2.修改表的字符集
            alter table 表名 character set 字符集名称
        3.添加一列
            alter table 表名 add 列名 数据类型
        4.修改列名称 类型
            alter table 表名 change 列名 新列名 新数据类型
            alter table 表名 modify 列名 新数据类型
        5.删除列
            alter table 表名 drop 列名
     4.删除
        drop table 表名;
        drop table if exists 表名;

三.DML

1.添加数据:
    insert into 表名(列名1,列名2,...,列名n) values (值1,值2,...,值n);
    注意点:
        1.列名和值要一一对应
        2.如果表后面没有列名,则默认给列中所有字段添加值
        insert into 表名 values(值1,值2,...,值n)
2.删除数据:
    delete from 表名 where 条件
    要删除所有记录
    delete from 表名 ----不推荐使用,有多少条记录就会执行多少次删除操作
    truncate table 表名---先删除表,再创建一个一模一样的表
3.修改数据
    update 表名 set 列名1=值1 列名2=值2,...,where 条件
    注意:如果不加任何条件,则表中该列的所有记录都会改变

四 DQL

DQL的具体使用如下

1.语法:
    select      字段列表
    from        表名列表
    where       条件列表
    group by    分组字段
    having      分组之后的条件限定
    order by    排序
    limit       分页限定

2.基础查询
    1.多个字段的查询    select 字段名1,字段名2,...字段名n from 表名
    2.去除重复  select distinct 字段名 from 表名;
    3.计算列:一般使用四则运算进行计算
    4.起别名:  as(可以省略)

3.条件查询
    1.where字句后面跟条件
    2.运算符
        > < <= => = <>
        between...and
        in
        like
        is null
        and/&&
        or/|
        not/!
        
        select * from student where 40<age and age<55;
        select * from student where age between 40 and 55;          
        select * from student where age=30 or age=40;
        select * from student where age in(20,30,40);
        select * from student where name like "马%";                
        select * from student where name like "_化%";
  
    3.排序查询
        select * from student order by age asc;
        select * from student order by age desc;
        select * from student order by age asc,math asc;
        
    4.聚合函数
    聚合函数:将一列数据作为一个整体,进行纵向的计算
        1.count:计算个数
            select count(name) from student;
        注意:
            聚合函数的计算会排序值为null的那行数据
        解决方案:
            一般选择主键的那一列
            或者 select count(ifnull(english,0)) from student;
        2.max
        3.min
        4.sum
            select sum(math) from student;
        5.avg
        
    5.分组查询
        1.语法 group by
        注意:
            1.分组之后查询的字段:分组字段,聚合函数
            2.where和having的区别:
                where在分组之前进行限定,不满足条件,则不能加入组;having在分组之后进行限定,如果不满足,则不会被查询
                where后不能跟聚合函数的判断;having后可以
        
        select sex 性别,count(*) 总数 from student group by sex;
        select sex 性别,avg(math) 总数 from student where math>90 group by sex; 
        select sex 性别,avg(math) 总数 from student where math>90 group by sex having count(id)>1;
        
    6.分页查询  
        语法:
        limit 开始的索引,每页查询的条数
        select * from student limit 0,2;
        select * from student limit 2,2;

五 数据库约束

以下省去创建时添加的部分
1.主键约束:primary key
    alter table student modify id int primary key;
2.非空约束:not null
    alter table 表名 modify 列名 数据类型 not null;
3.唯一约束:unique
    添加唯一约束:
        alter table 表名 modify 列名 数据类型 unique;
    删除唯一约束 
            alter table 表名 drop index 列名
4.外键约束:foregin key
    创建时添加外键:
        create table 表名(
            ...
            constraint 外键名称 foregin key (外键名称) references 主表名称(主表列名称)
        )

5.级联操作(要在添加外键时设置级联)
    1.添加级联操作
        alter table 表名 add constraint 外键名称 froegin key(外键字段名称) references 主表名称(主表列名称) on update cascade/on delete cascade
    2.分类
        1.级联更新:on update cascade
        2.级联删除:on delete cascade

六 数据库的设计

6.1 数据库多表之间的关系

6.1.1 分类

1 一对一

一个身份证和一个人只能一一对应

2. 一对多(多对一)

一个部门可以有很多员工,但一个员工只能选一个部门

3.多对多

一个学生可以选很多门课,一门课也可以被很多学生选

6.1.2 实现

1.一对多

在多的一方建立外键,指向一的一方的主键

2.多对多

建立第三张中间表,中间表至少包含两个字段,这两个字段作为第三张表的外键分别指向两张表的主键

6.1 数据库范式

七 数据库的多表查询

1.多表查询
    1.内连接查询
        1.隐式内连接:使用where条件消除无用数据
        2.显式内连接:
            语法:select 字段列表 from 表名1 【inner】 join 表名2 on 条件
            将满足条件的两个表的结果拼起来
        3.注意事项
            1.从哪些表中查数据
            2.查询条件是什么
            3.查询哪些字段
    2.外连接查询
        1.左外连接
            语法:select 字段列表 from 表1 left【outer】join on 表2 on 条件
        2.右外连接
    3.子查询