MySql基础
MySql它与webSql一样,都是一个数据库,webSql只存在于浏览器,而MySql是服务器关系型数据库,可以多人同时连接。MySql它是国外的oracle公司开发的一款数据库软件,软件小功能强,在小中型项目里面使用非常多
我们之前要操作webSql的数据库,我们要习一种操作语言,这种语言叫SQL语句(结构化查询语名),今天我们学习MySQL它也是使用Sql主句来操作
:::tip SQL语言三大分类
在学习SQL语句的当中,SQL语句分三大类SQL语句
:::
-
DDL数据库定义语句(Database Define Language)
数据库定义语言,它涉及到关键字有
create
,drop
,change
,alter
,modify
等这些。数据库定义语言只操作数据库的结构,不操作数据库里面的数据 -
DML 数据库操作语言(Database Manipulation Language)
数据库操作语言主要指四个大关键字
select
,update
,delete
,insert
这种类型的SQL语句,它只操作数据库当中的数据,不对数据库的结构进行操作 -
DCL数据库控制语言
对数据库的权限分析,备份以及还原等进行操作
DOS命令
在计算机里面DOS里操作计算机的内部指令,我们可以在CMD的窗口里面操作命令
目前我们所学习的DOS有
cd
切换目录 ,cd ..
切换到上及目录,cd software
切换到software的目录了ipconfig
用于查询计算机的IP地址mysql -uroot -p
连接数据库的DOS命令
在开发文档里面,如果这条命令是DOS计算机操作命令,都会以$
来表示,所以如果看到$ ipconfig
,在执行命令的过程当中,就不要这个$
符了
注意:DOS命令不要与SQL语句弄混,SQL语句只是在服务器执行的脚本,它的窗口虽然也在cmd
里面,但是是不一样的
这个时候,我们会看到它是有mysql>
开头的,这个时候,在这个窗口里面,就不能执行DOS命令,只能执行SQL语句
DDL类型SQL语句学习
-
连接数据库(命令)
$ mysql -h 127.0.0.1 -u root -p
-h代表host表示连接的服务器地址 127.0.0.1代表的是本机
-u代表user表示用户名,mysql默认用户名为root
-p代表使用密码连接
当我们连接上数据库服务器以后就可以进行后面的操作了(只要没有退出服务器就可以一直操作)
-
修改MySql服务器密码(命令)
$ mysqladmin -uroot -p原始密码 password 新密码
-
显示服务器数据库列表
show databases;
一条SQL语句执行完毕以后要打上分号
;
如果你想结束之前输入的命令,也分号;
-
创建数据库
create database h1904; create database 数据库名;
-
删除数据库
drop database 数据库名
-
切换数据库
use 数据库名; use h1904;
-
显示当前数据库下面的所有数据表
show tables;
-
创建数据库
在创建数据表之前要弄清楚一定需要创建多少列,每一列的数据类型是什么,以及数据表的名称是什么
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
-
显示数据表中所有列的信息
show columns from 表名; show columns from stulist;
-
显示数据表中所有列的信息2
desc 表名; desc stulist;
-
删除数据表
drop table 表名;
-
删除数据表中的某一列
alter table 表名 drop column 列名; alter table stulist drop column sage;
-
在数据表中新增列
alter table 表名 add column 列名 数据类型 描述信息; alter table stulist add column sage int not null;
-
在数据表中修改列的属性,例如将
sage
这一列由int
改为varchar(20)
alter table 表名 modify 列名 新数据类型 新描述信息 alter table stulist modify sage varchar(20) not null;
-
修改数据表中某一列的名称,如将
ssex
改为s_sex
alter table 表名 change 原列名 新列名 数据类型 描述信息; alter table stulist change ssex s_sex varchar(2) not null;
注意: 修改列的时候要注意分为两种情况,第一种是修改列的属性我们使用modify
,第二种是修改列的名称我们使用change
,它们的语法格式不一样
-
修改数据表名,如把数据表stulist改为stu_list
alter table 原名称 rename 新表名; alter table stulist rename stu_list;
-
表中的列的值的唯一约束
什么是唯一约束?
在向数据表中插入值的时候,如果你希望某一列的值不能重复,这个时候我们就需对这一列做一个特殊的处理。这个特殊的处理我们叫唯一约束
唯一约束可以插入空值
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它就是一个唯一约束
-
设置数据库的主键
数据库的主键是唯一 项,但是又不能为空,它在数据库当中的标识是
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);
-
删除数据库主键
如果某一列之前标记为主键列,现在不希望它是主键列了,这个时候,我们可以使用如下方法去设置这个主键标识
alter table 表名 drop primary key; alter table stulist drop primary key;
-
设置某一列的默认值
当我们在插入数据的时候,如果希望某一列默认有一个值,这个时候就需要有一个默认值的描述信息
alter table stulist modify ssex varchar(2) not null default '女';
-
创建外键
什么是外键?一个表的某一列数据受另一张表的主键去约束,那么我们就把这一列叫外键列(它会构成一个主外键约束)
在上在的图片,《学生信息表》的班级这一列受到另一张表《班级信息表》的班级编号这一列影响
现在我们尝试将上面的两个表创建出来以后进行主外键关联
创建第一个表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图
上速的构造主外键关系 -
如果在构造主外键关系的时候,原来的表已经有数据的情况之下,可能会报错,报错的原因只有可能是这一列有些数据在主键表里面不存在
-
数据库备份 (DOS命令)
在平常的工作当中,我们经常会使用数据库进行份备,希望把数据库备份下来,我们可以通过命令把数据库备份成文件,它需要通过DOS命令 直接在CMD里面执行
```bash
$ mysqldump -h主机地址 -u用户名 -p密码 数据库名 > 保存的路径名
$ mysqldump -h127.0.0.1 -uroot -p123456 h1904 > c:\h1904.sql
```
> DOS命令是没有分号
>
> 当执行上面的命令成功以后,我们就可以在指定的位置看到导出的备份文件
-
数据库还原
如果希望去还原一个数据库,则首先需要有一个备份文件
-
先连接到数据库(命令)
$ mysql -h127.0.0.1 -uroot -p
-
连接到数据库服务器以后,创建一个数据库
create database h1904
-
切换到刚刚创建的数据库下面去
use h1904;
-
导入SQL脚本文件
source c:/h1904.sql
注意:这里的斜线是正斜线
-
-
序号自增长
当我们在设置数据表的时候,如果希望某一个产生一个序号,让它自动增长,这个时候,可以给一个描述信息
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
相关的设置
其中能够引起我们显示乱码有三个部分
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;
评论区