python 数据库 Mysql (1)

数据库基础
1  什么是数据库
   数据库:database,存储数据的仓库
   数据库:高效的存储和处理数据的介质(介质主要是两种:磁盘和内存)
2  数据库的分类
   数据库基于存储介质的不同:进行了分类,分类为两种:关系型数据库(SQL)
   和非关系型数据库(NoSQL:Not Only SQL,不是关系型的数据库都叫做关系型数据库)
3  不同的数据库阵营中的产品有哪些
   关系型数据库
       大型:Oracle,DB2
       中型:SQL.SERVER,Mysql 等
       小型:access 等
   非关系型数据库:memcached,mongodb,redis(同步到磁盘)
4  两种数据库的区别
   关系型数据库:安全(保存磁盘基本不可能丢失),容易理解,比较浪费空间(二维表)
   非关系型数据库:效率高(断电丢失)
关系型数据库
1  什么是关系型数据库
   关系型数据库:是一种建立在关系模型(数学模型)上的数据库
   关系模型:一种所谓建立在关系上的模型,关系模型包括三分方面
       数据结构:数据存储的问题,二维表(有行和列)
       操作指令集合:所有SQL语句
       完整性的约束:表内数据约束(字段与字段),表与表之间约束(外键)
2   关系型数据库的设计
    关系型数据库:从需要存储的数据需求中分析,如果是一类数据(实体)应该设计成一张二维表
    表是由表头(字段名:用来规定数据的名字)和数据部分组成(实际存储的数据单元)
    二维表:行和列 

    表头             字段名1               字段名2
    数据单元         数据1                 数据2
    
    以实际案例来进行处理:分析一个数学系统,讲师负责教学,教学生,在教室教学生
    1 找出系统中存在的实体:讲师表,学生表,班级表
          讲师:姓名,性别,年龄,工资
          学生:姓名,性别,学号,学科
          班级:班级名字,教室编号
       关系型数据库:维护实体内部,实体与实体之间的联系
       实体内部联系:每个学生都有姓名,性别,学号,学科信息
       
       姓名     性别      学号      学科      年龄
       张三     男        00001     PHP       20
       李四     男        00002     PHP       
       王五               00003     UI        
     
       第二行的所有字段,都是在描述张三这个学生(内部联系),第二列只能放性别(内部约束)
       关系型数据库的特点之一:如果表中对应的某个字段没有值(数据),但是系统依然要分配
       空间,关系型数据库比较浪费空间

       实体与实体之间的联系:每个学生肯定属于某个班级,每个班级一定有多个学生(一对多)
       学生表

       姓名     性别      学号      学科      年龄
       张三     男        00001     PHP       20
       李四     男        00002     PHP       
       王五               00003     UI  
       
       班级表
   
       班级名称          班级编号
       PHP021            06
       PHP021            05
 
       解决方案:在学生表中增加一个班级字段来指向班级(必须能够唯一的找到一个班级信息)
       
       姓名     性别      学号      学科      年龄     班级名称
       张三     男        00001     PHP       20       PHP021
       李四     男        00002     PHP                PHP021
       王五               00003     UI                 UI031
      
       学生实体与班级实体的关联关系:实体与实体之间的关系

        关键字说明

       数据库
:database
       数据库系统:DBS(Database System):是一种虚拟系统,将多种内容关联起来的称呼
       DBS = DBMS + DB
       DBMS:Database Management System,数据库管理系统,专门管理数据库
       DBA:Database Administrator,数据库管理员

        行/记录:row /record,本质是一个东西:都是指表中的一行(一条记录),行是从结构角度出发,
       记录是从数据角度出发
       列/字段:column/field,本质是一个东西
       
        SQL
       SQL:Struchured Query Language,结构化查询语言(数据以查询为主:99%是在进行查询操作)
       SQL 分为三个部分
           DDL:Data Definition Language,数据定义语言,用来维护存储数据的结构(数据库,表),
       代表指令:create,drop,alter 等
           DML:Data Manupulation Language,数据操作语言,用来对数据进行操作(数据表中的内
       容),代表指令:inscrt,delete,update 等,其中DML内部又单独进行了一个分类,DQL(Data
       Query Language,数据查询语言,如:selcet)
           DCL:Data Control Language,数据控制语言,主要是负责权限管理(用户),代表指令:
       grant,revoke 等
       SQL 是关系型数据库的操作指令,SQL是一种约束,但不强制(类似W3C),不同的数据库产品
       (如 Oraele,mysql)可能内部会有一些细腻的区别

       Mysql 数据库
       Mysql数据库是一种c/s结构的软件:客户端/服务端,若想访问服务器必须通过客户端(服务
       器一直运行,客户端在需要使用时候运行)

       交互方式
           1 客户单连接认证:连接服务器,认证身份:mysql.exe -hPup
           2 客户端发生SQL指令
           3 服务器接收SQL指令:处理SQL指令,返回操作结果
           4 客户端接收结果:显示结果
           5 端开连接(释放资源,服务器并发限制)

        Mysql 服务器对象

        没有办法完全了解服务器内部的内容,只能粗略的去分析数据库服务器的内部的结构
        
        将mysql服务器内部对象分成四层,系统(DBMS)> 数据库(DB)>数据表(Table)>
        字段(field)

        SQL 基本操作

        基本操作
:CRUD
        将SQL的基本操作根据操作对象进行分类,分为三类,库操作,表操作(字段),数据操作
        
        库操作
        对数据库的增删改查
        基本语法
:Create database 数据库名[库选项];
        库选项:用来约束数据库,分为两个选项
            字符集设定;charset/character set具体字符集(数据存储的编码格式),常用字符集:GBK
        和UTFS
            校对集设定:collate具体校对集(数据比较的规则)       

        创建数据库:
        CREATE DATABASE myfei;

        其中:数据库名字不能用关键字(已经被使用的字符)或者保留字(将来可能被用到的)
        如果要使用关键字或者保留字,那么必须使用反引号(ESC键下面的键在英文状态下的输出:`)
        中文数据库是利用的,但是前提条件;保证服务器能够识别(建议不用)
        当创建数据库的SQL语句执行之后发生了什么
        1 在数据库系统中增加了对应的数据库信息
        2 会在保存数据的文件夹下:data目录创建一个对应数据库名字的文件夹
        3 每个数据库下都有一个opt文件:保存了库选项

        查看数据库
        1 查看所有数据库:show databases;
        2 查看指定部分的数据库:模糊查询:
        show databases like pattem  --pattem是匹配模式
        %:表示匹配多个字符
        _:表示匹配单个字符
        比如查看information_开始的数据库:_需要被转义(\_)
        SHOW DATABASES LIKE 'information\_%'; 
        如果不转义相当于information%
        SHOW DATABASES LIKE 'information_%'; 
        3 查看数据库的创建语句:SHOW CREATE DATABASE 数据库名字;
        SHOW CREATE DATABASE myfei;
        
        更新数据库
        数据库名字不能修改
        数据库的修改仅限库选择:字符集和校对集(校对集依赖字符集)
        alter database 数据库名字 [库选项];
        Charset/character set字符集
        如:ALTER DATABASE myfei CHARSET GBK;
        Collate 校对集
        
        删除数据库
        所有的操作中:删除是最简单
        Drop database 数据库名字;
        如:DROP DATABASE myfei;
        当删除数据库语句执行之后,发生了什么
        1 在数据库内部看不到对应的数据库
        2 在对应的数据库存储的文件内,数据库名字对应的文件夹也被删除(级联删除,
        里面的数据表全部删除)
        注意:数据库的删除不的闹着玩的,应该先进行备份操作,(删除不可逆)

        表操作
        表和字段是密不可分的
        新增数据表
        Create table [if not exists] 表名(
        字段名字  数据类型,
        字段名字  数据类型  -- 最后一行不需要逗号
        )[表选项];
        if not exists; 如果表名不存在,那么就创建,否则不执行创建代码;起到检查功能
        表选项:控制表的表现
            字符集:charset/chharacter 具体字符集:--保证表中数据存储的字符集
            校对集:collate 具体校对集;
            存储引擎:engine 具体的存储引擎(innodb 和 myisam)
            CREATE TABLE IF NOT EXISTS strdent(
          nname VARCHAR(10),
          gender VARCHAR(10),
          number VARCHAR(10),
          age INT
             )CHARSET utf8;
         任何一个表的设计都必须指定数据库 

          方案1 显示的指定表所属的数据库
         Create table 数据库名.表名();将创建的表放到表明的数据库里
         CREATE TABLE IF NOT EXISTS myfei.strdent( --将strdent表放到myfei数据库里
          nname VARCHAR(10),
          gender VARCHAR(10),
          number VARCHAR(10),
          age INT
             )CHARSET utf8;

          方案2 隐式的指定所属数据库;先进入到某个数据库环境,然后这样的表自动归属到
          某个指定的数据库
          进入数据库环境:USE 数据库名字;
          USE myfei;
          CREATE TABLE class(
          nname VARCHAR(10),
          room VARCHAR(10)
           )CHARSET utf8;
           当创建数据表的SQL指令执行之后,到底发生了什么
           1 指定数据库下已经存在对应的表
           2 在数据库对应的文件夹下,会产生应表的结构文件(跟存储引擎有关系)

           查看数据表
           数据库查看的方式,表都可以查看
           1 查看所有表;show tables;
           如:SHOW TABLES;
           2 查看部分表:模糊匹配:show tables like 'pattem';
           如:SHOW TABLES LIKE '%s';   
           3 查看表的创建语句:show create table 表名;
           如:SHOW CREATE TABLE strdent;
           4 查看表结构:查看表中的字段信息
           Desc/describe/show columns from 表名;
           如:DESC class;
               DESCRIBE class;
               SHOW COLUMNS FROM strdent;

            修改数据表
            表本身存在,还包含字段,表的修改分为两部分,修改本身和修改字段
            
            修改表本身
            表本身可以修改,表名和表选项
            修改表名:rename table 旧表名 to 新表名;
            如:RENAME TABLE strdent TO my_strdent;          

            修改表选项:字符集,校对集和存储引擎
            Alter table 表名 表选项 值;
            如:ALTER TABLE my_strdent CHARSET GBK;
            
            修改字段
            字段操作很多,新增,修改,重名,删除
            新增字段
            Alter table 表名 add 字段名 数据类型 [列属性][位置];
            位置:字段名可以存放表中的任意位置
                First:第一个位置
                After:在那个字段之后:after 字段名;默认的是最后一个字段之后
            如:ALTER TABLE my_strdent    --给学生表增加ID放到第一位置
                ADD COLUMN id INT
                FIRST;   --mysql会自动寻找分号;语句结束符
            修改字段:修改通常是修改属性或者数据类型
            alter table 表名 modify 字段名 数据类型 [列属性][位置];
            如:ALTER TABLE my_strdent 将学生表中的number学号字段变成固定长度,且放到第二位置(id之后)
                MODIFY number CHAR(10) AFTER id;
            重命名字段
            Alter table 表名 change 旧字段名 数据类型 [列属性][位置];
            如:ALTER TABLE my_strdent  -- 修改学生表中的gender字段为SEX
                CHANGE gender sex VARCHAR(10);
            删除字段
            Alter table 表名 drop 字段名;
            如:ALTER TABLE my_strdent DROP age; --删除学生表中的年龄字段(age)
            小心:如果表中已经存在数据,那么删除字段会清空该字段的所有数据(不可逆)


            后续。。。。。。。。。。。。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值