mysql数据库

在这里插入图片描述

连接数据库

mysql -uroot -p123456 --连接数据库
update mysql.user set authentication_string=password('123456') where user='root' and Host='localhost'; --修改用户权限
flush privileges; --刷新权限
--------------------------------------------------------------
--所有语句都用;结尾
show databases; --查看所有数据库

mysql> use school --切换数据库 使用school
Database changed

show tables; --查看数据库下所有表
describe student; --显示数据库中所有表信息

create database study; --创建数据库
exit; --退出连接
四种语言
DDL数据库定义语言
DML数据库操作语言
DQL数据库查询语言
DML数据库操作语言

操作数据库

1、创建数据库

create database [if not exists] study;

2.删除数据库

drop database [if exists] study;

3.使用数据库

-- 如果字段为特殊字符,需要使用``
use 'study';

4、查看数据库

数据类型

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

字段属性

Unsigned:
(1)无符号的整数
(2)声明了该列不能为负数
zerofill:
(1)0填充的
(2)不足的位数,使用0来填充,int(3),5—005
自增:
(1)通常理解为自增,自动在上一条记录的基础上+1(默认)
(2)通常用来设计唯一的主键~ index,必须为整数
(3)可以设置起始值和增量
非空:
假设设置为not null,如果不给它赋值,会报错!
默认:
设置默认的值

每个表必须存在以下五个字段:
id 主键
‘version’ 乐观锁
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间

创建数据库表

-- ``是为了保证字段名不与一些特殊符号的冲突,字符串用''就行
-- auto_increment自增
create table if not exists `student`(
	`id` int(4) not null AUTO_INCREMENT comment '学号',
	`name` varchar(30) not null DEFAULT '匿名' comment '姓名',
	`pwd` varchar(20) not null DEFAULT '123456' COMMENT '密码',
	`sex` varchar(1) not null DEFAULT '女' comment '性别',
	`birthday` datetime DEFAULT NULL comment '出生日期',
	`address` varchar(100) DEFAULT null comment '家庭住址',
	`email` VARCHAR(50) DEFAULT null COMMENT '邮箱',
	primary key (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

数据库引擎

INNODB 默认使用
MYISAM 早些年使用

MYISAMINNODB
事务支持不支持支持
数据行锁定不支持(表锁定)支持
外键约束不支持支持
全文索引支持不支持
表空间的大小较小较大,约为前者2倍

常规使用操作:
(1)MYISAM 节约空间,速度较快
(2)INNODB 安全性高,事务的处理,多表多用户操作

物理空间存储的位置:
所有数据库文件都存在data目录下
本质还是文件的存储

设置数据库表的字符集编码:
CHARSET=utf8
不设置,会是mysql默认的字符集编码(不支持中文)
在my.ini中配置默认的编码

修改删除表

-- 修改表名
alter table student1 rename as student

-- 添加表字段
alter table student add age int(11)

-- 修改表字段 (重命名,修改约束)
alter table student modify age varchar(11)  -- 修改约束
alter table student change age age1 int(11) -- 重命名

-- 删除表字段
alter table student drop age1

-- 删除表
drop table if exists student

外键

create table grade(
	gradeid int(10) not null auto_increment comment '年级id',
	gradename varchar(50) not null comment '年级名称',
	primary key (gradeid)
)engine=innodb DEFAULT charset=utf8

drop table student

create table if not exists `student`(
	`id` int(4) not null AUTO_INCREMENT comment '学号',
	`name` varchar(30) not null DEFAULT '匿名' comment '姓名',
	`pwd` varchar(20) not null DEFAULT '123456' COMMENT '密码',
	`sex` varchar(1) not null DEFAULT '女' comment '性别',
	`birthday` datetime DEFAULT NULL comment '出生日期',
	`gradeid` int(10),
	`address` varchar(100) DEFAULT null comment '家庭住址',
	`email` VARCHAR(50) DEFAULT null COMMENT '邮箱',
	primary key (`id`),
	key `FK_gradeid`(`gradeid`),
	constraint `FK_gradeid` foreign key(`gradeid`) references `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

删除由外键关系的表的时候,必须要先删除引用别人的表,再删除被引用的表

DML语言

数据库意义:数据存储,数据管理

DML语言:数据操作语言
(1)insert

-- 添加 不加字段名默认全部
insert into student (`name`,pwd,sex,birthday,address,email) values ('小明','123456','男','2022-10-3 10:32:10','河工大','123@163.com')
insert into student (`name`,pwd,sex,birthday,address,email) values ('小红','123456','女','2021-10-3 10:35:10','河工大','123@163.com')
insert into student (`name`,pwd,sex,birthday,address,email) values ('小李子','123456','男','2020-10-3 10:32:10','河工大','123@163.com')
insert into student (`name`,pwd,sex,birthday,address,email) values ('小红','123456','女','2026-10-3 10:35:10','河工大','123@163.com')

insert into grade (`gradename`) values ('大二')
insert into grade (`gradename`) values ('大二'),('大三'),('大二'),('大三')

(2)update

update student set `name`='小明',address='c' where `name`='d'

在这里插入图片描述
(3)delete

delete from student where id=1

-- 完全清空
truncate student 

delete与truncate的区别:
(1)truncate重新设置自增列,计数器会归零
(2)truncate不会影响事务

DQL语言

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

select * from student;
-- 别名
select studentno as 学号,studentname as 姓名 from student as s;

-- 函数
select concat('姓名:',studentno) as 新名字 from student;

输出:
在这里插入图片描述
在这里插入图片描述

-- 去重
select distinct studentno from result;

-- 查询学号,成绩+1
select studentno,studentresult+1 as '加一分后' from result;

在这里插入图片描述
在这里插入图片描述

where子句之逻辑运算符

select studentno,studentresult from result where studentresult>=95 and studentresult<=100

select studentno,studentresult from result where studentresult between 95 and 100

-- 除了学号一千的学生成绩
select studentno,studentresult from result where not studentno = 1000

模糊查询

在这里插入图片描述

-- 查询姓赵的同学
-- like结合 %(代表0到任意个字符) _(一个字符)
select studentno,studentname from student where studentname like '赵%';
-- 查询赵姓且名字只有一个字
select studentno,studentname from student where studentname like '赵_';
-- 查询学号在指定范围的学生 in里不能加通配符
select studentno,studentname from student where studentno in (1000,1001);

-- 查询地址为空的学生
select studentno,studentname from student where address = '' or adddress is null;

联表查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
join on 和where分开用。where是筛选。join on是组成表,a和b表笛卡尔积,inner join on相当于where,left join和right join是左连接和右连接,左连接是左表所有数据都有,哪怕不符合on条件,on条件只会使筛选右表数据,会显示null,右连接类似。若三表连接,则在两表连接后接… join c on。

select s.studentno,s.studentname,r.subjectno,r.studentresult from student as s inner join result as r on s.studentno = r.studentno;

在这里插入图片描述

select s.studentno,s.studentname,r.subjectno,r.studentresult from student as s right join result as r on s.studentno = r.studentno;

在这里插入图片描述

select s.studentno,s.studentname,r.subjectno,r.studentresult from student as s left join result as r on s.studentno = r.studentno;

在这里插入图片描述

-- 查询缺考学生信息
select s.studentno,s.studentname,r.subjectno,r.studentresult from student as s left join result as r on s.studentno = r.studentno where subjectno is null;

在这里插入图片描述

-- 查询参加考试的学生学号,姓名,科目名和分数 三表联合查询
select s.studentno,s.studentname,subjectname,studentresult from student s right join result r on s.studentno = r.studentno 
inner join `subject` sb on sb.subjectno = r.subjectno;

在这里插入图片描述

自连接(了解)

在这里插入图片描述

分页和排序

在这里插入图片描述

-- order by排序 asc升序,desc降序
-- 查询参加高等数学-1考试的学生学号,姓名,科目名和分数,并升序排序
select s.studentno,s.studentname,subjectname,studentresult from student s right join result r on s.studentno = r.studentno 
inner join `subject` sb on sb.subjectno = r.subjectno and sb.subjectname = '高等数学-1' order by studentresult asc;

在这里插入图片描述

-- limit分页 起始页,页面大小
select s.studentno,s.studentname,subjectname,studentresult from student s right join result r on s.studentno = r.studentno 
inner join `subject` sb on sb.subjectno = r.subjectno and sb.subjectname = '高等数学-1' order by studentresult asc limit 0,2;

在这里插入图片描述

子查询和嵌套查询

-- 查询高等数学-1成绩大于等于80的学生学号、姓名
select s.studentno,s.studentname from student s,result r where s.studentno = r.studentno and r.studentresult>=80 and r.subjectno = (select subjectno from `subject` where 
subjectname='高等数学-1')

常用函数

-- 常用函数
select abs(-1) --绝对值
select ceiling(9.4) --向上取整
select floor(9.4) --向下取整
select randn() --返回0-1的随机数
select sign(10) --判断符号 0-0 负数--1 正数-1

-- 字符串函数
select CHAR_LENGTH('aaaaaaaa')  --长度
select concat('a','b') --拼接
select insert('abcdabc',1,2,'acc') --查询,替换
select lower('abcDabc') --小写
select upper('abcDabc') --大写

聚合函数

count()总数
sum()求和
max,min,avg

-- 查询不同课程的平均分、最高分、最低分 group by 和聚合函数一起用,计算每个组的某某
select subjectname,AVG(studentresult),MAX(studentresult),MIN(studentresult) from result r,`subject` sub where r.subjectno = sub.subjectno
GROUP BY r.subjectno;

-- 查询不同课程的平均分、最高分、最低分 且平均分大于等于50 having 筛选分组
select subjectname,AVG(studentresult) as pingjun,MAX(studentresult),MIN(studentresult) from result r,`subject` sub where r.subjectno = sub.subjectno GROUP BY r.subjectno HAVING pingjun >= 50;

数据库级别MD5加密

什么是MD5?
主要增强算法复杂度和不可逆性。
MD5不可逆,具体的值的md5是一样的
MD5破解网站的原理,背后有一个字典,MD5加密后的值,加密的前值。

在这里插入图片描述
加密后:
在这里插入图片描述
校验时也对用户的输入进行md5加密,然后查询。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值