Python数据库1. 数据库简介

1.1 数据库简介

一.分类:

1. 关系型数据库(SQL)  存储方式固定,安全?2. 非关系型数据库(NoSQL  (Not Only SQL))存储方式比较灵活,存储数据的效率比较高, 不太安全
  • 1.关系型数据库(SQL)

    某班级学生信息

    id name sex age 1 王刚 男 20 2 孙丽 男 20 3 王永恒 男 20 4 郑俊杰 男 20 5 陈芳 男 20 6 伟朋 男 20

  • 2.非关系型数据库(MongoDB) 语法基本不一样

    { id:1, 姓名:‘王刚”,sex: ‘男’, age: 2日, tel :13811371377,增加项目:{ XXX:xxX, xXX: xXX,}

    }

二.MySQL是关系型数据库管理系统之一:

    关系型数据库管理系统:采用关系模型(二维表结构)    来组织管理数据的数据库系统。?    把数据保存在不同的表中,而不是将数据放在一个大仓库中。?    MySQL不是数据库,它是数据库管理软件?    一个MySQL 可以创建多个数据库  每个数据库可以创建多个表    每个表有多个字段

三.MySQL表中的数据:

    先创建字段  在插入信息

1.2 MySQL库/表级操作

1.MySQL进入与退出

mysql –uusername -ppasswordmysql> exit

2.库级操作语句

1.显示所有的库:show databases;2.创建库:create database [if not exists] db_name; 重复创建会报错, 可以加上if not exists?3.删除库:drop database [if exists] db_name;如果不知道数据库是否存在,记得加if exists?4.进入数据库:use db_name;

3.表级操作语句

1.显示所有的表:show tables;2.创建表:create table [if not exists] tb_name (create definition…);重复创建会报错, 可以加上if not exists?3.显示创建表的信息:show create table tb_name;4.删除表:drop table tb_name;5.细节表字段 :desc tb_name;

4.注意事项

1.大小写:不严格区分大小写,默认大写为程序代码,小写为程序员写的代码但是  插入的数据,字段区分大小写?2.语句结束符:每个语句都以;或者\G结束3.类型:强制数据类型,任何数据都有自己的数据类型4.逗号:创建表的时候最后一行不需要逗号
?    1.create table student (    name varchar(20),age int, sex char(20)    );

    2.show create table student;???

1.3 MySQL表中数据的操作

1.插入数据:

1.指定字段插入:

INSERT INTO tb_name(field_name)  VALUES (‘field_values‘);默认为空

2.全字段插入:

INSERT INTO tb_name VALUES (‘all_values‘);

3.多行插入:

INSERT INTO tb_name(field_name) VALUES (value_1), (value_2), …;

2.查询数据:

1.全字段查询:

SELECT * FROM tb_name;

2.指定字段查询:

SELECT field_names,field_age  FROM tb_name;

3.带条件的查询:

SELECT field_names FROM tb_name WHERE conditions; 

3.修改数据:

1.修改所有数据:

UPDATE  tb_name  SET field_1=value_1 

2.修改多个:

UPDATE  tb_name  SET field_1=value_1, field_2=value_2 …;

3.修改满足条件的数据:

UPDATE  tb_name  SET field_1=value_1  WHERE  conditions; 注意:一定要写where条件,不然会修改表中全部数据

4.删除数据:

1.删除表中所有数据:

DELETE  FROM  tb_name;

2.删除表中满足条件的数据:

DELETE  FROM  tb_name  WHERE  conditions;注意:一定要写where条件,不然会删除表中全部数据
?    1.insert into student values(‘爱我‘,25);

    2.insert into student(name) values(‘爱我‘,25);

    3.insert into student values(‘爱我‘,25),(‘中华‘,18);?    4.select name,age from student;?    5.select name,age from student where name=‘‘ ;?    6.update student set age=20 where name=‘‘;????

1.4 MySQL数据类型

1.数值类型 :

  数值类型              特性?  TINYINT       用一个字节存放整数(0, 255)?  SMALLINT      两个字节(0, 65535)?  MEDIUMINT     三个字节(0, 16777215)?  INT           四个字节(0, 4294967295 )?  B IGINT       八个字节?  FLOAT(M, N)   单精度浮点型(4个字节)?  DOUBLE(M, N)  双精度浮点型,m总个数,d小数位(8字节 )

2.字符类型 :

 字符类型      特性?#char(size)     保仔固定长度的字符串(可包含字母、数字                以及特殊字符)。在括号中指定字符审的长度                最多255个字符#VARCHAR(size)   保存可变长度的字符串(可包含字母、数字以及特                殊字符)。在括号中指定字符中的最人长度。最多                255个字符。如果值的长度人干255,                则被转换为TEXT类型。
TINYTEXT/TINYBLOB      用来存放较短文本数据!                        二进制数据,最多255个字符?TEXT /BLOB              用来存放长文本数据/存放二进制                        数据,最多65535个字符
LONGT EXT/LONGBLOB      同上,区别在与可以存放的                        数据最大为4294967295个字符
ENUM            ENUM类型的数据实际是一个包含多 个固定值的                列表,贝能选择这些值(包括NULL值)。例如,                如果希望某个字段包含"A”、"B" 和"C",必须                这样定义: ENUM (‘A‘, ‘B’‘, ‘C‘),只有这                些值(或NULL值)能够填充到该字段中。

3.时间日期类型:

时间日期类型              特性date                日期格式: 2014-09-18time                时间,格式: 08:42:30datetime            日期时间,格式: 2014-09-18 08:42:30timestamp           自动存储记录修改的时间year                存放年

create table tb2(     id INT,                 name VARCHAR(20),      #指定长度,最多65535个字符。  变长字符串     sex  CHAR(4),          #指定长度,最多255个字符。    定长字符串

     price DOUBLE(4,2),     #双精度浮点型,m总个数,d小数位     detail text,           #可变长度,最多65535个字符     dates DATETIME,        #日期时间类型 YYYY-MM-DD HH:MM:SS     ping  ENUM(‘好评‘,‘差评’)      #枚举, 在给出的value中选择);

insert into tb values (1, ‘裤子‘, ‘男‘, 20.0, ‘这条裤子超级好!!!‘, now(), ‘好评‘);


?    create table su(        id  int,        name varchar(20),        age tinyint,        sex enum(‘M‘,‘F‘));??

1.5 MySQL数据库(二)

1.筛选条件

  • 1.比较运算符:

    IS NOT NULL IS NULL 小于等于: <= 小于: < 大于等于: >= 大于: > 不等于: != 或 <> 等于: = ( 注意!不是 == )

  • 2.逻辑运算符:

    AND 与 OR 或 NOT 非

  • 3.排序(order by): columns 列

    SELECT columns(*) FROM tb_name ORDER BY 字段 [asc/desc] ; 正序:asc(默认) 倒序:desc

  • 4.限制(limit):

    SELECT columns FROM tb_name LIMIT start, count ; LIMIT count; LIMIT start, count;

  • 5.去重(distinct):

    SELECT DISTINCT columns FROM tb_name; 去重给我们显示一下 并不会影响以前的数据

  • 6.模糊查询: like ‘%’

    1. 任意多个字符: %
    2. 任意一个字符: _
  • 7.范围查询:
    1. 连续范围: BETWEEN a AND b a <= value <= b
    2. 间隔返回: IN a in (10, 20, 30 […])
?    select * from student where id <>3;    select * from student where age is NULL ;    select * from student where class="1" and id=3 ;    select * from student order by class;    select * from student limit 3;    select * from student limit 3,4;?    select distinct * from student ;?    select * from student where name like ‘李%‘;    select * from student where name like ‘李__‘;    select * from student where id between 2 and 4;    select * from student where id in (1,3,5)????

2.聚合与分组(重点和难点)

  • 1.常用聚合函数 (与分组一起使用)

    统计个数: COUNT(column) 最大值: MAX(column) 最小值: MIN(column) 求和: SUM(column) 平均值: AVG(column) 列出字段全部值: GROUP_CONCAT(column)

  • 2.分组查询(group by):

    SELECT group_column, aggregations FROM tb_name group BY group_column;

    在分组的情况下,只能够出现分组字段和聚合字段 其他的字段没有意义,会报错!

  • 3.聚合筛选(having): (在聚合筛选后在筛选)

    SELECT group_column, aggregations FROM tb_nameGROUP BY group_column HAVING conditions; 加having条件表达式,可以对输出的结果做出限制

  • 4.执行顺序:

    先是执行:where 然后执行:聚合函数和别名 最后执行:having

?    select count(age) from student;    select class,group_concat(name) from student group by class;    select age,group_concat(name) from student group by age;    select age,group_concat(name) from student group by age having  age <20;

?

3 连接查询(需要多张表)

  • 1.无条件内连接:

    无条件内连接,又名交叉连接/笛卡尔连接 第一张表种的每一项会和另一张表的每一项依次组合[inner]可有可无

    Mysql> select * from student [inner] join 表2

  • 2.有条件内连接:

    在无条件内链接的基础上,加上一个on子句 返回条件成立的 当连接的时候,筛选出那些有实际意义的记录来进行组合

Mysql> select * from student [inner] join 表2 on student.id =表2.id;
  • 3.外连接( {left | right} join ):

    左外连接: (以左表为基准) 哪个重要放左边

    两张表做连接的时候,在连接条件不匹配的时候 留下左表中的数据,而右表中的数据以NULL填充

    mysql> select * from student left join 表2 on student.id= 表2.id;

1.6 MySQL数据库(三)

1.表结构修改

  • 1.修改表名:

    alter table tb_name rename to new_name;

  • 2.修改字段名:

    alter table tb_name change name new_name data_type;

  • 3.修改字段类型:

    ALTER TABLE tb_name MODIFY field_name data_type;

  • 4.添加字段:

    ALTER TABLE tb_name ADD [COLUMN] field_name data_type;

  • 5.删除字段:

    ALTER TABLE tb_name DROP [COLUMN] field_name;

?    1.alter table new_table rename to old_table;

    2.alter table old_table change id stu_id int;

    3.alter table old_table modify  stu_id tinyint;?    4.alter table old_table add name varchar(20);?    5.alter table old_table drop name  ;??

2.约束条件 (所有条件都要写全 覆盖关系)

1.默认约束(default):

插入数据的时候,如果没有明确为字段赋值,则自动赋予默认值 在没有设置默认值的情况下,默认值为NULL

    CREATE TABLE tb(        id int default ‘a’ ,        name varchar(20)    );
2.非空约束(not null)

限制一个字段的值不能为空, Insert的时候必须为该字段赋值空字符不等于NULL

CREATE TABLE tb(    id int not null,    name varchar(20));
3.唯一约束(unique key)

限制一个字段的值不重复 该字段的数据不能出现重复的确保字段中值的唯一

CREATE TABLE tb(    id int unique key,    name varchar(20));
4.主键约束(primary key)

通常每张表都需要一个主键来体现唯一性 每张表里面只能有一个主键 主键 = 非空 + 唯一

CREATE TABLE tb(    id int primary key,    name varchar(20));
5.自增长约束(auto_increment)

自动编号,只能和主键组合使用, 一个表里面只能有一个自增长 auto_increment 要求用在主键上

CREATE TABLE tb(    id int auto_increment,    name varchar(20));
6.外键约束(foreign key)

保持数据的一致性 我有的你一定有, 你没有的, 我绝对没有

  1. B表中的id_b字段,只能添加 id_a中已有的数据。
  2. A表中id_a 被参照的数据, 不能被修改和删除

    CREATE TABLE a( id_a int primary key, name varchar(20) );

    CREATE TABLE b( id_b int primary key, name varchar(20), foreign key (id_b) references a(id_a) );

?    1.CREATE TABLE tb(            id int default ‘0’ ,            name varchar(20) default ‘无名‘        );    insert into tb(id,name) values(1,‘撒旦‘);    insert into tb(id) values(2);    insert into tb(name) values(‘阿斯顿‘);    insert into tb values(default,default);?###########################

    2. alter table tb modify id int not null default 0;

??

3.表关系(通过外键实现 主表字段必须唯一)

1.一对一
一个学生只有一条详细信息用外键的方式,  把两个表的主键关联
2.一对多
学院与学生之间的关系就是一对多的关系,通过外键关联来实现这种关系。?insert into department values(1,‘外语学院‘),(2,‘计算机学院‘);?insert into student values(1,‘佳能‘,2),(2,‘lucky‘,1);
3.多对多
学生要报名选修课,一个学生可以报名多门课程,一个课程有很多的学生报名,那么学生表和课程表两者就形成了多对多关系。?对于多对多关系,需要创建中间表实现。
insert into cours values (1, ’python编程’),  (2, ’大学英语’),  (3, ‘音乐鉴赏’);?insert into `select` values(1,3);   表示学号为一的同学选择了音乐鉴赏这门课程
???##创建学院表    create table department(        d_id int primary key auto_increment,     # 学院id       d_name varchar(20) not null              # 学院名    );???##创建学生表?    create table student(       s_id int primary key auto_increment,    # 学生id       s_name varchar(20) not null,            # 学生名字       dept_id int not null,              #  所属学院 id       foreign key(dept_id) references department(d_id)  #外键?#建立详细学生表:

    create table student_details(        id int primary key,        sex varchar(20) not null,        age  int,        address varchar(20) comment ‘家庭住址‘,        parents varchar(20),        home_num varchar(20),?        foreign key (id) references student(s_id)    ););??#建立课程表:?    create table cours(        cours_id int primary key auto_increment,        cours_name varchar(20) not null     );???# 选课表  (中间表)?    create table select(        s_id int,            #用来记录学生id        cours_id int,        #用来记录 课程id        primary key(s_id,cours_id),    # 联合主键 ?        foreign key(s_id) references student(s_id),       #  关联学生id?        foreign key(cours_id) references cours(cours_id)  # 关联 课程id    );???

    select * from institute join student on institute.id = student.ins_id;

    select student.name,course.name from student join sel join course on student.id = sel.s_id and course.id = sel.c_id;

    select student.name,course.name from student,sel,course where student.id = sel.s_id and course.id = sel.c_id;?

原文地址:https://www.cnblogs.com/dyf25288-/p/11701582.html

时间: 2024-10-07 18:02:09

Python数据库1. 数据库简介的相关文章

python操作mysql数据库

连接数据库 输入值 存入数据库 关闭 import string import mysql.connector conn=mysql.connector.connect(user='root',password='test',database='dalian',use_unicode=True) cursor=conn.cursor() a=raw_input('enter an id: ') b=raw_input('enter a name: ') while(a!='quit' or b!

python 全栈 数据库 (三) python操作数据库

python 操作MYSQL数据库主要有两种方式: 使用原生模块:pymysql ORM框架:SQLAchemy 一.pymysql 1.1下载安装模块 第一种:cmd下:执行命令下载安装:pip3 install pymysql 第二种:IDE下pycharm python环境路径下添加模块 1.2使用操作 #导入模块 import pymysql #建立连接通道,建立连接填入(连接数据库的IP地址,端口号,用户名,密码,要操作的数据库,字符编码) conn = pymysql.connect

Python使用MySQL数据库(新)

之前写过一篇 Python使用MySQL数据库的博客,主要使用的是Python2和MySQLdb驱动. python使用mysql数据库 然而,2016年开始,我从Python2切换到了Python3,Python2已经基本不再使用,MySQLdb驱动从2014年1月停止了维护.所以,打算重新再来写这篇博客. Python2 ---> Python3 MySQLdb --> PyMySQL 一,安装PyMySQL Python是编程语言,MySQL是数据库,它们是两种不同的技术:要想使Pyth

MySQL---连接器(python如何操作数据库媒介,基于python语言)

MySQL — 连接器 连接器的概念 它们往往是一类Python包,或者是一类已经写好的Python库.这些库提供了我们Python去连接数据库服务器的基本功能. ? 既然它是一个包,那么我们首先学会导入这个包 #! /usr/bin/env python3 # coding: utf-8 ? from mysql import connector print('导入成功') 执行以上代码 $ python3 test_connector.py 导入成功 表示我们成功导入了相关的包或者模块 连接

python使用mysql数据库

一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的linux 仓库中都会有mysql ,我们只需要通过一个命令就可以下载安装: Ubuntu\deepin >>sudo apt-get install mysql-server >>Sudo apt-get install  mysql-client centOS/redhat >

Python学习之使用Python操作Redis数据库

最近在写一个检查一台服务器上所有游戏区服配置文件中redis某个key值大小的脚本,本打算使用shell+awk+sed的方式去解决这个问题,但是由于redis的配置信息是php数组形式.shell脚本一时没有写出来,就请教他人帮忙写了个python脚本,但是自己python不是很精通,于是按照脚本中涉及到的python知识现学现用,然后根据自己的需求更改脚本.这里分享一下如何使用python操作redis数据库. Redis的Python驱动源码下载地址是https://github.com/

Windows下安装MySQLdb, Python操作MySQL数据库的增删改查

这里的前提是windows上已经安装了MySQL数据库,且配置完毕,能正常建表能操作.在此基础上只需安装MySQL-python-1.2.4b4.win32-py2.7.exe就ok了,只有1M多.这个有点类似jdbc里的那个jar包. 下载链接:http://sourceforge.net/projects/mysql-python/ , 百度云盘 :http://pan.baidu.com/s/1dDgnfpR 密码:7bna 接着import MySQLdb就能使用了,下面给出测试代码:

使用python操作mysql数据库

这是我之前使用mysql时用到的一些库及开发的工具,这里记录下,也方便我查阅. python版本: 2.7.13 mysql版本: 5.5.36 几个python库 1.mysql-connector-python 是MySQL官方的Python驱动 https://dev.mysql.com/doc/connector-python/en/ 安装: pip install mysql-connector 示例代码: https://github.com/mike-zhang/pyExample

使用Python创建MySQL数据库实现字段动态增加以及动态的插入数据

应用场景: 我们需要设计一个数据库来保存多个文档中每个文档的关键字.假如我们每个文档字符都超过了1000,取其中出现频率最大的为我们的关键字. 假设每个文档的关键字都超过了300,每一个文件的0-299号存储的是我们的关键字.那我们要建这样一个数据库,手动输入这样的一个表是不现实的,我们只有通过程序来帮我实现这个重复枯燥的操作. 具体的示意图如下所示: 首先图1是我们的原始表格: 图1 这个时候我们需要程序来帮我们完成自动字段的创建和数据的插入. 图2 上图是我们整个表的概况.下面我们就用程序来