MySQL基本操作
项目里面接触了一些后端的前辈,虽然我主要的工作是完成前端的工作,但是,学习技术嘛,所以最近也在开始学习一些后端的知识。
之前请教过别人后端学习路径,JAVA学习过,就差不多要学习 MySQL 操作数据库。再学习JDBC 用JAVA操作数据库,之后学习 JAVAweb 再学习一些 别的一些框架之类的。前几天大体了解了MySQL数据库的操作
在这里记录一下
数据库的基本概念
-
库的英文单词:DataBase 简称:db
-
什么是数据库?
用于存储数据的仓库。
-
数据库的特点:
持久化存储数据
方便存储和管理数据
使用了统一的方式操作数据库
MySQL
- 关系型数据库
- mysql 使用的是 SQL 语言
下载和安装
这个步骤跟着官网一步一步来就ok啦,反正免费
终端基本操作
- 数据记录常见操作
- 增加 INSERT
- 删除 DELETE
- 修改 UPDATE
- 查询 SELECT
cmd终端进入MySQL
用户的账号和密码都需要自己添加和设置。这里推荐MySQL的可视化工具navicat for MySQL
mysql -u root -p密码
进入我们的数据库以后,我们呢可以进行一些基本的操作:【一定记得加分号】
//查询数据库里databases
show databases;
//创建database
create database ... ;
//选中...database
use ...;
.....
这些都不算太要紧,数据库中比较重要的是:查询操作
//1、 查看`database`中的`tables`
show tables;
//2、 创建`table`
create table ...();
//3、 查看`table`中的所有记录
select * from ... ;
//4、 查看`table`中指定的几列
select ... from ... ;
//5、 查询所有`teacher`表中`depart`列中不重复元素,排重
select distinct depart from teacher
//6、 查询区间[ `##` 表中` degree`列 A到B区间内的数据]
select * from ## where degree between A and B ;
//7、 表示或者关系的查询 `in`【 在 `###`中查询 `...` 满足 a , b , 或者 c】【在`###`中查询 满足 条件A 和条件B 的数据】
select * from ### where ... in ( a, b, c ,) ;
select * from ### where A or B ;
//8、 升序 / 降序【默认升序】
sclect * from ### order by ... asc ;
sclect * from ### order by ... desc ;
//9、 以 A 升序 ,以 B 降序 排列 `###`
select * from ### order by A asc , B desc ;
//10、 统计`###`的 满足条件`A`的个数
select count(*) from ### where A ;
//11、 统计`###`表中,A 属性最高的行对应的 B C属性
select B , C from ### where A = (select max(A) from ###) ;
//12、 计算每门课的平均成绩
select * from course ;
//avg()
select avg(degree) from sore where cno='3-105' ;
//group by 分组
select cno,avg(degree) from score group by cno ;
//13、 查询score表中 至少有两名学生选修的,并以3开头的课程的平均分数【模糊查询——like】
select cno,avg(degree) from score group by cno having count(cno)>=2 and cno like '3%';
//14、 查询分数大于 70 ,小于 90 的 sno列
select sno,degree from score where degree between 70 and 90;
//15、 查询所有学生的 sname、cno、和 degree 列【双表查询】
select sname,cno,degree from student,score where student.sno = score.sno;
以上的查询方法是一些常用的查询方法:另外,如果我们需要接手一个项目,为项目的整体数据都要做上统筹规划,那么,我们的数据库也必须要遵循一些规则,使我们的数据库能够更加便于后期的数据维护。
数据库的设计
MySQL 建表约束
- 主键约束
唯一确定一张表中的一条记录,也就是我们通过给某个字段添加约束,就可以使得该字段不重复且不为空。
primary key
//设置 id 为 主键约束
create table user(
id int primary key,
name varchar(20)
);
联合主键
只要联合主键加起来,不重复,但是任何一个字段不可以为空,元素插入就合法
//将 id , name 都设置为 联合约束
create table user(
id int ,
name varchar(20) ,
password varchar(20),
primary key(id,name)
);
insert into user2 values(1 , '张三' , '123') √
insert into user2 values(1 , '李四' , '123') √
insert into user2 values(2 , '张三' , '123') √
insert into user2 values(NULL , '张三' , '123') ×
- 自增约束
设置一个元素,会自动增加
auto_increment
create table user3(
id int primary key auto_increment,
name varchar(20)
);
insert into user3 (name) var char ('zhangshan');
如果我们 创建表时,忘记创建 主键约束 ,该怎么办?
alter...add primary key(...) ;
如何删除?
alter ...drop primary key ;
如何修改?
alter table ... modify id int primary key;
create table user4(
id int ,
name varchar(20)
);
alter table user4 add primary key(id);
- 唯一约束
约束修饰的字段的值不可以重复
- 添加?
alter...add unique(...);
- 删除?
alter ... drop index ...;
create table user5(
id int,
name varchar(20)
);
alter table user5 add unique(name);
create table user5(
id int,
name varchar(20),
unique(name)
//name varchar(20) unique
//unique(id , name)
);
//删除
alter table user5 drop index name;
- 非空约束
修饰的字段不可为空(NULL)
create table user9(
id int,
name varchar(20) not null
);
- 默认约束
如果当我们插入字段值时,如果没有传值,就会使用默认值
create table user10(
id int,
name varchar(20),
age int default 10
)
- 外键约束
涉及到两个表:主表,副表
1、主表 classes 中没有的数据值,在附表 student 中,是不可以使用的 。
2、主表中的记录,被附表引用,是不可以被删除的。
//班级表
create table classes(
id int primary key,
name varchar(20)
);
//学生表
create table student(
id int primary key,
name varchar(20),
class_id int,
foreign key(class_id) references classes(id)
);
//向班级表里面插入数据
insert into classes value( 1,'一班');
insert into classes value( 2,'二班');
insert into classes value( 3,'三班');
//向学生列表里面插入
insert into student values(1001 , 'zhangsan' , 1 ) √
insert into student values(1002 , 'zhangsan' , 2 ) √
insert into student values(1003 , 'zhangsan' , 3 ) √
insert into student values(1004 , 'zhangsan' , 5 ) ×
总结:
1、建表的时候就添加
2 、
alter...add...
3、
alter...modif...
4、删除
alter...drop...
数据库的三大设范式
- 第一范式
数据表中的所有字段都是不可分割的原子值
范式详细程度是对于实际开发需求而言的,既要便于后续操作也要符合实际需求
create table student(
id int primary key ,
name varchar(20),
address varchar(30)
);
insert into student values(1,'张三','安徽省安庆市潜山市');
//以上,address 内部包含的信息过于多,是可以继续拆分的,就不满足第一范式
create table student(
id int primary key ,
name varchar(20) ,
country varchar(30) ,
privence varchar(30) ,
city varchar(30) ,
details varchar(30)
);
- 第二范式
必须满足第一范式的要求下,要求,出主键外每一列,必须完全依赖于主键
如果出现不完全依赖,只可能发生在联合主键的情况下
create table myorder(
prodect_id int ,
customer_id int ,
product_name varchar(20) ,
customer_name varchar(20) ,
primary key(product_id,customer_id)
);
//问题:主键外的其他列,只依赖与主键的部分字段
//拆表,使相关属性,完全依赖于主键
create table myorder(
order_id int primary key ,
prodect_id int ,
customer_id int ,
);
create table product(
id int primary key ,
name varchar(20)
);
create table customer(
id int primary key ,
name varchar(20)
)
- 第三范式
必须先满足第二范式,除开主键列的其他列之间,不能有传递依赖关系。
create table myorder(
order_id int primary key ,
prodect_id int ,
customer_id int ,
customer_phone varchar(15)
);
//在这里面 customer_phone , 和 customer_id 之间是存在依赖关系的
create table customer(
id int primary key ,
name varchar(20) ,
phone varchar(15)
)
好了,今天的记录也就到这里了。拜拜ヾ(•ω•`)o