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

分组之后的条件

posted @ 2022-07-18 11:10  路漫漫qixiuyuanxi  阅读(7)  评论(0编辑  收藏  举报