目 录CONTENT

文章目录

MySQL基础

Administrator
2020-07-24 / 0 评论 / 0 点赞 / 12634 阅读 / 10849 字 / 正在检测是否收录...

MySql基础

MySql它与webSql一样,都是一个数据库,webSql只存在于浏览器,而MySql是服务器关系型数据库,可以多人同时连接。MySql它是国外的oracle公司开发的一款数据库软件,软件小功能强,在小中型项目里面使用非常多

我们之前要操作webSql的数据库,我们要习一种操作语言,这种语言叫SQL语句(结构化查询语名),今天我们学习MySQL它也是使用Sql主句来操作

:::tip SQL语言三大分类
在学习SQL语句的当中,SQL语句分三大类SQL语句
:::

  1. DDL数据库定义语句(Database Define Language)

    数据库定义语言,它涉及到关键字有create,drop,change,alter,modify等这些。数据库定义语言只操作数据库的结构,不操作数据库里面的数据

  2. DML 数据库操作语言(Database Manipulation Language)

    数据库操作语言主要指四个大关键字select,update,delete,insert这种类型的SQL语句,它只操作数据库当中的数据,不对数据库的结构进行操作

  3. DCL数据库控制语言

    对数据库的权限分析,备份以及还原等进行操作

DOS命令

在计算机里面DOS里操作计算机的内部指令,我们可以在CMD的窗口里面操作命令

1569574450488

目前我们所学习的DOS有

  1. cd切换目录 ,cd ..切换到上及目录,cd software切换到software的目录了
  2. ipconfig 用于查询计算机的IP地址
  3. mysql -uroot -p连接数据库的DOS命令

在开发文档里面,如果这条命令是DOS计算机操作命令,都会以$ 来表示,所以如果看到$ ipconfig,在执行命令的过程当中,就不要这个$符了

注意:DOS命令不要与SQL语句弄混SQL语句只是在服务器执行的脚本,它的窗口虽然也在cmd里面,但是是不一样的

1569574786211

这个时候,我们会看到它是有mysql>开头的,这个时候,在这个窗口里面,就不能执行DOS命令,只能执行SQL语句

DDL类型SQL语句学习

  1. 连接数据库(命令)

    $ mysql -h 127.0.0.1 -u root -p
    

    -h代表host表示连接的服务器地址 127.0.0.1代表的是本机

    -u代表user表示用户名,mysql默认用户名为root

    -p代表使用密码连接

    当我们连接上数据库服务器以后就可以进行后面的操作了(只要没有退出服务器就可以一直操作)

  2. 修改MySql服务器密码(命令)

    $ mysqladmin -uroot -p原始密码  password 新密码
    
  3. 显示服务器数据库列表

    show databases;
    

    一条SQL语句执行完毕以后要打上分号;如果你想结束之前输入的命令,也分号;

  4. 创建数据库

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

    drop database 数据库名
    
  6. 切换数据库

    use 数据库名;
    use h1904;
    
  7. 显示当前数据库下面的所有数据表

    show tables;
    
  8. 创建数据库

    在创建数据表之前要弄清楚一定需要创建多少列,每一列的数据类型是什么,以及数据表的名称是什么

    create table if not exists stulist(
    sid varchar(12) not null,
    sname varchar(20) not null,
    ssex varchar(2) not null,
    sage int
    )engine=innodb default charset=utf8
    

    create table创建表

    if not exists stulist如果不存在stulist

    varchar(12)变成字符串,int整数

    not null不为空,你插入数据的时候,必须要放值进去

    engine=innodb,服务器存储引擎

    default charset=utf8 将字符编码设置为utf-8

  9. 显示数据表中所有列的信息

    show columns from 表名;
    show columns from stulist;
    
  10. 显示数据表中所有列的信息2

    desc 表名;
    desc stulist;
    
  11. 删除数据表

    drop table 表名;
    
  12. 删除数据表中的某一列

    alter table 表名 drop column 列名;
    alter table stulist drop column sage;
    
  13. 在数据表中新增列

    alter table 表名 add column 列名 数据类型 描述信息;
    alter table stulist add column sage int not null;
    
  14. 在数据表中修改列的属性,例如将sage这一列由 int改为varchar(20)

    alter table 表名 modify 列名 新数据类型 新描述信息
    alter table stulist modify sage varchar(20) not null;
    
  15. 修改数据表中某一列的名称,如将ssex改为s_sex

    alter table 表名 change 原列名 新列名 数据类型 描述信息;
    alter table stulist change ssex s_sex varchar(2) not null;
    

注意: 修改列的时候要注意分为两种情况,第一种是修改列的属性我们使用modify,第二种是修改列的名称我们使用change,它们的语法格式不一样

  1. 修改数据表名,如把数据表stulist改为stu_list

    alter table 原名称 rename 新表名;
    alter table stulist rename stu_list;
    
  2. 表中的列的值的唯一约束

    什么是唯一约束?

    在向数据表中插入值的时候,如果你希望某一列的值不能重复,这个时候我们就需对这一列做一个特殊的处理。这个特殊的处理我们叫唯一约束

    唯一约束可以插入空值null

    现在我们希望把数据表stulist当中的sid这一列加上一个唯一约束,让学号不重复

    第一种情况:直接在某一列上面修改

    alter table stulist modify sid varchar(12) unique;
    

    unique关键字代表唯一,但是它可以设置空值

    第二种情况:在创建表的时候就直接设置好

    create table if not exists stulist(
    sid varchar(20) unique,
    sname varchar(20) not null,
    ssex varchar(2) not null,
    sage int
    )engine=innodb default charset=utf8;
    

    在创建表的时候,我们可以一次性直接创建好,这样sid它就是一个唯一约束

  3. 设置数据库的主键

    数据库的主键是唯一 项,但是又不能为空,它在数据库当中的标识是PRI,而唯一约束的标识是UNI,当数据表中的某一列被设置为唯一约束的同时又不允许为空的时候,这一列自动标记为主键列

    当一个数据表当中存在主键以后,我们在操作数据的时候非常方便,可以快速的去定位到这条数据信息。定位到这条数据信息以后就可以快速操作

    第一种方式设置主键

    alter table stulist modify sid varchar(20) not null unique;
    

    这一种方式是真设置为不为空以后,再设置唯一约束

    当一个主键是以一种像这样的方式去设置的时候,就不能够使用 alter table stulist drop primary key;如果使用就会报错

    第二种方式设置主键

    在创建数据表的时候,直接设置为主键,在某一列的后面添加 primary key;

    create table if not exists stulist(
    sid varchar(20) primary key,
    sname varchar(20) not null,
    ssex varchar(2) not null,
    sage int
    )engine = innodb default charset =utf8;
    

    第三种方式设置主键

    alter table 表名 add primary key(列名);
    alter table stulist add primary key(sid);
    

    一般情况下在设计数据库的过程当中不推荐使用联合主键(多主键),但是如果非要使用多个主键也是可以的

    第四种方式设置多个主键

    alter table 表名 add primary key(列名1,列名2...);
    alter table stulist add primary key(sid,sname);
    
  4. 删除数据库主键

    如果某一列之前标记为主键列,现在不希望它是主键列了,这个时候,我们可以使用如下方法去设置这个主键标识

    alter table 表名 drop primary key;
    alter table stulist drop primary key;
    
  5. 设置某一列的默认值

    当我们在插入数据的时候,如果希望某一列默认有一个值,这个时候就需要有一个默认值的描述信息

    alter table stulist modify ssex varchar(2) not null default '女';
    
  6. 创建外键

    什么是外键?一个表的某一列数据受另一张表的主键去约束,那么我们就把这一列叫外键列(它会构成一个主外键约束)

    1569566459579

在上在的图片,《学生信息表》的班级这一列受到另一张表《班级信息表》的班级编号这一列影响

现在我们尝试将上面的两个表创建出来以后进行主外键关联

创建第一个表classinfo

 create table if not exists classinfo(
 cid varchar(12) primary key,
 tname varchar(20) not null,
 classroom varchar(20) not null
 )engine=innodb default charset=utf8;

创建第二个表stuinfo

在第二个表里面,我们的cid这一列要与另一个表的cid构成主外键关联

create table if not exists stuinfo(
sid varchar(12) primary key,
sname varchar(12) not null,
ssex varchar(2) not null,
cid varchar(12) not null,
foreign key(cid) references classinfo(cid)
)engine = innodb default charset = utf8;

注意事项

  • 主外键的两个列它们的列名称可以不一样,但是数据类型 与数据长度必须一致,在刚刚的学生信息表classinfo里面,我们的列cid它的数据类型是varchar(12)那么,stuinfo表里面的数据类型cid外键列也必须是varchar(12)

    当我们构成主外键关系以后,这个时候请同学们注意,先添加主键表的数据,再添加外键表的数据

  • 当两个表一旦构成主外键关系以后,这个时候,我们再去删除主键表就要注意,我们要保证这个组件没有被别人使用,否则是不能删除的

  • 在navicat的工具里面,我们可以在ER图上速的构造主外键关系

  • 如果在构造主外键关系的时候,原来的表已经有数据的情况之下,可能会报错,报错的原因只有可能是这一列有些数据在主键表里面不存在

  1. 数据库备份 (DOS命令)

    在平常的工作当中,我们经常会使用数据库进行份备,希望把数据库备份下来,我们可以通过命令把数据库备份成文件,它需要通过DOS命令 直接在CMD里面执行

```bash
$ mysqldump -h主机地址 -u用户名 -p密码 数据库名 > 保存的路径名
$ mysqldump -h127.0.0.1 -uroot -p123456 h1904 > c:\h1904.sql
```

> DOS命令是没有分号
>
> 当执行上面的命令成功以后,我们就可以在指定的位置看到导出的备份文件
  1. 数据库还原

    如果希望去还原一个数据库,则首先需要有一个备份文件

    • 先连接到数据库(命令)

      $ mysql -h127.0.0.1 -uroot -p
      
    • 连接到数据库服务器以后,创建一个数据库

      create database h1904
      
    • 切换到刚刚创建的数据库下面去

      use h1904;
      
    • 导入SQL脚本文件

      source c:/h1904.sql
      

      注意:这里的斜线是正斜线

  2. 序号自增长

    当我们在设置数据表的时候,如果希望某一个产生一个序号,让它自动增长,这个时候,可以给一个描述信息auto_increment

    create table if not exists test(
    	id INT PRIMARY KEY auto_increment,
    	userName varchar(20) not null,
    	tel VARCHAR(20) not null,
    	email varchar(20) not null
    )ENGINE = INNODB default charset=utf8;
    

    当我们向数据表里面插入数据的时候,前面的id这一列会自动生成数字,它会自动增长


MySQL乱码处理

::: danger 乱码处理
在MySQL出现中文乱码非常正常,因为中文的编码有很多,常用的就有utf-8,gbk,gb2312,我们在设置数据库的时候经常都是设置为utf-8,当你操作数据库的客户端如果不是这个格式的时候,就会造成中文乱码
:::

当出现中文乱码以后,我们要排查

第一步:先在mysql里面输入如下SQL语句

show variables like '%char%';

先查询mysql数据库设置当中与字符集char相关的设置

1569569048821

其中能够引起我们显示乱码有三个部分

character_set_client;  #连接的客户端
character_set_connection; #数据库的连接
character_set_results;  #执行sql语句以后显示的结果

第二步:更改字符编码

如果要防止乱码我们需要去设置上面的的三个东西的字符集,这个三个字符集一定要与操作工具一样,每个操作系统的每个操作工具都不一样( windows有DOS窗口,linux的命令控制台,Mac苹果电脑也有控制台),我们现在有window的DOM窗体为例

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

这三样东西仅仅只是设置当前这一次,一旦断开数据库连接又要重设置,这样会显得很麻烦 ,所以mysql里面有一个命令快速的去设置这三个字符集

set names 字符集;
set names utf8;
set names gbk;
0

评论区