python进阶08 MySQL基础补充
本次课程都是基于三张表格的使用
一、子查询
#如何找到‘张三’的成绩
#思路:先找到张三的学号,在拿这个张三的学号到成绩表里面去匹配,得出成绩
#如何用一条查询来得到结果
SELECT grade FROM grades WHERE student_number=(SELECT number FROM students WHERE name='张三');#后面括号内表示将学生表的查询结果,然后将这个查询结果嵌套到成绩表中去 #子查询不常用,99%的查询可以用连接查询来实现,所以一般都用连接查询
二、连接查询
1、在展示成绩的同时展示出其他相关信息
#连接(join)
(a JOIN b)#将a表和b表拼接在一起
SELECT * FROM (a JOIN b)#查询a表和b表拼接后的结果 va vb
1 a
2 b
3 #a和b拼接后(交叉连接,又称笛卡尔连接),会列出所有情况,其中一定有你需要的组合,筛选的工作需要自己来
va vb
1 a
2 a
3 a
1 b
2 b
3 b
#交叉连接会列出所有情况,有些不需要的他也会给你列出来,要是行数太多的话太浪费资源了,所以我们要在列的时候就筛选
(stedents JOIN grades ON students.number=grades.students_number); #用ON添加条件,前一个表的学生编号和后一个表的学生编号一样 SELECT students.number,name,grades FROM (stedents JOIN grades ON students.number=grades.students_number); SELECT students.number,name,grades FROM (stedents JOIN grades) WHERE students.number=grades.students_number;#这种思路也可以达到上面的效果,但这个是先拼接在筛选,速度比上面那个慢多了
#多个表拼接时的注意事项
(students JOIN grades ON students.number=grades.student_number JOIN subject ON grades.subject_number=subject.number) #两个条件要分开,三个表一起拼接
三、其他约束
1、插入一条记录时,某列没有插入值,会怎么样
#默认值
#不设置默认值的时候,默认值就是null
CREATE TABLE t_default(default_value INT);#不设置默认值,默认值就是null
INSERT INTO t_default VALUES ();#输出一各空值
SELECT * FROM t_default;#显示一个null #设置默认值
CREATE TABLE t_default(default_value INT DEFAULT 10);#用DEFAULT 这个关键字来设置默认值 10
#这样,在没有给定该列值得情况下,使用默认值10 SHOW CREATE TABLE t_default \G; #在查询创建信息后面加上一个\G,可以显示默认值
2、确保某列的值不为空
#非空
#要限制一个列的值不能为空的关键字NOT NULL
CREATE TABLE t_notnull(notnull_value INT ONT NULL);#在后面加个ONT NULL 这一列就设置为非空列,必须填数据
#这样就不能在这一列中插入空数据了
3、确保某列的值不重复
#唯一键 UNIQUE KEY()#在括号内填入需要设置为唯一键的列
CREATE TABLE t_unique(unique_value INT,other_value INT,UNIQUE KEY(unique_value))#unique_value这一列的值就不能重复了
#主键
#通常每张表都需要一个主键来体现唯一性(同时要非空,与唯一键的区别就在这里)
CREATE TABLE t_primarykey(primary_value INT,PRIMARY KEY(primary_value))#这样就把primary_value这个列变为了主键 #主键=非空+唯一
#自增长
#如果希望某列整数(必须是整型)的值,默认加一填充
CREATE TABLE t_incr(incr_val INT AUTO_INCREMENT,PRIMARY KEY(incr_val))) #通常使用了AUTOINCREMENT的列是一个主键 INSERT INTO t_incr VALUES ();#按道理来说,主键非空,所以输入空值会报错,但由于有自增长在,所以他会自动给你加上去1 #功能:自动生成ID号或者流水号,号码并不在乎,单纯为了保证每个号码不同
4、确保某列的值必须参照另一列
#外键
#默认情况下,一列数据与其他列之间没有什么关系,如果希望某列的数据与某张表主键中有的值
#换句话说,我要限制A表的学号必须全部都是在B表中有的 CREATE TABLE c(c_col INT,PRIMARY KEY(c_col));#设定c表的主键 CREATE TABLE d(d_col INT,FOREIGN KEY(d_col) REFERENCES c(c_col));#这样,在向d表插入值时,如果d_col的值不在c表的c_col列中,则插入失败,插入的数值不会限制唯一性
四、补充
1、多个地方需要操作mysql那么游标需要多个
cur1=conn.cursor()
cur2=conn.cursor()
cur3=conn.cursor()
cur4=conn.cursor()
2、关于表结构的修改
#1、对开发而言不常用,项目很少回去做改动
#2、改表结构的时候,会出现数据丢失,这就需要专门的DBA(数据库管理员)或运维来做
3、作业
CREATE TABLE students(
id INT AUTO_INCREMENT ,#都加上非空
number CHAR (9) NOT NULL ,
name VARCHAR (20) NOT NULL ,
age INT DEFAULT 0 ,#设置默认值为0
birth DATE ,#无限制
UNIQUE KEY (number) ,#唯一键
PRIMARY KEY (id)#主键
);
CREATE TABLE subjects(
id INT AUTO_INCREMENT,
number CHAR (4) NOT NULL ,
title VARCHAR (30) NOT NULL ,
duration INT NOT NULL , UNIQUE KEY (number),
PRIMARY KEY (id)
);
CREATE TABLE grades (
id INT AUTO_INCREMENT,
stud_number CHAR (9) NOT NULL ,
subj_number CHAR (4) NOT NULL,
grade INT NOT NULL,
UNIQUE KEY (stud_number,subj_number) #这样就可以让他俩的组合唯一
PRIMARY KEY (id)
);
CREATE TABLE grades(
id INT AUTO_INCREMENT,
stud_number CHAR (9) ,
subj_number CHAR (4) ,
grade INT NOT NULL, FOREIGN KEY (stud_number) REFERENCES students(number),#外键的实现
FOREIGN KEY (subj_number) REFERENCES subjects(number),
PRIMARY KEY (id)
);
python进阶08 MySQL基础补充的更多相关文章
-
python进阶10 MySQL补充 编码、别名、视图、数据库修改
python进阶10 MySQL补充 编码.别名.视图.数据库修改 一.编码问题 #MySQL级别编码 #修改位置: /etc/mysql/mysql.conf.d/mysqld.cnf def ...
-
Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)
day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库: 简称:DataBase ---->DB 数据库即存放数据的仓库, ...
-
python进阶07 MySQL
python进阶07 MySQL 一.MySQL基本结构 1.认识MySQL #MySQL不是数据库,它是数据库管理软件 #MySQL如何组织数据 #如何进入MySQL数据库 #其他注意事项 #以表格 ...
-
python进阶09 MySQL高级查询
python进阶09 MySQL高级查询 一.筛选条件 # 比较运算符 # 等于:= 不等于:!= 或<> 大于:> 小于:< 大于等于>= 小于等于:<= #空: ...
-
python学习之-- Mysql 基础知识
数据库介绍及MYSQL基础操作了解 关系型数据库(RDBMS)是按照数据结构来组织,存储和管理数据的仓库.特点:1:数据以表格的形式出现2:每行为各种记录名称3:每列为记录名称所对应的数据域4:许多的 ...
-
python 操作 mysql基础补充
前言 本篇的主要内容为整理mysql的基础内容,分享的同时方便日后查阅,同时结合python的学习整理python操作mysql的方法以及python的ORM. 一.数据库初探 在开始mysql之前先 ...
-
Python进阶08 异常处理
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 本文特别感谢kylinfish的纠正,相关讨论见留言区. 异常处理 在项目开发中, ...
-
Python进阶(面向对象编程基础)(三)
6.类属性和实例属性名字冲突怎么办 修改类属性会导致所有实例访问到的类属性全部都受影响,但是,如果在实例变量上修改类属性会发生什么问题呢? class Person(object): address ...
-
Python进阶(面向对象编程基础)(二)
1.初始化实例属性 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'ziv·chan' #定义Person类的__init__方法 ...
随机推荐
-
Windows Server 2003 Sp2 下无法安装SQL Server 2008 Management Studio Express问题
Windows Server 2003 Sp2 下无法安装SQL Server 2008 Management Studio Express问题钉子 发表于 2010-5-22 1:42:51问题描述 ...
-
javascript获取鼠标位置
首先不同浏览器中event位置属性的分析: 1. IE的event.x,event.y是以事件触发元素的父元素外界为参考点(不包括滚动距离) 2. Firefox的event.pageX,event. ...
-
ps中套索工具怎么使用的方法
ps中套索工具怎么使用的方法 http://jingyan.baidu.com/article/5553fa82e864cc65a2393482.html
-
Linux批量重命名文件
五种方法实现Linux批量重命名文件 Linux批量重命名文件是指对某些特定的文件统一进行重新命名,以改变原来一批文件的名称,这里介绍五种方法来实现. Linux批量重命名文件会涉及到改变一个字母.改 ...
-
threading多线程总结
threading用于提供线程相关的操作,线程是应用程序中工作的最小单元.python当前版本的多线程库没有实现优先级.线程组,线程也不能被停止.暂停.恢复.中断. threading模块提供的类: ...
-
【ShaderToy】画一个球体
嗯,其实渲染球体,可以看做就是一个2d圆形图案+渲染光泽的函数. 定义球体结构——半径,球心坐标 struct Sphere { vec3 center; float radius; };edzx- ...
-
Python学习之MySQLdb模块
摘要: MySQLdb模块用于操作mysql数据库.1.安装MySQLdb模块 yum install MySQL-python -y2.操作流程①.导入模块: import MySQLdb②.连接数 ...
-
执行Import-SPWeb报错的解决办法
题描述] Import-SPWeb : Requested value 'PublishingPages' was not found. [解决办法] 1.找到CPM文件 2.把cpm文件后缀名改为c ...
-
初学Oracle
初学Oracle,遇到了很多的问题,下载的是Oracle11g,没有找到合适的管理工具,所以用sql plus 创建表,以下是本人总结的一些sql plus的命令行的命令,希望对大家有用 与sql p ...
-
webqq协议分析之~~~~验证是否需要验证码
对于小黄鸡我想大家(喜欢在群里bb的人...)肯定一点都不陌生,那段时间大家在群里对小鸡是各种调戏啊,都有点不忍直视.那时我便想能不能自己也做个呢,后来想想还是算了吧,自己技术太渣渣,然后就不了了之. ...