MySql基础知识回顾

3 篇文章 0 订阅
3 篇文章 0 订阅

基本概念

数据 Data
数据库 Database DB
数据库管理系统 database management system DBMS
数据库应用程序 database application system DBAS
数据库管理员 database Administrator DBA
最终用户 User
数据库系统 database system DBS

数据库类型:
关系数据库(MySql)和非关系数据库(Redis)

Mysql默认端口号3306 oracle默认端口号1521

DBA通过DBMS对DB中的D进行操作
Structured Query Language (SQL):非过程化语言,只需要提出做什么,不需要指明怎么做

SQL语言

数据查询语言 DQL: select from where
数据操作语言 DML:Insert Update Delete
数据定义语言 DDL:Create Alter Drop
数据控制语言 DCL:Grant Revoke
事务控制语言 TCL:Start Transaction Commit RollBack Set Transaction

数据库表操作

行:记录 列:字段

-- 创建数据库表
create TABLE t_student(
	sno int(6),
	sname varchar(10),
	sex char(1),
	age int(3),
	enterdate date,
	classname varchar(10),
	email varchar(15)
);
-- 查看表的结构,展示表的详细信息
DESC t_student;

-- 查看表中数据
select * from t_student;

-- 查看建表语句
show create TABLE t_student;
-- 结果如下
CREATE TABLE `t_student` (
  `sno` int DEFAULT NULL,
  `sname` varchar(10) DEFAULT NULL,
  `sex` char(1) DEFAULT NULL,
  `age` int DEFAULT NULL,
  `enterdate` date DEFAULT NULL,
  `classname` varchar(10) DEFAULT NULL,
  `email` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

注意事项
1.int显示宽度,如果超过,主动增大,底层4字节
2.时间可以–,//,…
3.字符串不分单双引号
4.当前时间是now() sysdate() Current_date()
5.char varchar是字符的个数不是字节的个数 可用binary和varbinary表示定长和不定长字节个数

create database AAA
drop database AAA
use AAA
create table XXX ();
DROP TABLE XXX ;
insert into XXX (A,B,C) values(a,b,c)
select A,B from XXX where
UPDATE XXX SET A=q, B=b
Delete from XXX where
update XXX set A=aa where
constraint name primary key ()
constriant name check (x>12 and x<22)
ALTER TABLE XXX DROP i; 字段操作
ALTER TABLE XXX ADD i INT;
ALTER TABLE XXX MODIFY c CHAR(10); 改类型
ALTER TABLE XXX CHANGE i j BIGINT;改名改类型

非外键约束

primary key
自增:auto_increment
not null
default
check()
unique

约束分类: 表级约束,列级约束
列级约束是定义在列属性中的,而表级约束是定义在列之后的,两者本质上没什么区别,而如果你的约束需要同时对多列进行约束那么就只能采用表级约束,因为表级约束面向的是表(当然就包括所有列),而列级约束只能针对该列进行约束。

外键约束

-- 添加班级信息
create table t_student(
		cno int(4) primary key auto_increment,
		cname varchar(7) unique,
		croom char(5) unique
);

alter table t_student rename to t_class;

insert into t_class values (null,'java1','r1423'),(null,'java2','r4534'),(null,'java3','r5643');

select * from t_class;

-- 外键约束只有表级约束没有列级约束,在创建表的时候添加外键约束
create table t_student(
		sno int(6) primary key auto_increment,
		sname varchar(5) not null,
		classno int(4),
		CONSTRAINT fk_stu_classno FOREIGN key (classno) REFERENCES t_class (cno)
);

-- 在创建表之后添加外键约束
create table t_student(
		sno int(6) primary key auto_increment,
		sname varchar(5) not null,
		classno int(4)
);
alter table t_student add CONSTRAINT fk_stu_classno FOREIGN key (classno) REFERENCES t_class (cno);

-- 添加学生信息
insert into t_student VALUES(null,'张三',1);
-- 报错 1452 - Cannot add or update a child row: a foreign key constraint fails (`dtest`.`t_student`, CONSTRAINT `fk_stu_classno` FOREIGN KEY (`classno`) REFERENCES `t_class` (`cno`))
insert into t_student VALUES(null,'张三',3);
insert into t_student VALUES(null,'张三',2);
insert into t_student VALUES(null,'张三',3);

select * from t_student;

-- 报错:1451 - Cannot delete or update a parent row: a foreign key constraint fails (`dtest`.`t_student`, CONSTRAINT `fk_stu_classno` FOREIGN KEY (`classno`) REFERENCES `t_class` (`cno`))
delete from t_class where cno=1;


在删除的时候先删除从表再删除主表
直接删除主表不行,因为有外键约束:
加入外键策略

-- 添加班级信息
create table t_student(
		cno int(4) primary key auto_increment,
		cname varchar(7) unique,
		croom char(5) unique
);

alter table t_student rename to t_class;

insert into t_class values (null,'java1','r1423'),(null,'java2','r4534'),(null,'java3','r5643');

select * from t_class;

-- 外键约束只有表级约束没有列级约束,在创建表的时候添加外键约束
create table t_student(
		sno int(6) primary key auto_increment,
		sname varchar(5) not null,
		classno int(4),
		CONSTRAINT fk_stu_classno FOREIGN key (classno) REFERENCES t_class (cno)
);

-- 在创建表之后添加外键约束
create table t_student(
		sno int(6) primary key auto_increment,
		sname varchar(5) not null,
		classno int(4)
);
alter table t_student add CONSTRAINT fk_stu_classno FOREIGN key (classno) REFERENCES t_class (cno);

-- 添加学生信息
insert into t_student VALUES(null,'张三',1);
-- 报错 1452 - Cannot add or update a child row: a foreign key constraint fails (`dtest`.`t_student`, CONSTRAINT `fk_stu_classno` FOREIGN KEY (`classno`) REFERENCES `t_class` (`cno`))
insert into t_student VALUES(null,'张三',3);
insert into t_student VALUES(null,'张三',2);
insert into t_student VALUES(null,'张三',3);

select * from t_student;

-- 报错:1451 - Cannot delete or update a parent row: a foreign key constraint fails (`dtest`.`t_student`, CONSTRAINT `fk_stu_classno` FOREIGN KEY (`classno`) REFERENCES `t_class` (`cno`))
delete from t_class where cno=1;


-- 外键策略1
updata t_student set classno=null where classno =2;
delete from t_class where cno=2;


-- 外键策略2  cascade级联操作
alter table t_student drop FOREIGN key fk_stu_classno;
alter table t_student add CONSTRAINT fk_stu_classno  FOREIGN key (classno) REFERENCES t_class (cno) on update CASCADE on DELETE CASCADE;
UPDATE t_class set cno=5 where cno =3;
delete from t_class where cno=5;
-- 会把学生一同删掉


-- 外键策略3  置空操作
alter table t_student drop FOREIGN key fk_stu_classno;
alter table t_student add CONSTRAINT fk_stu_classno  FOREIGN key (classno) REFERENCES t_class (cno) on update set null on DELETE set null;
UPDATE t_class set cno=5 where cno =3;

-- 策略2和策略三可以混着使用

-- 应用场合:朋友圈删除用级联,单位班级删除用置空

DQL

-- 常见的DQL操作

-- 对整个表查询

-- 显示部分列

-- 显示部分行,where子句

-- 显示部分行,部分列

-- 起别名,直接跟在后面,或者as别名,别名有特殊符号可以用单双引号括起来

-- 算数运算符在字段中,也可以起别名,但是如何应对为null的数据?

-- 去重操作,如果有多个字段,则是对组合生效
select DISTINCT job from emp;

-- 排序
select * from emp order by sal; -- 默认升序
select * from emp order by sal asc;
select * from emp order by sal desc;
select * from emp order by sal desc,deptno desc; -- 在一个升序的情况内相同的字段的另一个字段按照降序排列

-- where子句 + 关系运算符 =  >=  >  <  <=  <>  != , 字符串默认不区分大小写
select * from emp where job='TEACHER';
select * from emp where job='teacher';
select * from emp where BINARY job='TEACHER'; -- 想让他区分加binary

-- where子句 + 逻辑运算符  and   BETWEEN and(包含边界)  &&   or  ||  in(10,20)

-- 模糊查询
select * from emp where job like "%A%";
select * from emp where job like "_A%";

-- 关于null的判断
select * from emp where job is null;
select * from emp where job is not null;

-- 小括号的使用,增加可读性

函数

-- 函数:封装了特定功能可以直接使用,提高select的能力
-- 函数没有改变数据自身的值,只是进行加工处理展示新的结果

-- 单行函数和多行函数
-- 除了这五个多行都是单行
max(sal)
min(sal)
count(sal)
sum(sal)
avg(sal)




lower(name)
upper(name)

-- 单行函数
-- 1 字符串函数
select name,length(name),substring(name,2,3) from t_student  -- 从哪里开始,截取几个

-- 2 数值函数
select abs(-5),ceil(5.3),floor(5.9),round(3.14) from t_student  -- 会显示整个表
select abs(-5),ceil(5.3),floor(5.9),round(3.14) from dual; -- dual伪表,本身就不存在
select abs(-5),ceil(5.3),floor(5.9),round(3.14); -- 如果没有where条件可以不写from
select abs(-5) 绝对值,ceil(5.3),floor(5.9),round(3.14); -- 也可以取别名
select 10/3,10%3,mod(10,3);

-- 3 日期与时间函数  2023-03-14	2023-03-14	17:58:52
select CURRENT_DATE,CURDATE(),CURTIME();
SELECT now(),SYSDATE(),SLEEP(3),now(),SYSDATE();  
-- 当前时间和函数执行时间 2023-03-14 19:42:26	2023-03-14 19:42:26	0	2023-03-14 19:42:26	2023-03-14 19:42:29

-- 4 流程函数
select empno,sal if(sal>=2250,"gaoxin","dixin") as grand from emp;
select empno,sal,comm,sal+ifnull(comm,0) from emp;  -- 如果comm为null则取值0
select nullif(1,1),nullif(1,2); -- null 	1 如果相等和不相等
select job,
case job
	when "A" then "a"
	when "B" then "b"
	else "其他"
end "岗位"-- case等值判断
sal from emp;

select job,
case job
	when job>1 then "a"
	when job<1 then "b"
	else "D"
end "岗位"-- case区间判断
sal from emp;

-- 5 json函数

-- 6 其他函数

select DATABASE(),user(),version();


-- 多行函数在计算的时候会自动忽略null值
select count(*) from emp;
select count(1) from emp;





查询总结

-- 字段和多行函数不可以同时使用
SELECT num,AVG(sal) from emp  -- x  多对1
SELECT num,AVG(sal) from emp GROUP BY deptno;

SELECT num,AVG(sal) from emp GROUP BY deptno having avg(sal)>2000; -- 用于再一次过滤

-- 需要排除某一个字段,可以用where在分组前进行过滤,也可以用having在分组后进行过滤


SELECT column,group_function(COLUMN)
from table
[where condition]
[GROUP BY]
[HAVING]
[ORDER BY]

-- from where group select having group 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值