Mysql 增删改查 Python交互01

版权声明:转载请声明 https://blog.csdn.net/dirckes8813/article/details/84890829

1. 数据库

- 1. 数据库 :存储数据的仓库
- 2. 数据库软件分类 :
    * 1. MySQL,Oracle,SQL Server,MongoDB,DB2,
         MariaDB,Redis...
    * 2. 分类 :
        根据数据的存储方式不同,划分为 :
        + 1. 关系型数据库
            采用标准化的行和列构建二维表存储数据,
            表与表之间的逻辑关联称为关系。
            MySQL, Oracle, SQL Server,DB2,MariaDB
        + 2. 非关系型数据库     (NoSQL-Not Only SQL)
            采用键值对的形式存储数据
            MongoDB,Redis(缓存)
    * 3. 如何选择
        + 1. 数据存储方式
        + 2. 是否开源 :
                开源 :MySQL MariaDB MongoDB
                闭源 :Oracle DB2 ,SQL Server
        + 3. 是否跨平台 :
                不跨平台 : SQL Server
                跨平台 :...

2. 数据库与数据仓库

数据库 :提供数据存储和数据操作的服务(DataBase)
数据仓库 :存储海量数据,提供数据分析与挖掘
                    (Data WareHouse - DW/DWH)

3. MySQL 数据库

1. 关系型数据库 :
        1. 数据以二维表形式存储
        2. 表中的每一行,称为一条记录
        3. 表中的每一列,称为一个字段
        示例 :
            1. 关系型数据库存储数据
                表1        学生信息表
                            姓名    年龄    班级
                            星矢     20        一班
                            水冰月 18        二班
                表2   班级信息表
                            班级    班主任 人数
                            一班    老王        30
                            二班    老张        50
            2. 非关系数据库存储数据
                    {"姓名":"星矢","年龄":"20"}
2. 跨平台 :
     Ubuntu,windows, CentOS, Linux...
3. 支持多种开发语言 :
     Python,Java,PHP...

4. MySQL 安装

1. Ubuntu :
        1. 安装服务端
            sudo apt-get install mysql-server
        2. 安装客户端
            sudo apt-get install mysql-client
        3. ubuntu 软件更新
            1. sudo apt-get update
                 访问源列表中的所有网址,读取软件列表,保存
                 到本地(/var/lib/apt/lists/)
            2. sudo apt-get upgrade
                 把本地已安装软件与刚下载的软件列表进行对比
                 如果当前软件版本低,则更新
            3. 修复依赖关系
                 sudo apt-get -f install
2. windows :
     下载安装包 xxx.msi
3. Mac :
     下载安装包 8.0

5. 启动和连接数据库

1. 服务端启动 :
    1. 查看MySQL状态
            sudo /etc/init.d/mysql status
         连接服务端
          sudo /etc/init.d/mysql start | stop | restart
2. 连接客户端
    1. 命令格式 :
        mysql -h主机地址 -u用户名 -p密码
        本机 :
        mysql -hlocalhost -uroot -p123456
        mysql -uroot -p123456

6. MySQL 语句规范

1. 每一条命令以;结束
2. SQL命令不区分大小写
3. 使用/c终止当前命令

7. 基本SQL命令

1. 库的基本操作
    1. 查看已有库
        show databases;
    2. 创建数据库
        create database 库名; (默认字符集为Latin1)
        create database 库名 character set utf8;
        建库的同时指定字符集
    3. 查看创建库的语句(查看字符集)
        show create database 库名;
    4. 查看当前所在库
        select database();
    5. 使用已有库/切换数据库
        use 库名;
    6. 查看当前数据库中的所有表
        show tables;
    7. 删除数据库
        drop database 库名;
2. 库名的命名规范
    1. 库名自定义,由数字,字母,下划线组成,禁止
         与关键字冲突,禁止使用纯数字,尽量见名知意
    2. 为了区分库名和表名,可以在库名后添加db
            例: studb
    3. 库名和表名大小写敏感
            例: stuDB
3. 练习
    1. 创建数据库testdb ,指定字符集为utf8
            create database testdb character set utf8;
    2. 进入数据库 testdb
            use testdb;
    3. 查看当前所在库
            select database();
    4. 创建数据库testdb2
            create database testdb2;
    5. 查看testdb2的字符集
            show create database testdb2;
    6. 删除testdb和testdb2
            drop database testdb;
            drop database testdb2;
4. 表的基本操作
    1. 创建表
        create table 表名(字段名 数据类型,
        字段名 数据类型,
        字段名 数据类型);
    2. 查看表的字符集
        show create table 表名;
    3. 查看表结构(表中包含哪些字段)
        desc 表名;
    4. 删除表
        drop table 表名;
    5. 练习 :
        1. 创建库 pyDB,指定字符集为utf8
             create database pyDB character set utf8;
        2. 在数据库中创建表,tab1,指定 id name age
             三个字段(int char(10) int)
             use pyDB;
             create table tab1(id int,name char(10),age int);

        3. 查看表的字符集
             show create table tab1;
        4. 查看表结构
             desc tab1;
        5. 删除表,删除库
             drop table tab1;
             drop database pyDB;
5. 表记录管理
    1. 插入记录
        insert into 表名 values (字段值,字段值),(字段值,字段值);
        指定字段插入数据:
        insert into 表名(字段1,字段2) values(字段值,字段值);
    2. 查询记录
        select * from 表名; (查询所有数据)
        select 字段名,字段名 from 表名; (查询指定字段)
        指定查询条件
        select * from 表名 where 条件;
    3. 练习
        1. 查看所在库,查看已有库
        2. 创建新库,userdb
        3. 在新库中创建表 userInfo,设置字符集为utf8,
             设置字段 id name age
        4. 查看表结构
             desc userInfo;
        5. 在表中插入几条记录
        6. 在表中针对name,age两个字段插入两条数据
        7. 查询表中所有数据
        8. 查询表中所有姓名
        9. 查询表中所有年龄大于20的姓名信息
             select name from userInfo where age>20;
6. 更改数据库默认字符集
        1. 方法 :修改数据库的配置文件
        2. 步骤 :
            1. 获取root权限
                    sudo -i
            2. cd /etc/mysql/mysql.conf.d/
            3. 文件备份(必须执行)
                 cp mysqld.cnf mysqld.cnf.bak
            4. 修改配置文件
                    subl mysqld.cnf
                    找 :
                        [mysqld]
                    添加
                        character_set_server = utf8
            5. 保存文件,重启服务
                    sudo /etc/init.d/mysql restart
            Mac :
                /etc/my.cnf

8. 客户端的连接与断开

    连接 : mysql -h主机名 -u用户名 -p密码
                只有连接成功,才可以使用数据库服务,书写
                SQL语句
    断开 :
            exit; | quit; | \q;
            断开与客户端的链接,并不会结束服务
            结束服务使用 :
                sudo /etc/init.d/mysql stop

9. 数据类型

1. 数值类型
    1. 整数
        1. int (大)整型 (占据4个字节)
             取值范围 :
             无符号整型(unsigned) :0 ~ 2(32)-1
             有符号整型(signed 默认为有符号) : -2(31)~2(31)-1
        2. tinyint 微小整型 (占据1个字节)
             有符号整型 :-128 ~ 127
             无符号整型 :0 ~ 255
             例 :
                    age tinyint unsigned
        3. smallint 小整型 (占据2个字节)
        4. bigint        (极)大整型 (占据8个字节)
    2. 浮点数
        1. float (4个字节,最多表示小数点后7位)
                用法 :
                    字段名 float(m,n)
                    m表示总位数,n表示小数位的位数
        2. double(8个字节,最多表示小数点后15位)
        3. decimal 最多表示到小数点后28位
                用法 :
                    decimal(m,n)
    3. 练习
        1. 创建库 studb,在库中创建表stuInfo,要求
                id   大整型(int)
                name 字符型 char(10)
                age  无符号微小整型
                height 浮点型表示,2位小数位,3位整数位
                weight 浮点型,3位整数位,3位小数位
                ---------------------------------
                create table stuInfo(
                id int,
                name char(10),
                age tinyint unsigned,
                height float(5,2),
                weight decimal(6,3)
                );
        2. 查看表结构
        3. 查看字符集
        4. 插入一条完整记录
        5. 在 id name两个字段下插入两条数据
        6. 查询所有学生的id和姓名
    4. 浮点型使用注意 :
        1. 如果插入的是整数数据,小数位会自动补0
        2. 如果插入数据的小数位超出指定位数,会自动
             四舍五入
        3. 整数位超出限制,插入失败
2. 字符类型
    1. 定长 char(长度)
         长度取值范围 :1 ~ 255
    2. 变长 varchar(长度)
         长度取值范围 :1 ~ 65535
         定长与变长的区别 :
         定长 :根据指定的长度固定分配存储空间
                            char(10)
                            存储'a',也要分配10个字符的空间
                        优点 :效率高,速度快
                        缺点 :浪费存储空间

         变长 :在不超过指定长度的情况下,动态分配存储
                        空间
                            varchar(10)
                            存储'a',动态根据数据的字符长度分配空间
                        优点 :节省存储空间
                        缺点 :效率比定长存储要低
         共同点 :
             给出的长度,就是最大输入的字符数,超出则
             无法存储
             例 :
                    name varchar(10)
                    "wangzhaojun" 超出无法存储
    3. 长文本存储
            text
            longtext (4G)
    4. 二进制数据存储
            blob
            longblob (4G)
    5. 数值类型的显示宽度与字符型的最大字符数
            int(11) 显示宽度与存储空间无关
                借助zerofill关键字,查看整型的显示宽度
                例 :
                    id int(5) zerofill
                    存储数据 :
                    insert ... (5)  ->显示00005
                    insert ... (1234567)  -> 显示1234567
                    insert ... (123456789012345):
                        error : 超过了当前数据类型的表示范围
                        int unsigned : 2(32) - 1 (42亿多)

            char(10)设置数据的存储空间,超出则无法存储
3. 枚举类型
        1. enum 类型 (表示单选)
            枚举是一个字符串对象,可以将一些
            不重复的字符串存储成一个预定义的集合,字段存储
            数据时,必须从集合中选择,不在集合范围的都是非法值
            例 :
                gender enum('男','女','保密');
                枚举类型会自动为集合中的字符串选项分配下标
                查询时,可根据下标表示对应的值
                select * from ...where gender="男";
                等价于
                select * from ...where gender=1;
        2. set 类型 (实现多选)
            特殊的枚举类型,用法与enum一致,提供字符串类型
            的集合(选项)
            例 :
                sportcourse set('篮球',"足球");
                inert ... values(1,"zhangsan","篮球,足球");

猜你喜欢

转载自blog.csdn.net/dirckes8813/article/details/84890829