MySQL基础之?表连接约束外键分组分页排序唯一索引
Posted 四方游览
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL基础之?表连接约束外键分组分页排序唯一索引相关的知识,希望对你有一定的参考价值。
1.重要的重复:键的数据类型
1)数字相关
tinyint 255int 65535
bigint 42亿
decimal 十进制小数,实际是字符串保存,有精度的小数。
float 浮点型 保留有限位小数
double 双精度 保留双倍有限位小数
2)字符相关
char 固定长度,查询速度快,节约时间 最长255个字节varchar 可变长度 节约空间 最长255个字符
text 文本型 最长:65535个字符
3)时间
date,time,datetime,timestamp4)二进制:
blob5)枚举、set
enum(‘xl’,‘xxl’,‘xxxl’)set(‘a‘,‘b‘,‘c‘,‘d‘) # 任意组合
2.sql操作
(1)对数据库的操作
1)查看数据库
show databases;2)打开数据库:
use (数据库名);3)创建数据库
create database test default charset utf8;4)删除数据库
drop databases test;5)查看数据库下所有的表:
show tables;(2)对表的操作
1)创建表
create table student(id int auto_increment primary key,
name varchar(12) not null,
info varchar(22)) engine=innodb charset=utf8;
2)查询表
select * from student;3)查看表:
desc student; # 表结构show create table class G; # 建表的信息
4) 清空表:
保留自增id号:delete from student;不保留自增号:truncate table student;
5) 彻底删除表:
drop table student;
6) 修改表
alter table student auto_increment = 1;(3)对行的操作:
增删改查:
insert into student(name,info) values(‘tom‘,‘‘);#一次插入多个值:
insert into user(name,age) values(‘tom‘,22),(‘jim‘,23),(‘tomas‘,18),(‘jerry‘,19);
# 将临时表插入实体表
insert into t2(name) select name from user;
# 修改内容
update student set name=‘‘,info=‘‘ where name = ‘‘;
update user set age = 29 where age = 18;
update student set name=‘‘,info=‘‘ where name = ‘‘;
update user set age = 29 where age = 18;
# 查询的条件
select * from user where age between 18 and 22;
select * from user where age between 18 and 22;
# 综合查询
select * from user where age > 17 and name like ‘t%‘;
select name as s_name,age, 20 from user;
select name as s_name,age, ‘avg_20‘ from user;
select * from user where age > 17 and name like ‘t%‘;
select name as s_name,age, 20 from user;
select name as s_name,age, ‘avg_20‘ from user;
select * from user order by uid limit 3;
select * from user order by age desc limit 3;
select * from user order by age desc limit 3;
3、约束和条件查询
(1)主键约束
create table score(id int auto_increment not null,
student_id int not null,
class_id int not null,
score_num tinyint,
pimary key(id),
(2)外键约束
constraint fk_stu_cls foreign key (class_id) references class(cid)(3)唯一约束
unique uq_std_cls_id (student_id, class_id))engine=innodb default charset=utf8
(4)自增设置步长
1)修改会话,局部变量,只影响当前绘画(登录的用户),常用。默认为1
show session variables like ‘auto_incre%‘set session auto_increment = 2
2)修改全局,影响所有的会话。
show globle variables like ‘auto_incre%‘set globle auto_increment = 2
(5)特殊的外键:
1)一对一
外键加上唯一索引,就是一对一的关系。2)一对多
自带支持3)多对多
双向都有一对多关系,就是多对多关系。这种情况下,为了操作方便,会建立一张中间表,记录两表的关系。
中间表存储两个表的id,建立外键约束,如果需要,可以加唯一索引,将两个id加入。
(6)条件语句
1)分页
取前10行结果select * from student limit 10;
从第一条记录开始,取前10条
select * from student limit 0,10;
取第一条
select * from student limit 0 1;
取第二条
select * from student limit 1 1;
2)通配符
查询学生表中,以t开头的名字的学生select * from student where name like ‘t%‘;
查询以nd结尾的名字的学生
select * from student where name like ‘%du‘
查询由t开头的,两个字符组成的名字
select * from student where name like ‘t_‘;
3)排序
默认升序,从小到大select * from student order by id;
可设置为倒序,即从大到小
select * from stduent order by id desc;
4)分组
默认的查询都是一个分组,查询的结果必须是一个聚合函数:sum,avg,count,max,min等,或聚合的列,即跟group by后的列,是一对一的关系。
select count(id) from score where score_num > 60 group by id having count(id) > 1
mysql5.7版本,新增sql_mode=only_full_group_by,可以关闭,但不建议!
4、表连接
(1)左右连接 join
1)内连接
隐藏有null值的行2)外连接
左外连接 left join 全部显示左边的表的列右外连接 right join 全部显示右边的表的列
(2)上下连接 union
1)去掉重复内容
union
2)不去重
union all
以上是关于MySQL基础之?表连接约束外键分组分页排序唯一索引的主要内容,如果未能解决你的问题,请参考以下文章