MySQL
什么是MySQL
MySQL是一个关系型数据库管理系统,在 WEB 应用方面,MySQL是一个好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。
我们一直说安装数据库,但是其实我们安装的是数据库管理系统,由于习惯,所以就简称数据库了
MySQL 的一些特性
E_R模型:
E:实体(表)
R: 关系()
表表的关系:
1对1,1对多,多对多
三范式:
列不可拆分
唯一标识
引用主键不重复
数据的完整性:
字段类型:int decimal,char,varchar,text,datetime,bit
约束:主键,非空,唯一,默认,外键
逻辑删除:物理删除:从硬盘真的删除,软删除:删除标识,1,0
安装Mysql
windows 安装
我用的是windows,所以这里看一下windows 的安装过程,
之后就下一步,然后第一次使用安装就按照默认的来就好了。需要什么就点击执行让他下载
这之后有一个要设置用户和密码的过程
这个自己要记住,不然就很麻烦 ,最后安装好后,文件夹里就会有MySql Server 这个 东东,我们打开它,把bin目录添加到环境变量里面
这样就安装好了
数据库的启动
启动服务 mysql.server start
关闭服务 mysql.server stop
现在这个版本,按照默认安装完后,服务就自己起来了,已经添加好了,不像MongDB 要操作一波,所以上面这一步可以省略,一般直接开客户端就好了
客户端启动:mysql -u root -p
( 然后回让输入密码,u是user 的意思,p是password)
查看当前安装的数据库版本:select version();
显示当前有哪些数据库 show databases;
显示当前时间: select now();
注意: mysql啥都要加个封号,有点讨厌
基础操作
数据库操作
创建数据库:create database animal charset=utf8;
这里我们要告诉它使用什么编码格式
切换数据库 use <库名>;
查看当前在哪个数据库select database();
删除数据库:drop database <库名>;
表操作
建表:
create table dog(
id int auto_increment primary key, #设置第一个字段为id 自动编号, 设为主键)
name varchar(10) not null # 设置第二的字段为name ,字符类型,长度可变,最长10 不能为空
);
修改表:
desc <表名>;
desc dog;
查看表的结构
alter table <表名> add <字段> <字段类型>;
alter table dog add birthday datetime;
给 dog 这个表 添加一个 birthday的字段,是日期类型
alter table <表名> add <字段><字段类型> after <字段>;
alter table dog add gender int after name;
在某个字段后添加
lter table <表名> add <字段><字段类型> first
alter table dog add age int first ;
添加到第一个
alter table <表名> change <要修改的字段名> <改后的字段名> <字段类型>;
alter table dog change gender sex int ;
修改表的字段
alter table <表名> drop <字段>,
alter table dog drop age;
删除age 这个字段
rename table <表名> to <表名>;
rename table dog to cat;
修改表的名字 从 dog 改为 cat
show create table <表名>;
show create table cat;
显示建表时候的设置,
drop table <表名>;
drop table cat;
删表后,库还在
数据操作
刚才把表删了,先建回来
create table dog(
id int auto_increment primary key,
name varchar(20) not null,
age int ,
gender int );
插入数据
全列插入
insert into <表名> values(<传入的值>);insert into dog values(1,"lala",12, 1);
向 dog中插入了一个 lala age 12 ,id 1,gender 0, 这个要按顺序传入,
·
缺省插入
insert into <表名>(<传入的字段>) values(<传入的值>);insert into dog(age,name) values(14,"kuku");
只插入对应的字段,没穿值的按照默认的显示,比如id 我原来设置的自增,gender 默认没有默认,显示NULL;
·
一次插入多个
insert into <表名> values(<传入的值>),(<传入的值>);insert into dog values(0,"lachang",10,1),(0,"yuekex",6,0);
如果id 有自增,自己记不住,可以用0占位
·
一次缺省插入多个
insert into dog(<传入的字段>) values(<传入的值>),(<传入的值>);insert into dog(name) values("taishi"),("shizi");
注意,如果id 不是自增的必须写,不然就完了,其他没有设置默认值的是空。
·
查看表里的数据
select * from <表名>;select * from dog;
修改数据
update <表名> set <修改的字段>=<修改的值> where <筛选条件>;
update dog set name="lllll" where id=6;
把id为6 的名字改为llllll
删除数据:
delete from <表名> where <筛选条件>;
delete from dog where id=3;
注意删除后,其他的id不变,物理删除,
逻辑删除是修改标记字段,alter table dog add isdeletebit dsfault 0;
默认是 0,没删除,改为1 是删除
查询操作
新建一个表,刚才的数据不好
create table stu(
id int auto_increment primary key,
name varchar(10) not null,
birthday datetime,
gender bit default 0,
isdelete bit default 0,
address varchar(100),
score int
);
insert into stu values(1,“小明”,“2008-01-01”,0,0,“北京”,90),
(2,“小红”,“2007-01-01”,1,0,“上海”,80),
(3,“小兰”,“2006-01-01”,1,0,“广州”,100),
(4,“小王”,“2005-01-01”,0,0,“深圳”,20),
(5,“老王”,“2009-01-01”,0,0,null,30),
(6,“老刘”,“2004-01-01”,0,0,null,40),
(7,“小丽”,“2003-01-01”,1,0,“东莞”,50),
(8,“小芳”,“2002-01-01”,1,0,“福建”,60),
(9,“小粒”,“2001-01-01”,0,0,“福州”,70);
条件查询:
这个就不截图了,截图太长放不下
select <查询的字段>,<查询条件> from <表名> where <查询的条件>
*
就是所有字段,也可以传入自己想看的字段,where 后面就是查询条件,> < = != >= <=
.select name address from stu where id!=6
select * from stu where id>6;
select * from stu where id=7;
select id,name from stu where name!="老王";
逻辑运算
select <查询的字段> from <表名> where <查询条件> <and / or / not > <查询条件>
and / or / not
.select name from stu where id>6 and gender=1;
select name from stu where id<4 or gender =0;
select name from stu where not id=4;
模糊查询;
like
后接条件%
匹配多个_
匹配一个
.select * from stu where name like '小%';
名字里小这个字开头的select * from stu where name like "%王";
名字里王这个字结尾的select * from stu where name like "%王" or name like "%丽";
范围查询;
用
in / not in / between / and
来描述范围
.select * from stu where id in(1, 3, 5 ,6);
select * from stu where id not in(1, 3, 5 ,6);
select * from stu where id between 1 and 5;
select * from stu where id between 1 and 5 and gender=1;
判断是否为空
is null
.select * from stu where address is null;
符合的优先级
- ()
- not
- 条件运算
- and
- or
聚合查询
统计个数:
select count(*) from stu;
所有 学生的个数select count(id) from stu where gender=0;
看男生几个select max(score) from stu;
成绩最大是多少select min(score) from stu;
成绩最小是多少select sum(score) from stu;
总成绩select sum(score) from stu where gender=1;
男生的成绩和
分组查询
select <分的组名>,count(*) from <表名> group by <分组依据>;
select gender,count(*) from stu group by gender;
按性别分组,看有男男女分别多少
.
select <分的组名> as <分组的别名>,count(*) from <表名> group by <分组依据>select gender as gend,avg(score) from stu group by gender having gender=0;
这个分组完是男女两组,但只想显示男生的平均,所以我们加一个 having <对应的组>
.
select <分的组名> ,max(score) from <表名> group by <分组依据>;select gender ,max(score) from stu group by gender;
注意:分的组名一定要是已有的字段,group by 后面应该写对应的分组依据
排序
order by <字段> <升序or降序>
asc 升序select * from stu where gender =0 order by id asc;
desc 降序select * from stu where isdelete=0 order by score desc;
分页
limit ,
select * from stu limit 0,3;
从第 0 条开始,每页 3个数据
去重
distinct <去重的字段>
select distinct <去重的字段> from <表的名字>; 对哪个字段取重就写哪个select distinct name from stu;
今天就简单讲解一些 MySql 的 增删查改操作,明天继续了解 MySql 的 E_R 模型,表与表的关系 ,
我又来要赞了,还是希望各位路过的朋友,如果觉得可以学到些什么的话,点个赞再走吧,欢迎各位路过的大佬评论,指正错误,也欢迎有问题的小伙伴评论留言,私信。每个小伙伴的关注都是我更博的动力》》》》奥里给