MySQL
Posted feixiangdecainiao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL相关的知识,希望对你有一定的参考价值。
分组查询
注意分组之后只能加上分组的字段,还有聚合函数,因为加上其他字段是没有意义的
select sex,avg(math) from student group by sex;
限定分组前的条件:在group by之前使用where限定。
限定分组之后的条件:having
select sex,avg(math) from student where math>70 group by sex having count(id)>2;
查询在数学成绩大于70分的人中按照性别分组并且每个组人数大于2
where和having的区别
1、where在分组之前进行限定,如果不满足条件就不准参与分组,having在分组之后进行限定,如果不满足结果就不会被查询出来。
2、where不能后面跟上聚合语句,having之后可以跟上聚合语句
分页查询
语法:limit,开始索引,每页查询的数
select * from student limit 0,3; select * from student limit 3,3;
公式,开始的索引当前的页码减去1,再成每页显示的条数。
select 字段列表 from表 where条件列表 group by分组字段 having分组之后的限定 order by 排序 limit 条件限定
模糊查询
占位符 "_"任意单个字符 "%"任意多个字符(0个也是可以的)
select * from student where name like ‘马%‘
查询姓马的
查询名字是三个字的人三个"_"
select * from student where name like ‘___‘
约束
(对表中的数据进行限定,保证数据的有效性和完整性)
分类:主键约束、非空约束,唯一约束(索引),外键约束
非空约束:not null 表示值不能是空的
创建表时候添加约束
create table stu( id int, name varchar(20) not null --非空约束 );
删除约束
alter table stu modify name varchar(20);
创建表之后添加约束
alter table stu modify name varchar(20) not null;
唯一约束:unique,表示值不能重复(null值 是可以重复的)
create table stu( id int , phone_number varchar(20) unique )
删除
alter table stu drop index phone_number;
创建表之后添加唯一约束
alter table stu modify phone_number varchar(20) unique;
主键约束:primary key
1、表示非空且唯一
2、一张表只能有一个主键约束
3、主键就是表中的唯一标识
创建表时候添加主键约束
create table stu( id int primary key auto_increment, -- 表示自增长 name varchar(20) )
删除主键约束
alter table stu drop primary key
删除自动增长
alter table stu modify id int -- 注意因为主键约束使用这个是不能直接删除的,所以这个可以用来删除自增长
添加自增长(通常和主键一起使用)
alter table stu modify id int auto_increment
添加主键约束
alter table stu modify id int primary key
外键约束:foreign key
1.在创建表时候可以添加外检约束
create table 表名(
constraint 外键名称 foreign key 外键列名 references 主表名称(主表列名称)
)
create table employee( id int primary key auto_increment, name varchar(20), age int , dep_id int , --外键对应主表的主键 constraint emp_dept_fk foreign key(dep_id) reference department(id) on update cascade--设置及联更新操作 )
这里不能直接删除department表,因为有其他表引用这个表。外键可以是null但是不能是不存在的值
删除外键
alter table employee drop foreign key emp_dept_fk;
创建表之后添加外键
alter table employee add constraint emp_dept_fk foreign key (dep_id) references department(id);
级联操作,添加外键的时候设置级联(谨慎使用,特别是级联删除,使用之前好好考虑)
部门id改变,引用department表的表中也需要修改
constraint emp_dept_fk foreign key(dep_id) reference department(id) on update cascade--设置及联操作
级联删除
constraint emp_dept_fk foreign key(dep_id) reference department(id) on delete cascade--设置及联删除操作
注意被引用中删除行,对应引用表中引用的就会被删除。
数据库的设计
1.多表之间的关系
1.一对一关系:人和身份证 一个人只能有一个身份证,一个身份证只能对应一个人
可以在任意的一方添加外键,指向另一方。并且让外键唯一,给外键添加唯一约束unique(直接合成一张表)
2.一对多或者多对一关系:部门和员工,一个部门有多个员工,一个员工只能对应一个部门。
实现方式:在多的一方建立外键指向一的一方的主键
3.多对多的关系:学生和课程之间的关系。
实现方式:通过中间表实现,中间表至少有两个字段,这两个字段分别指向两个表的主键,这两个字段分别作为两个外键,指向两张表的主键,这两个就是联合主键,
案列,旅游项目中
分类表->路线表 一对多
分类表
create category( cid int primary key auto_increment, cname varchar(100) not null unique )
线路表
create tab_route( rid int primary key auto_increment, rname varchar(100) not null unique, price doublel, rdate date, cid int , foreign key (cid) reference category(cid) )
用户表
create tab_user( uid int primary key auto_increment, username varchar(100) unique not null, password varchar(30) not null, name varchar (100) , birthday date, sex varchar(1) default ‘男‘, telephone varchar(11), email varchar(100) )
路线表->用户表 多对多
创建中间表favorite
create tab_favorite( rid int , date datetime, uid int , primary key(rid,uid),--联合主键 foreign key (rid) references tab_route(rid), foreign key(rid) references tab_user(uid) )
2.数据库设计的范式
第一范式:每列都是不可分割的原始数据
第二范式:在及第一范式的基础上, 非码属性必须完全依赖码属性(消除非主属性对主码属性的部分依赖)
函数依赖:如果通过A的属性的值可以确定
完全函数依赖:如果A是一个属性组,则B属性值的确定完全依赖A属性中所有的属性值
部分函数依赖:如果A是一个属性组,B属性的确定只需要A中的某一个确定
传递函数依赖:通过A属性确定B属性,由B属性确定C
码:字啊一张表中,如果一个属性或属性组,被其他所有属性完全依赖,就成这个属性是这个表的码
码属性:属性组中的所有属性
非码属性:除上面之外的。
第三范式:在二范式的基础上消除传递依赖,(这样就不会因为某个行的删除,对应系也会删除)
满足第一范式(属性不可分割)下面表中的码是学号和课程名
满足第二范式(非码属性完全依赖码属性)
满足第三范式(上面系主任依赖系名,系名依赖学号,删除学生对应的系和主任也会删除。)
数据库的备份
命令行:
语法:mysqldump -u用户名 -p密码 数据库名称> 保存路径
还原:登录数据库,创建数据库,使用数据库,执行文件source文件的路径
语法:source 上面保存文件的路径。
图形化工具:右键导出,右键执行sql脚本
以上是关于MySQL的主要内容,如果未能解决你的问题,请参考以下文章
连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段
使用 json rereiver php mysql 在片段中填充列表视图
关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段
修改MySQL密码报错“ERROR 1819 (HY000): Your password does not satisfy the current policy requirements“(代码片段