zoukankan      html  css  js  c++  java
  • Python 10 MySQL数据库(一)

    内容概要:

    1.数据库介绍

    2.mysql数据库安装使用

    3.mysql数据类型

    4.mysql命令语句

    5.事务

    6.一对多、多对多

    7.其他

     

    一、数据库介绍

    什么是数据库?

    数据库(Database)就是按照数据结构来组织、存储和管理数据的仓库。由于数据保存在文件中访问速度较慢,所以一般使用数据库存储数据。

    数据库的分类?

    数据库分为关系数据库和非关系型数据库。关系型数据库(RDMS relationship databse management system)通过外键建立两张表之间的关系。

    Mysql数据库

    mysql是现在最流行的关系型数据库,他是开源的,支持大型的数据库,使用标准的SQL语句。

    二、Mysql数据库安装

    三、Mysql数据类型

    Mysql中定义数据字段的类型对数据库的优化非常重要。

    Mysql支持多种类型,大致可以分为三类:数值、字符串和日期/时间类型。

    数值类型

    类型大小范围(有符号)范围(无符号)用途
    TINYINT 1 字节 (-128,127) (0,255) 小整数值
    SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
    MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
    INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
    BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
    FLOAT 4 字节 (-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度 浮点数值
    DOUBLE 8 字节 (1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度 浮点数值
    DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

    字符串类型

    类型大小用途
    CHAR 0-255字节 定长字符串
    VARCHAR 0-65535 字节 变长字符串
    TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
    TINYTEXT 0-255字节 短文本字符串
    BLOB 0-65 535字节 二进制形式的长文本数据
    TEXT 0-65 535字节 长文本数据
    MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
    MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
    LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
    LONGTEXT 0-4 294 967 295字节 极大文本数据

    CHAR和VARCHAR类型类似,但它们保存和检索的方式不同。CHAR是定长,果数据长度不够则会自动补充空格;VARCHAR只是规定了最大长度。

    日期/时间类型

    类型大小 (字节)范围格式用途
    DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
    TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
    YEAR 1 1901/2155 YYYY 年份值
    DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
    TIMESTAMP 4 1970-01-01 00:00:00/2037 年某时 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

    四、Mysql基础语法

    管理Mysql的命令:

    • use 数据库名; #进入某个数据库,之后的操作只对这个数据库生效
    • show databases; #展示所有数据库
    • show tables; #展示当前数据库的所有表
    • show columns from 表名; #显示表的属性,如主键信息、是否为NULL,默认值等
    • desc 表名
    • show index from 表名; #显示表的详细索引信息
    • create database 库名; #创建数据库
    • drop database 库名; #删除数据库

    表操作命令:

    Mysql创建数据表

     1 #创建表
     2 create table table_name(column name, column type)
     3 
     4 #创建一张学生表
     5 create table students(
     6     'sid' INT AUTO_INCREMENT PRIMARY KEY,
     7     'name' VARCHAR(50) NOT NULL,
     8     'age' INT NOT NULL,
     9 )engine=InnorDB DEFAULT charset=utf8
    10 
    11 #查看表信息
    12 desc student;

    增删改查DML:

     1 增 语法:
     2 INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
     3 INSERT INTO table_name VALUES(xxx,xxx,xxx),(xxx,xxx,xxx);
    4 4 查 语法: 5 SELECT column_name,column_name FROM table_name [WHERE Clause] [OFFSET M ][LIMIT N] 6 7 改 语法: 8 UPDATE table_name SET field1=new-value1, field2=new-value2 [WHERE Clause] 9 10 删 语法: 11 DELETE FROM table_name where stu_id=5;
    12 DELETE FROM table_name # 清空整张表

    alter命令

    # 修改表结构
    1. 修改表名
          ALTER TABLE 表名 
                          RENAME 新表名;
    
    2. 增加字段
          ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…],
                          ADD 字段名  数据类型 [完整性约束条件…];
                                
    3. 删除字段
          ALTER TABLE 表名 
                          DROP 字段名;
    
    4. 修改字段
          ALTER TABLE 表名 
                          MODIFY  字段名 数据类型 [完整性约束条件…];
          ALTER TABLE 表名 
                          CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
          ALTER TABLE 表名 
                          CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
    create table t(id int unique,name char(10) not null);
    
    #去掉null约束
    alter table t modify name char(10) null;
    # 添加null约束
    alter table t modify name char(10) not null;
    alter操作约束条件
    create table t(id int unique,name char(10) not null);
    
    # 去掉unique约束
    alter table t drop index id;
    # 添加unique约束
    alter table t modify id int unique;
    alter table t add index unique id
    alter操作索引
    # 添加外键
    alert table table_name add foreign key(column_name) references table_name(column_name);  
    # 删除外键
    alter table book drop foreign key fk_id;
    alter操作外键

    排序

    select * from student order by age;  #默认升序
    select * from student order by age asc; #升序
    select * from student order by age desc;  #降序

    like模糊查询

    select * from student where name like '%abc';  #表示查询以abc结尾的数据
    select * from student where name like '_abc_';  #表示查询中间有abc的数据 

    where用于分组前的条件筛选

    #1:单条件查询
        SELECT emp_name FROM employee
            WHERE post='sale';
            
    #2:多条件查询
        SELECT emp_name,salary FROM employee
            WHERE post='teacher' AND salary>10000;
    
    #3:关键字BETWEEN AND
        SELECT emp_name,salary FROM employee 
            WHERE salary BETWEEN 10000 AND 20000;
    
        SELECT emp_name,salary FROM employee 
            WHERE salary NOT BETWEEN 10000 AND 20000;
        
    #4:关键字IS NULL(判断某个字段是否为NULL不能用等号,需要用IS)
        SELECT emp_name,post_comment FROM employee 
            WHERE post_comment IS NULL;
    
        SELECT emp_name,post_comment FROM employee 
            WHERE post_comment IS NOT NULL;
            
        SELECT emp_name,post_comment FROM employee 
            WHERE post_comment=''; 注意''是空字符串,不是null
        ps:
            执行
            update employee set post_comment='' where id=2;
            再用上条查看,就会有结果了
    
    #5:关键字IN集合查询
        SELECT emp_name,salary FROM employee 
            WHERE salary=3000 OR salary=3500 OR salary=4000 OR salary=9000 ;
        
        SELECT emp_name,salary FROM employee 
            WHERE salary IN (3000,3500,4000,9000) ;
    
        SELECT emp_name,salary FROM employee 
            WHERE salary NOT IN (3000,3500,4000,9000) ;
    
    #6:关键字LIKE模糊查询
        通配符’%SELECT * FROM employee 
                WHERE emp_name LIKE 'eg%';
    
        通配符’_’
        SELECT * FROM employee 
                WHERE emp_name LIKE 'al__';
    where查询

    聚合&分组  group by

    having用于分组后的条件筛选

    limit n; 表示查询前n行数据

    distinct 去重

    五、数据完整性约束

    not null,unique,primary key,foregin key

    六、事务

    MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务.

    只有使用InnorDB引擎时才支持事务,事务可以维持数据库的完整性,保证一批语句要么全部执行,要么全部不执行。

    1 begin;  #开始一个事务
    2 insert into students (name) values(1);
    3 commit;  #如果没出错则commit提交
    4 rollback;  #如果出错就回滚,这样相当于没有执行过命令

      

    七、外键和多对多关系

     创建外键关系:

    1 create table classroom(
    2     'cid' INT AUTO_INCREMENT PRIMARY KEY
    3 );
    4 
    5 create table student(
    6     'name' VARCHAR(24) NOT NULL,
    7     'class_id' INT NOT NULL,
    8     foreign key(class_id) references classroom(id)
    9 );

    如果在创建表时没有创建外键,也可以通过alert建立联系:

    1 alert table student add foreign key(class_id) references classroom(id);

    删除外键:

    1 alert table student drop foreign key class_id;

    多对多可以通过创建第三张表,分别创建两张表的外键来实现。

  • 相关阅读:
    Python-Matplotlib 12 多图figure
    Python-Matplotlib 11 子图-subplot
    Python Day16
    Python Day15
    Python Day13-14
    Python Day12
    Python Day11
    Python Day9-10
    Python Day8
    Python Day8
  • 原文地址:https://www.cnblogs.com/yinwenjie/p/10847518.html
Copyright © 2011-2022 走看看