mysql数据管理,各种查询语句
mysql数据管理
外键
create table `grade`(
`gradeId` int(10) not null auto_increment comment '年级id',
`gradeName` varchar(20) not null comment '年级名称',
primary key(`gradeId`)
)engine=innodb default charset=utf8;
--学生表的gradeId引用年级表的gradeId
--定义外键key
--给外键添加约束reference引用
create table if not exists `student`(
`id` int(4) not null auto_increment comment 'id',
`name` varchar(30) not null default '匿名' comment '姓名',
`pwd` varchar(20) not null default '123123' comment '密码',
`sex` varchar(2) not null default 'nv' comment '性别',
`birthday` datetime default null comment '出生日期',
`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语言
数据库管理语言:
插入: insert into 表名(字段名) values(属性)
insert into grade(gradeName) values('大四');
insert into grade (gradeName) values('大二'),('大三');
更新:update set 表名 修改的字段和值 where 条件,不指定条件会修改所有的列。
update grade set gradeName='大一' where gradeId=1;
删除:delete from 表名
delete from grade where gradeId=1;
清空:truncate 表名
truncate grade;
truncate和delete删除数据的区别:
- truncate会清空自增归零,从1开始,delete不会(除非断电重启,因为mysql在内存中)。
- 不会影响事务。
查询:select 字段 from 表名
-- 查询表的所有字段
select * from grade;
-- 查询id字段
select gradeId from grade;
-- 起别名gradeid为id
select gradeId as id from grade;
-- 在查出来的数据前面加上字符串
select concat('加上字符串:',gradeName) as 名字 from grade;
-- 按照id条件查询
select gradeName as 名字 from grade where gradeId=2;
-- 按照name条件进行查询
select gradeName as 名字 from grade where gradeName='大二';
-- 去重
select distinct gradeId from grade;
-- 查询系统版本
select version();
-- 用来计算
select 100*3-1 as jisuanjieguo;
-- 查询自增的步长
select @@auto_increment_increment
模糊查询
like结合: %代表0到任意个字符,结合_代表一个字符
select gradeName from grade where gradeName like '大%';
select gradeName from grade where gradeName like '%er';
select gradeName from grade where gradeName like 'er_';
in:查询具体的一个或者多个值
select gradeName from grade where gradeName in('大er','大san');
联表查询
join(要连接的表)……on(等值判断)
select gradeName,name,sex from student inner join grade on where grade.gradeId=student.id;
操作 | 描述 |
---|---|
inner join | 如果表中至少有一个匹配,就返回 |
left join | 会从左表中返回所有的值,即使右表中没有 |
right join | 会从右表中返回所有的值,即使左表中没有 |
自连接
自己的表和自己的表连接,一张表拆为两张表。
select a.categoryName as father ,b.categoryName as son from category as a,category as b where a.categoryid=b.pid
排序
order By通过哪个字段排序。desc降序,asc升序。
select email from student order by email asc;
select email from student order by email desc;
分页
limit 起始页,页面的大小。
将数据分页显示,使用户体验更好。
select email from student limit 1,1;
子查询
在where语句中嵌套一个子查询。
select gradeName from grade where gradeName=(select name from student where name='匿名');
group by
通过什么字段来分组。
having
分组之后的条件