wolf-sun

写在前面

上篇文章学习了创建数据库和数据表,这篇文章将学习对数据表的增删改查操作。

系列文章

mysql之创建数据库,创建数据表

一个例子

上篇文章中,创建了数据库和数据表,数据表中还没有数据,这里我们为三张表中添加数据进行测试。

注意:为了避免字段名或者表明与系统的某些关键字重复,可以使用``包裹字符串,与sql server中的[]类似。``在键盘上方数字键最左边的那个键(英文输入法)

1、添加四个班级信息

use school;
-- 添加班级信息
insert into tb_class(`name`) values(\'信管01\');
insert into tb_class(`name`) values(\'信管02\');
insert into tb_class(`name`) values(\'信管03\');
insert into tb_class(`name`) values(\'信管04\');

2、添加学生信息

use school;
-- 添加学生信息
insert into tb_student(`Name`,`phone`,`age`,`gender`,`classid`) values(\'张三\',\'13810707322\',20,1,1);
insert into tb_student(`Name`,`phone`,`age`,`gender`,`classid`) values(\'李四\',\'13810707324\',19,1,2);
-- 批量添加
insert into tb_student(`Name`,`phone`,`age`,`gender`,`classid`) 
values
(\'王二\',\'13810707325\',18,1,2),
(\'麻子\',\'13810707323\',23,1,1),
(\'张三丰\',\'13810707321\',22,1,3),
(\'张无忌\',\'13810707326\',21,1,1),
(\'孙悟饭\',\'13810707328\',24,1,1),
(\'孙悟空\',\'13810707327\',23,1,4),
(\'鸣人\',\'13810707329\',25,1,1),
(\'路飞\',\'13810707320\',26,1,2);

3、添加学生成绩信息

-- 添加学生成绩
insert into tb_score(`course`,`score`,`stuid`) 
values
(\'高数\',89,1),
(\'计算机\',89,1),
(\'java\',89,1),
(\'.net\',89,1);

好了,有数据了,就可以学习查询,删除,修改等操作了。
4、查询所有学生信息

1 use school;
2 -- 查询所有的学生信息
3 select * from tb_student;
4 -- 等价于,不过在数据量非常大的时候,推荐使用下面的这种查询方式。
5 select id,`Name`,`phone`,Age,gender,createdate,classid from tb_student;

结果集

你会发现,在上篇文章中,已经为createdate添加了默认约束,但这里并没有显示结果。原来的字段名称为date,后来改为了createdate。默认约束并没有保持。

alter table tb_student change createdate createdate datetime default now();

测试,添加一条数据

insert into tb_student(`Name`,`phone`,`age`,`gender`,`classid`) values(\'明哥\',\'13810707322\',20,1,1);

结果

5、查询‘信管03’班的所有学生信息。

-- 查询信管03班的学生信息
select s.id \'编号\',s.`Name` \'名字\',s.`phone` \'电话\',s.Age \'年龄\',s.gender \'性别\',s.createdate as \'入学时间\',c.`name` as \'班级名称\' from tb_student s inner join tb_class c on s.classid=c.id;

从上面的sql语句可以看出,可以为字段名起别名,通过as 或者直接写别名,这点与sqlserver中类似。inner join的用法也类似。
结果

上面的结果,看起来比较乱,可以按照id进行升序排序。

use school;
-- 查询信管03班的学生信息
select s.id \'编号\',s.`Name` \'名字\',s.`phone` \'电话\',s.Age \'年龄\',s.gender \'性别\',s.createdate as \'入学时间\',c.`name` as \'班级名称\' from tb_student s inner join tb_class c on s.classid=c.id order by s.id;

6、取前3为学生的信息。

select 
s.id \'编号\',s.`Name` \'名字\',
s.`phone` \'电话\',s.Age \'年龄\',s.gender \'性别\',
s.createdate as \'入学时间\',c.`name` as \'班级名称\'
 from tb_student s 
 inner join tb_class c 
 on s.classid=c.id 
 order by s.id 
 limit 3;

注意:取前几条数据,这里与sql server中的用法不同,在sql server中取前几条数据使用的是top,而mysql使用limit。

7、删除id=1的学生信息。

use school;
-- 删除id=1的学生信息。
delete from tb_student where id=1;

这样直接删除,mysql会报一个错误。
Error Code: 1451. Cannot delete or update a parent row: a foreign key constraint fails (`school`.`tb_score`, CONSTRAINT `FK_Stuid` FOREIGN KEY (`stuId`) REFERENCES `tb_student` (`id`))

可以先加上这句话,再进行删除。

use school;
-- 删除id=1的学生信息。
set FOREIGN_KEY_CHECKS = 0;
delete from tb_student where id=1;

注:set FOREIGN_KEY_CHECKS = 0;取消外键检测。否则mysql会认为删除是非安全的。
9、更新所有的入学时间为空的学生信息,并设置入学时间为当前时间。

use school;
-- 更新所有的入学时间为空的学生信息,并设置入学时间为当前时间
SET SQL_SAFE_UPDATES = 0 ; 
update tb_student set createdate=now() where isnull(createdate);
select * from tb_student;

在使用mysql执行update的时候,如果不是用主键当where语句,会报如下错误,使用主键用于where语句中正常。

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

注:在修改的时候,需加上SET SQL_SAFE_UPDATES = 0 ;取消安全更新模式。如果想要提高数据库安全等级,可以在恢复回原有的设置,执行命令:SET SQL_SAFE_UPDATES = 1;

执行上面的语句,执行成功。

总结

好了,mysql中使用的增删改查就总结到这里,如果有sqlserver数据库的基础,学mysql还是很简单的。 下篇文章将介绍order by,group by等的使用。

分类:

技术点:

相关文章:

  • 2021-10-08
  • 2021-08-14
  • 2021-09-13
  • 2021-11-03
  • 2021-05-12
  • 2021-07-09
  • 2021-04-27
  • 2021-09-24
猜你喜欢
  • 2021-09-23
  • 2021-11-19
  • 2022-01-15
  • 2021-11-19
  • 2021-06-03
  • 2021-06-15
相关资源
相似解决方案