MySQL基本操作

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值