zoukankan      html  css  js  c++  java
  • 数据库进阶(四)

    一:Navicat可视化界面操作数据库

    """
    一开始学习python的时候 下载python解释器然后直接在终端书写
    pycharm能够更加方便快捷的帮助你书写python代码
    excel word pdf
    
    我们在终端操作MySQL 也没有自动提示也无法保存等等 不方便开发
    Navicat内部封装了所有的操作数据库的命令 
    用户在使用它的时候只需要鼠标点点即可完成操作 无需书写sql语句
    """
    

    安装方式

    直接百度搜索 有破解版的也有非破解
    非破解的有试用期 你如果不嫌麻烦 你就用使用
    到期之后重新装再使用 或者破解一下也很简单
    https://www.cr173.com/soft/126934.html
        
    下载完成后是一个压缩包 直接解压 然后点击安装 有提醒直接点击next即可
    安装教程参考:https://www.cnblogs.com/xuexianqi/p/12797170.html
    
    navicat能够充当多个数据库的客户端
    
    navicat图形化界面有时候反应速度较慢 你可以选择刷新或者关闭当前窗口再次打开即可
    
    当你有一些需求该软件无法满足的时候 你就自己动手写sql
    
    

    提示

    """
    1 MySQL是不区分大小写的
    	验证码忽略大小写
    		内部统一转大写或者小写比较即可
    			upper
    			lower
    
    2 MySQL建议所有的关键字写大写
    
    3 MySQL中的注释 有两种
    	--
    	#
    
    4 在navicat中如何快速的注释和解注释
    	ctrl + ?  加注释
    	ctrl + ?  基于上述操作再来一次就是解开注释
    	如果你的navicat版本不一致还有可能是
    	ctrl + shift + ?解开注释
    """
    

    二、 数据库练习操作题(多表操作)

    """
    课下一定要把握上课将的这几道题全部自己独立的理解并写出来
    
    在解决sql查询问题的时候 不要慌
    一步一步慢慢来  最终能够东拼西凑出来就过关了!!!
    
    """
    -- 1、查询所有的课程的名称以及对应的任课老师姓名
    -- SELECT
    -- 	course.cname,
    -- 	teacher.tname 
    -- FROM
    -- 	course
    -- 	INNER JOIN teacher ON course.teacher_id = teacher.tid;
    
    -- 4、查询平均成绩大于八十分的同学的姓名和平均成绩
    -- SELECT
    -- 	student.sname,
    -- 	t1.avg_num 
    -- FROM
    -- 	student
    -- 	INNER JOIN (
    -- 	SELECT
    -- 		score.student_id,
    -- 		avg( num ) AS avg_num 
    -- 	FROM
    -- 		score
    -- 		INNER JOIN student ON score.student_id = student.sid 
    -- 	GROUP BY
    -- 		score.student_id 
    -- 	HAVING
    -- 		AVG( num ) > 80 
    -- 	) AS t1 ON student.sid = t1.student_id;
    
    
    -- 7、 查询没有报李平老师课的学生姓名
    # 分步操作
    # 1 先找到李平老师教授的课程id
    # 2 再找所有报了李平老师课程的学生id
    # 3 之后去学生表里面取反 就可以获取到没有报李平老师课程的学生姓名
    -- SELECT
    -- 	student.sname 
    -- FROM
    -- 	student 
    -- WHERE
    -- 	sid NOT IN (
    -- 	SELECT DISTINCT
    -- 		score.student_id 
    -- 	FROM
    -- 		score 
    -- 	WHERE
    -- 		score.course_id IN ( SELECT course.cid FROM teacher INNER JOIN course ON teacher.tid = course.teacher_id WHERE teacher.tname = '李平老师' ) 
    -- 	);
    
    -- 8、 查询没有同时选修物理课程和体育课程的学生姓名
    --     (只要选了一门的 选了两门和没有选的都不要)
    # 1 先查物理和体育课程的id
    # 2 再去获取所有选了物理和体育的学生数据
    # 3 按照学生分组 利用聚合函数count筛选出只选了一门的学生id
    # 4 依旧id获取学生姓名
    -- SELECT
    -- 	student.sname 
    -- FROM
    -- 	student 
    -- WHERE
    -- 	student.sid IN (
    -- 	SELECT
    -- 		score.student_id 
    -- 	FROM
    -- 		score 
    -- 	WHERE
    -- 		score.course_id IN ( SELECT course.cid FROM course WHERE course.cname IN ( '物理', '体育' ) ) 
    -- 	GROUP BY
    -- 		score.student_id 
    -- 	HAVING
    -- 		COUNT( score.course_id ) = 1 
    -- 	);
    
    -- 9、 查询挂科超过两门(包括两门)的学生姓名和班级
    # 1 先筛选出所有分数小于60的数据
    # 2 按照学生分组 对数据进行计数获取大于等于2的数据
    SELECT
    	class.caption,
    	student.sname 
    FROM
    	class
    	INNER JOIN student ON class.cid = student.class_id 
    WHERE
    	student.sid IN (
    	SELECT
    		score.student_id 
    	FROM
    		score 
    	WHERE
    		score.num < 60 GROUP BY score.student_id HAVING COUNT( score.course_id ) >= 2 
    	);
    

    三、pycharm使用数据库— pymysql模块

    """
    支持python代码操作数据库MySQL
    """
    导入pymysql包
    pip3 install pymysql
    

    四、 sql注入问题

    """
    利用一些语法的特性 书写一些特点的语句实现固定的语法
    MySQL利用的是MySQL的注释语法
    select * from user where name='jason' -- jhsadklsajdkla' and password=''
    
    select * from user where name='xxx' or 1=1 -- sakjdkljakldjasl' and password=''
    """
    日常生活中很多软件在注册的时候都不能含有特殊符号
    因为怕你构造出特定的语句入侵数据库 不安全
    
    # 敏感的数据不要自己做拼接 交给execute帮你拼接即可
    # 结合数据库完成一个用户的登录功能?
    import pymysql
    
    
    conn = pymysql.connect(
        host = '127.0.0.1',
        port = 3306,
        user = 'root',
        password = '123456',
        database = 'day48',
        charset = 'utf8'  # 编码千万不要加-
    )  # 链接数据库
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    
    username = input('>>>:')
    password = input('>>>:')
    sql = "select * from user where name=%s and password=%s"
    # 不要手动拼接数据 先用%s占位 之后将需要拼接的数据直接交给execute方法即可
    print(sql)
    rows = cursor.execute(sql,(username,password))  # 自动识别sql里面的%s用后面元组里面的数据替换
    if rows:
        print('登录成功')
        print(cursor.fetchall())
    else:
        print('用户名密码错误')
    
  • 相关阅读:
    FZU 2150 Fire Game
    POJ 3414 Pots
    POJ 3087 Shuffle'm Up
    POJ 3126 Prime Path
    POJ 1426 Find The Multiple
    POJ 3278 Catch That Cow
    字符数组
    HDU 1238 Substing
    欧几里德和扩展欧几里德详解 以及例题CodeForces 7C
    Codeforces 591B Rebranding
  • 原文地址:https://www.cnblogs.com/dingbei/p/12865353.html
Copyright © 2011-2022 走看看