前端接触的MySql基础教程

MySql基础教程

SQL语句的分类

Sql语句是专门用来操作数据库的一种语言,我们之前在学习WebSql的时候,简单的了解过Sql语句,但是这些Sql语句,它还有一个分类

  1. DDL类型SQL语句(Database Define Language)

    数据库定义语言,Create ,Drop,Alter,Change,Modify等关键字

    DDL语句只有数据库当中的结构有关系,不与数据库当中的数据有关系(不操作数据库当中的数据,只操作数据库的结构)

  2. DML类型SQL语句(Database Manipulation Language)

    数据库操作语言,Insert ,Delete ,Select,Update等关键字

    DML语句只操作数据库的内容,不参于数据库结构的设计

  3. DCL类型SQL语句

DDL类型SQL语句学习

  1. 连接数据库【命令】

    $ mysql -h 127.0.0.1 -u root -p123456;
    

    上面的命令是连接一个mysql的数据库

    -h代表的是hostname ,如果省略掉,则默认就是连接到自己的电脑

    -u代表 username

    -p代表password ,如果省略掉,则默认是空密码(安装的时候没有设置密码)

  2. 显示所有的数据库

    show databases;
    

    注意:一条sql语名写完了以后,一定要加上分号;

  3. 切换数据库

    use 数据库名;
    
  4. 创建数据库

    create database 数据库名;
    
  5. 删除数据库

    drop database 数据库名;
    
  6. 显示所有数据表

    show tables;
    
  7. 创建数据表

    create table 数据库表名(列名 数据类型)
    
    mysql> create table if not exists stu_info(
        -> s_id varchar(50),
        -> s_name varchar(50),
        -> s_age int,
        -> s_sex varchar(10)
        -> )engine=innodb default charset=utf8;
    
    mysql> create table if not exists score_info(
        -> s_id varchar(50) not null,
        -> score float not null default 0
        -> )engine=innodb default charset=utf8;
    

    not null代表此列不能为空

    default代表设置这一列的默认值,如果在插入的过程当中,没有输入值,则会使用默认值去替代

  8. 删除数据表

    drop table 数据库表名
    
  9. 显示数据表中列的信息

    show columns from 数据表名
    
  10. 显示数据库中列的信息2

    desc 数据表名
    
  11. 新增数据表的列

```mysql
alter table 表名 add column 列名  数据类型
```
  1. 删除数据表中的列

    alter table 表名 drop column 列名
    
  2. 修改数据表中列的属性

    alter table 表名 modify 列名 列属性;
    alter table stu_info modify s_sex varchar(10) not null default 'boy';
    
  3. 修改数据表中列的名称

    alter table 表名 change column 原列名  新列名 列属性
    
  4. 修改数据库表名

    alter table 原表名 rename 新表名
    
  5. 表中的唯一约束**(可为NULL)**

    什么是唯一约束?

    在向数据表中插入数据的时候,某一列的数据如果设置了唯一约束,则在插入的时候,这一列不允许出现重复的数据

    唯一约束仅仅只是内容唯一,可以插入空值

    alter table student_info modify s_name varchar(50) unique;
    

    unique关键字就是用来设置唯一项的

  6. 数据表的主键

    什么是主键?

    主键是比唯一约束更严格的约束项,它必须唯一,并且不能为空,表现形式为PRI

    一个数据表最好至少有一个主键,这个方便我们数据库的操作

    优点:可以帮我们快速的去找到数据表的一条数据,找到记录以后,我们可以对这条记录相关操作,这样可以提高我们的开发效率

    • 第一种情况设置主键

      手动的设置不为空的唯一项

      mysql> create table if not exists stu_info(
          -> s_id varchar(50) not null unique,
          -> s_name varchar(50) not null
          -> )engine=innodb default charset=utf8;
      
    • 第二种情况创建

      直接使用primary key关键字创建

      mysql> create table if not exists stu_info(
          -> s_id varchar(50) primary key,
          -> s_name varchar(50) not null
          -> )engine=innodb default charset=utf8;
      
    • 第三种情况

      在添加完列以后,再单独设置

      mysql> create table if not exists stu_info(
          -> s_id varchar(50),
          -> s_name varchar(50) not null,
          -> primary key(s_id)
          -> )engine=innodb default charset=utf8;
      
    • 第四种情况,在已存在的表里面去添加主键

      alter table stu_info modify s_id varchar(50) not null unique;
      
      alter table 表名 add primary key(列名);
      
  7. 删除主键

    alter table 表名 drop primary key;
    
  8. 主键自增长

    mysql> create table if not exists score_info(
        -> id int primary key auto_increment,
        -> s_id varchar(50) not null,
        -> score float not null,
        -> score_name varchar(50) not null
        -> )engine=innodb default charset=utf8;
    
    
  9. 创建外键

    一张表引入了另一张表主键

    mysql> create table if not exists score_info(
        -> id int primary key auto_increment,
        -> s_id varchar(50) not null,
        -> score float not null,
        -> score_name varchar(50) not null,
        -> foreign key(s_id) references stu_info(s_id)
        -> )engine=innodb default charset=utf8;
    

    构建主外键关系表它们的数据类型是必须相同的,名称可以不同

    主外键的表进行删除的时候,应该先删除外键表的数据,再删除主键表的数据

MySql数据库的中文乱码处理

  1. 直接更改客户端的编码(cmd的编码)

    $ chcp 65001
    

    chcp:change current page;

    它只支持高版本的控制台(win8开始以上的控制)

  2. 更改服务端编码

    set character_set_client=gbk;
    set character_set_connection=gbk;
    set character_set_results=gbk;
    

    上面的三条语句分别设置客户端,设置连接以及设置结果集

    这三条语句只针对当前的设置,如果断开连接,则需要重设置一次

    上面的三行代码可以简化成一句话

    set names gbk;
    

    后面的编码格式根据具体的需要来完成

DML语句的学习

  1. count()是用于计数的

  2. as关键字可以用于别名转换,但as当做别名转换的时候,可以省略

  3. 模糊查询使用like关键字,通配符使用%表示

  4. 当同一个条件要进行多次or查询时,可以使用in关键字进行替代

    SELECT * FROM 学生信息 WHERE 学号 ='2005050209' OR 学号='2005050102';
    SELECT * FROM 学生信息 WHERE 学号 IN ('2005050209' ,'2005050102');
    
  5. 多表联查指的是在查询的过程当中from后面跟多个表,然后把这些表建立起where关联以后一起查询,然后显示要显示的列

    第一种方法:下面的方法是多表联查

    SELECT 学生信息.*,班级信息.班级名 FROM 学生信息,班级信息 WHERE 学生信息.所属班级=班级信息.班级编号
    

    第二种方法:下面的方法是内联查询

    SELECT 学生信息.*,班级信息.班级名 FROM 学生信息 INNER JOIN 班级信息 ON 学生信息.所属班级=班级信息.班级编号
    

    第三种方法:追加列的方式查询

    SELECT *,(SELECT 班级名 FROM 班级信息 WHERE 班级编号=学生信息.所属班级)  '班级名称' FROM 学生信息
    
  6. 别名的使用

    SELECT a.*,b.`班级名`,c.`姓名` as '辅导员信息',d.`系别名称` FROM 学生信息  a
    INNER JOIN 班级信息 b ON a.`所属班级`=b.`班级编号`
    INNER JOIN 辅导员信息 c ON c.`辅导员编号`=b.`辅导员`
    INNER JOIN 系别信息 d on d.`系别编号`=b.`所属系别`
    
  7. 聚合函数

    SELECT 所属班级,COUNT(*) '人数' FROM 学生信息
    GROUP BY 所属班级
    

    将查询结果与班级信息相连

    SELECT * FROM
    (SELECT 所属班级,COUNT(*) '人数' FROM 学生信息
    GROUP BY 所属班级) AS a
    INNER JOIN 班级信息 b on a.所属班级=b.班级编号
    

    第二种写法

    SELECT *,(SELECT COUNT(*) FROM 学生信息 b WHERE a.班级编号=b.所属班级) AS '实际人数' FROM 班级信息 a
    

    这一种情况下,不用使用聚合分组group by了

    😈 根据上面的两条SQL语句,我们都可以得到结果,但是我们发现查询出来的结果有一点不一样

    inner join取的是两个表的交集部分,这个时候

    left join是以左边的表为主,进行数据显示

    right join是以右边的表为主,进行数据显示

  8. avg平均函数的使用

    SELECT 学生编号,AVG(分数) '平均分' FROM 成绩信息
    GROUP BY 学生编号
    
  9. max取最大值函数

    SELECT * FROM 
    (SELECT 课程编号,学生编号,MAX(分数) '最高分' FROM 成绩信息
    GROUP BY 课程编号) a
    INNER JOIN 学生信息 b ON a.`学生编号`=b.`学号`
    
  10. 子查询

在原有的查询结果里面,再进行一次查询

SELECT a.等级,COUNT(*) '人数' FROM
(SELECT *,
CASE 
WHEN 分数>89 THEN '优秀'
WHEN 分数>79 THEN '良好'
WHEN 分数>69 THEN '中等'
WHEN 分数>59 THEN '及格'
ELSE '不级格'
END '等级'
 FROM 成绩信息) a
GROUP BY a.等级

上面的case when then else end 是一组条件选择的语句

  1. 字符串截取

    • substr(str from pos for len)

      pos是从1开始的,len是长度

      len可以省略掉,如新省略以后就一直截取到最后

    • substr(str,pos,len)

      pos从1开始,中间参数用逗号隔开

    在字符串截取上面,还有一个方法是 substring,这个方法 的参数与substr保持一致

    • left(str,len)方法,从左截取
    • right(str,len)方法,多右截取
  2. 判断空值我们使用is null进行

    SELECT *,
    CASE WHEN d.省份学生人数 IS NULL THEN 0 ELSE d.省份学生人数
    END '学生老乡个数'
     FROM
    (SELECT c.*,b.省份学生人数 FROM 教师信息 c
    LEFT JOIN (SELECT a.省份,COUNT(*) '省份学生人数' FROM
    (SELECT *,LEFT(家庭住址,2) '省份' FROM 学生信息) a
    GROUP BY a.省份) b ON  LEFT(c.籍贯,2)=b.省份) d
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值