PYTHON1.day17SQL

课程:MySQL关系数据库
进度:day1

课程主要内容
1. 数据库基本概念
2. MySQL的安装及配置
3. 库管理
4. 表管理
5. 结构化查询语言(SQL)
6. 数据约束
7. 数据的导入导出
8. 权限管理
9. 数据库事务
10.存储引擎
11.E-R关系图(数据关系图形化表示)
12.Python访问数据库

今天的内容
1. 数据库基本概念
   1)什么是数据库(database)
      按照某种数据模型,对数据进行科学、
      高效存取和管理的系统
   2)数据库管理系统(DBMS) *
      Database Management System
      - 定义:位于操作系统和用户之间的
        软件系统,专门用于数据管理
      - 常见的DBMS:Oracle,MySQL,DB2,
        SQL Server, Informix
       
   3)数据库系统:一般性统称,包含DBMS,
      软硬件、应用程序、DBA/用户
     
   4)DBMS应用场景
     - 数据库是一种重要的基础软件
     - 几乎应用于所有的软件系统
       (特别简单的单机版程序除外)

  5)数据管理的三个阶段
     a)人工管理
       - 数据不单独进行管理,数据是附属
         于程序的
       - 优点:管理简单
       - 缺点:数据无法实现共享/独立
     b)文件管理阶段
       - 数据单独保存于文件中
       - 优点:数据独立保存,可共享
         数据能够持久化存储
       - 缺点:数据之间的联系较弱
         数据冗余,数据一致性无法保证
     c)数据库管理阶段
       - 专门用一套软件来管理数据
       - 优点:
         数据独立性、可共享、低冗余
         数据库可靠性、安全性
         提供了友好的访问接口
         丰富的工具(性能优化,备份/恢复,权限管理)
       - 缺点:需要付出额外的软硬件/人力成本   
   6)数据库概念模型
      a)层次模型
      b)网状模型
      c)关系模型 (重点)
        - 目前主流数据库模型
        - 使用二维表表示数据/数据联系
        - IBM研究院 E.F.Codd在论文
          《大型共享数据库关系模型》
          首先提出
      d)非关系模型
     
   7)关系模型基本概念(重点)
     a)关系
       - 二维表,由行、列组成
       - 二维表表示数据和数据间的联系
       - 行:一个实体(现实中可以区分的事物)
       - 列:也叫字段,表示实体的属性
     b)关系数据库:使用关系模型的数据库
     c)关系术语
       - 实体:现实中可以区分的事物
       - 关系:(规范的)二维表
         每个属性都是原子的,不能重名
         关系中的次序不重要
       - 元组:二维表中的一行称为元组
         也叫记录,表示是一个实体
       - 属性:二维表中的列称为属性
         表示实体的某个数据特征
       - 键(key):关系中能够区分实体
         唯一性的属性,称之为键
       - 主键(Primary Key,简写PK)
         从多个键中选取一个逻辑上唯一
         区分实体的属性(或属性组合)
         要求非空、不重复
        
   8)关系模型优点
     - 建立在严格的数据理论基础上
     - 概念简单、单一、结构清晰
    
2. MySQL简介
   1)概述
     - 著名的、广泛使用的开源DBMS
     - 最早由瑞典MySQL AB公司开发
       2008年被SUN,2009年SUN被Oracle
       收购
     - 原作者开发MariaDB,与MySQL保持
       最大兼容性
      
   2)MySQL的特点
     - 开源,成本低
     - 体积小,性能优异
     - 支持主流操作系统(windows/Linux/Unix)
     - 支持主流的开发语言(c,c++,java,php,python...)
     - 可移植性强
   3)主要版本
     - Community Server,社区版,开源免费
       不提供技术支持
     - Enterprise Edition, 企业版,需付费
     - Cluster,集群版,开源免费
     - Cluster CGE,高级集群版,付费
   4)安装配置
     a)windows
       - 下载安装文件,执行安装
         如果缺少基础库,先安装基础库
       - 安装过程中,需要注意的地方
         选择组件:developer default 或
                   server only
         端口:推荐保持默认端口3306
         root口令:牢记该口令,生产环境中
                   应该具有一定强度
         添加用户:记住用户名、密码
       - 验证:使用查看端口是否监听
         netstat -an | findstr 3306
        
     b)Ubuntu系统下安装
       第一步:安装组件
       sudo apt-get install mysql-server
       sudo apt-get install mysql-client
       sudo apt-get install libmysqlclient-dev
      
       第二步:确认安装结果
       查看端口:netstat -an | grep 3306
   5)服务管理
     查看状态:sudo /etc/init.d/mysql status
              start - 启动服务
              stop  - 停止服务
              restart - 重启服务


   6)客户端、服务器
     - 客户端:mysql
     - 服务器:mysqld
    
     客户端连接服务器命令:
     mysql -hlocalhost -uroot -p123456
     参数:-hlocalhost  连接localhost服务器
           -uroot       使用root用户登录
           -p123456     root用户密码为123456
     注:如果连接其它服务器,将localhost改成
         服务器的实际IP地址
        
     退出登录:exit或quit
     无标题
3. MySQL操作
   1)SQL语言:结构化查询语言
      Structure Query Language
     - 用于数据库各种操作、管理
     - 每条SQL语句以;(英文分号)结束
     - 大小写不敏感
     - 不支持TAB键自动补齐功能
     - 使用\c废弃当前语句
    
  2)库操作
     a)查看库: show databases
     b)进入某个库:use 库名称
       e.g. 进入sys库
       use sys
     c)查看当前库:select database()
     d)创建库
       指令:create database 库名称
            [default charset=字符集]
       e.g. 创建名为bank的库,utf8字符集
       create database bank
       default charset=utf8;
     e)删除库
       指令:drop database 库名称
       e.g. 删除bank库
       drop database bank;
      
     f)库的构成:表(存数据)、视图(数据窗口)、
       索引(提高查询速度)、
       触发器(一个动作触发另一个动作)、
       存储过程(SQL语句编写的程序)、
       函数、用户及配置信息
      
     g)库的命名规范
       - 由字符、数字、下划线组成
       - 不能全部由数字构成
       - 库名称区分大小写 *
       - 库名称必须唯一
       - 避开特殊字符、MySQL关键字
      
   3)表操作(重点)
     a)查看表:show tables;
     b)创建表
      语法:
       create table 表名称(
         字段1  类型(长度)  约束,
         字段2  类型(长度)  约束,
         ......
       ) [指定字符集];

      
      e.g. 创建账户表,包含账号、户名字段
       create table acct(
         acct_no  varchar(32), -- 账号
         acct_name varchar(128) -- 户名
       ) default charset=utf8; -- 指定字符集

      
     c)查看
       查看表结构:desc acct
       查看建表语句:show create table acct
    
     d)删除表
       指令:drop table 表名称
       e.g. 删除acct表
             drop table acct;

      
   4)数据操作(重点)
     a)插入
       重新创建acct表
       create table acct(
         acct_no varchar(32),-- 账号,字符串
         acct_name varchar(128),-- 户名
         cust_no varchar(32),-- 客户编号
         acct_type int, -- 账户类型
         reg_date date, -- 开户日期,日期时间
         status int,    -- 状态
         balance decimal(16,2) -- 余额,数字
                               -- 最长16,2位小数       
       ) default charset=utf8;

      
       *需注意的地方:
        不能出现中文标点符号(注释除外)
        括号要正确配对,最好成对编写
        date不是data
        若出现No database selected,是没有进入库
        最后一个字段后面不加逗号
       
       e.g. 插入单笔数据
       insert into acct values
       ('622345000001','Jerry','C0001',1,now(),1,1000.00);

      
       查询验证:select * from acct;
      
       e.g. 插入多笔数据
       insert into acct values
       ('622345000002','Tom','C0002',1,now(),1,2000.00),
       ('622345000003','Dekie','C0003',2,now(),1,3000.00),
       ('622345000004','Dokas','C0004',2,now(),1,4000.00);
      
       e.g. 指定字段插入
       insert into acct(acct_no, acct_name)
       values('622345000005','Emma');

      
     b)查询操作
       格式:select * from 表名 [where 条件]
            
             select 字段1,字段2
             from 表名称 [where 条件]

      示例:
       e.g. 查询所有行、所有列
       select * from acct;
      
       e.g. 查询指定字段
       select acct_no, acct_name, balance
       from acct;
      
       e.g. 查询制定字段,给每个字段起别名
       select acct_no "账号",
              acct_name "户名",
              balance/10000 "余额(万元)"
       from acct;
      
       e.g. 带条件查询
       select acct_no,acct_name,balance
       from acct
       where acct_no = '622345000001';
       -- 两个条件同时满足(and)
       select acct_no,acct_name,balance
       from acct
       where acct_no = '622345000001'
       and acct_name = 'Jerry';
       -- 两个条件满足其中一个(or)
       select acct_no,acct_name,balance
       from acct
       where acct_no = '622345000001'
       or acct_name = 'Tom';

      
       练习:
       查询账户类型为1的所有账户信息
       select * from acct where acct_type = 1;
      
       查询客户编号为C0001客户的账户信息
       select * from acct where cust_no = 'C0001';
      
       插入一笔数据,插入字段账号、户名、开户日期、金额
       insert into acct(acct_no,acct_name,reg_date,balance)
       values('622345000006','Michile',now(),7000.00)
      
       查询所有账户类型为2,并且账户状态为1的账户
       select * from acct
       where acct_type = 2
       and status = 1;

猜你喜欢

转载自www.cnblogs.com/shengjia/p/10385481.html