作者:爱编程的小贤
⛳知识点:MySQL
:每天学一点,早日成大佬
①首先要先下载MySQL然后进行环境变量配置
②可以私信我获取链接(有安装包和安装详细步骤及环境变量配置)
③也可以去官网下载
https://downloads.mysql.com/archives/installer/
如果你看完感觉对你有帮助,,,欢迎给个三连哦!!!您的支持是我创作的动力。 感谢感谢!!!
数据库 : 数据库是按照数据结构来组织、存储和管理数据的仓库。简单来说是本身可视为电子化的文件柜–存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。
特点 : 以一定方式储存在一起、能为多个用户共享、具有尽可能小的冗余度的特点、是与应用程序彼此独立的数据集合。
数据库系统解决的问题:持久化存储,优化读写,保证数据的有效性
当前使用的数据库,主要分为两类
命令:mysql -uroot -p 回车后输入密码,当前设置的密码为mysql
quit或exit
查看版本:select version();
显示当前时间:select now();
对数据库的操作 : 主要分为 创建数据库 ,查看数据库 , 删除数据库
create database 数据库名 charset=utf8;
create database Cara;
show databases;
select database();
drop database 数据库名;
drop database Cara;
注意 : MySQL没有提供数据库名称的修改操作 , 通常在数据库里面存放着大量的数据表,而数据表的命名通常都是一个数据库名称的部分字母作为表的前缀 , 一旦修改数据库的名称那么表名称有需要修改,这个会非常麻烦。而数据库的删除操作也不要随意操作 , 因为删除是不可逆的。mysql不区分大小写
use 数据库名;
#注释内容
–(两个杠)(空格) 注释内容
#和 -- 的区别就是: #后面直接加注释内容,而 --的第 2 个破折号后需要跟一个空格符在加注释内容。
多行注释使用 /* */ 注释符。 /*用于注释内容的开头, */ 用于注释内容的结尾。多行注释格式如下:
/*
第一行注释内容
第二行注释内容
*/
注释内容写在 /* 和 */ 之间,可以跨多行。快捷注释:ctrl + / 取消注释 ctrl+shift
提示:在创建表之前 , 一定要确定是对哪个数据库的操作。
使用数据库:use 数据库名; – 每行代码结束后要写分号
show tables;
auto_increment表示自动增长
create table 表名(列及类型);
Create table 表名(
字段名称 数据类型 列属性,
字段名称 数据类型 列属性 -- 最后一个字段 不需要加逗号
)[表选项]; //charset = utf8;
如:
create table students(
id int auto_increment primary key,
sname varchar(10) not null
);
常用数据类型
show tables; -- 查询所有的表
desc 表名; -- 查看创建的表的字段(查看表结构)
show create table 表名; -- 查看表的创建(创建表的语句)
代码如下:
show tables;
desc student;
show create table student;
drop table 表名;
drop table if exists 表名; -- 如果存在则删除
代码如下:
drop table student;
drop table if exists student;
rename table 原表名 to 新表名;
代码如下:
rename table student to user;
全列插入:insert into 表名 values(...)
缺省插入:insert into 表名(字段1,...) values(值1,...)
同时插入多条数据:insert into 表名 values(...),(...)...;
或insert into 表名(字段1,...) values(值1,...),(值1,...)...;
注意:当表有自增长时,如果不手动插入数据,就需要把要插入的列名都写出来。。主键列是自动增长,但是在全列插入时需要占位,通常使用0,插入成功后以实际数据为准
代码如下:
insert into user values(2,'lisa',12,'2021-8-3')
insert into user(name,age) values('lisa',12)
注意 : 添加数据的时候 , 后面的值要和前面的字段一一对应。
select */字段列表 from 表名 [where条件];
代码如下:
select * from user; -- 查询所有数据
select * from user where name='lisa' -- 查询名字为lisa的所有信息
select age from user where name='lisa' -- 查询名字为lisade 年龄
update 表名 set 字段 = 值 [where条件] ; -- 如果没有where条件会修改所有的行
代码如下:
update user set age=16 where name='lisa';
注意 : 要在后面加上 where 限定修改的条件 , 否则修改的就是全部的数据。
delete from 表名 [where条件]; -- where后不加条件默认删除的也是所有内容
代码如下:
delete from user where id=1; -- 根据条件删除
delete from user; -- 删除表里面的所有内容
逻辑删除, 用一个字段来表示 这条信息是否已经不能再使用了
alter table students add isdelete bit default 0;
如果需要删除则
update students set isdelete=1 where …;
将表与表的关系 , 反应到最终数据库表的设计上来可以将关系分成三种:一对一 , 一对多(多对一)和多对多
一对一 : 一张表的一条记录一定只能与另外一张表的一条记录进行对应; 反之亦然。
例 : 学员与坐位的关系 :
一个学员的坐位只有一个(张三的座位是一排一列 , 而李四的则是一排二列)。
一对多 : 一张表中有一条记录可以对应另外一张表中的多条记录; 但是返回过 , 另外一张表的一条记录只能对应第一张表的一条记录 , 这种关系就是一对多或者多对一。
例 : 地区和人员的关系 :
多个学员可能存在于同一个地区。
多对多 : 一张表中(A)的一条记录能够对应另外一张表(B)中的多条记录; 同时B表中的一条记录也能对应A表中的多条记录 , 这种关系就是多对多的关系。
例 : 学员和老师的关系 :
一个老师有多个学员 , 一个学员也会存在多个老师。
使用where子句对表中的数据筛选,结果为true的行会出现在结果集中
select * from 表名 where 条件;
查询编号大于3的学生
select * from students where id>3;
查询编号不大于4的科目
select * from subjects where id<=4;
查询姓名不是“黄蓉”的学生
select * from students where sname!='黄蓉';
查询没被删除的学生
select * from students where isdelete=0;
查询编号大于3的女同学
select * from students where id>3 and gender=0;
查询编号小于4或没被删除的学生
select * from students where id<4 or isdelete=0;
select * from students where sname like '黄%';
查询姓黄的学生
select * from students where sname like '黄_';
查询姓黄的学生
select * from students where sname like '黄%' or sname like '%靖%';
查询编号是1或3或8的学生
select * from students where id in(1,3,8);
查询学生是3至8的学生
select * from students where id between 3 and 8;
查询学生是3至8的男生
select * from students where id between 3 and 8 and gender=1;
查询学生是3至8的学生
查询没有填写地址的学生
select * from students where hometown is null;
查询填写了地址的学生
select * from students where hometown is not null;
查询填写了地址的女生
select * from students where hometown is not null and gender=0;
查询学生总数
select count(*) from students;
查询女生的编号最大值
select max(id) from students where gender=0;
查询未删除的学生最小编号
select min(id) from students where isdelete=0;
查询男生的编号之后
select sum(id) from students where gender=1;
查询未删除女生的编号平均值
select avg(id) from students where isdelete=0 and gender=0;
select 列1,列2,聚合... from 表名 group by 列1,列2,列3...
查询男女生总数
select gender as 性别,count(*)
from students
group by gender;
查询各城市人数
select hometown as 家乡,count(*)
from students
group by hometown;
select 列1,列2,聚合... from 表名
group by 列1,列2,列3...
having 列1,...聚合...
查询男生总人数
方案一
select count(*)
from students
where gender=1;
-----------------------------------
方案二:
select gender as 性别,count(*)
from students
group by gender
having gender=1;
select * from 表名
limit start,count
select distinct *
from 表名
where ....
group by ... having ...
order by ...
limit star,count
from 表名
where ....
group by ...
select distinct *
having ...
order by ...
limit star,count
create table scores(
id int primary key auto_increment,
stuid int,
subid int,
score decimal(5,2)
);
alter table scores add constraint stu_sco foreign key(stuid) references students(id);
create table scores(
id int primary key auto_increment,
stuid int,
subid int,
score decimal(5,2),
foreign key(stuid) references students(id),
foreign key(subid) references subjects(id)
);
alter table scores add constraint stu_sco foreign key(stuid) references students(id) on
delete cascade;
restrict(限制):默认值,抛异常
cascade(级联):如果主表的记录删掉,则从表中相关联的记录都将被删除
set null:将外键设置为空
no action:什么都不做
create table areas(
id int primary key,
atitle varchar(20),
pid int,
foreign key(pid) references areas(id)
);
source areas.sql;
select city.* from areas as city
inner join areas as province on city.pid=province.id
where province.atitle='山西省';
select dis.*,dis2.* from areas as dis
inner join areas as city on city.id=dis.pid
left join areas as dis2 on dis.id=dis2.pid
where city.atitle='广州市';
create view stuscore as
select students.*,scores.score from scores
inner join students on scores.stuid=students.id;
select * from stuscore;
show create table students;
alter table '表名' engine=innodb;
开启begin;
提交commit;
回滚rollback;
本文经过自己所学加上参考一些资料整理而来,希望能帮助到大家,让各位兄弟姐妹们对数据库有一个深入的认识并能够熟练掌握,如果有哪个地方写得不好的欢迎指正呀!!!最后希望大家给个支持谢谢啦!!!❤️