zoukankan      html  css  js  c++  java
  • mysql之select,insert,delete,update

    写在前面

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

    系列文章

    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等的使用。

  • 相关阅读:
    软件包管理器(bzoj 4196)
    Aragorn's Story(hdu3966)
    染色(bzoj 2243)
    文艺平衡树(bzoj 3223)
    区间翻转(codevs 3243)
    Python 中 configparser 配置文件的读写及封装,配置文件存放数据,方便修改
    Python 中 openpyxl 模块封装,读写 Excel 文件中自动化测试用例数据
    Python 中 unittest 框架加载测试用例的常用方法
    Python 中 unittest 单元测试框架中概念、作用、运行、用例执行顺序、断言方法、装饰器
    接口自动化的应用场景、测试用例、自动化流程
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/4492592.html
Copyright © 2011-2022 走看看