zoukankan      html  css  js  c++  java
  • Python 数据库

    一 数据库

    1.什么是数据库:数据库指的是存储数据的仓库,本质上是一套CS结构的TCP程序。

    二 数据库分类

    1.关系型数据库

       #1.数据库可以为数据与数据之间建立关联关系,人是一条数据,他可能关联着一个工作岗位数据。双方可以通过自身找到对方。

       #2.有约束,基于硬盘存储

     mysql :免费开源 支持中大型企业
        为了防止mysql被闭源 以及 担心oracle的优化能力
        创始人Widenius 另起灶炉  开发了mariaDB  mariaDB 完全兼容mysql 使用起来        一模一样     
        mysql的一生 坎坎坷坷 先后被 sun   - oracle 收购
        
    oracle: 收费闭源 功能强大 分布式数据库   
    SQLServer:微软生态圈 仅支持 windows系统  太局限  
    DB2: IBM 开发的数据库软件 收费闭源  经常与IMB的机器绑定销售  打折啥的

    2.非关系型数据库

     #1.通常key value存储数据各个数据之间没有关系 不是通用性数据库 有局限性

     #2.没有约束,基于内存存储

    MongoDB
    redis
    memcache

    三 数据库与文件系统的对应关系

    数据库       文件夹

    一张表       一个文件夹

    一条记录    文件中的一行数据

    四 安装mysql

    下载地址:https://dev.mysql.com/downloads/mysql/

    下载的时候提供了带界面的和不带界面的 用哪个呢?

    服务器通常是不带界面的linux系统,并且熟练掌握SQL语句通常是面试官的基本要求

    此处安装解压版的,下载对应的32/64位压缩包,解压到指定位置即可。

    五 mysql目录解析

    """
    bin             执行文件
    mysqld            服务器主程序
    mysql            无界面的客户端
    data            数据文件
    my-default.ini    配置文件模板
    View Code

    六 运行mysql

    1.不推荐:

    注意:5.7后的版本需要先初始化 执行:mysqld --initialize-insecure
    启动服务器
        1.运行CMD,通过cd 进入bin目录    
        2.执行mysqld就可以启动服务器,如果报错的话使用管理员权限来运行CMD
        这是一个socket服务器程序 这时候相当于做了一下事情:
        启动服务器socket 并监听端口 默认绑定当前ip 端口默认3306
        
    启动客户端
        运行mysql 注意他是一个socket程序 要连接服务器需要ip 和 端口
        mysql  -h ip -P port -uroot -p  密码默认为空
    看到欢迎界面则说明socket链接成功了
    
    执行过程分析:
        这个命令提示符本质是什么?
        就是一个input
        接受一条指令然后发送给服务器 
        服务器接收到之后呢解析指令 
        取出你要的数据在send给客户端
    那问题来了 指令肯定不能随便写,不然服务器不认识,大家必须得有套规范
        就是sql 语句
        sql全称为 结构化查询语言,是所有非关系型数据库都支持的语言,学习数据库很大一部分时间是在学习sql语句。
        
    登录成功后可以执行一下命令来查看所有存在的数据库
    show databases;
    对比data文件夹来看
    View Code

    2.推荐使用

    1.添加环境变量

    找到安装目录,将bin路径复制填入系统设置的path中即可

    2.注册系统服务

    将mysql注册到系统服务中  mysqld --install  

    启动服务 net start mysql

    停止服务 net stop mysql

    删除服务 sc delete mysql 如果需要重装的话...

    #关闭服务器
    tasklist | findstr mysqld
    taskkill  /F /PID  8372

    需要注意的是 默认注册的服务名称叫做mysql 这与bin下的mysql是两码子事,一个系统服务一个是客户端执行文件

    七 数据库基本操作

    1.客服端登录连接服务端

    本质是TCP程序,必须指定ip和端口 ,如果服务器就运行在本机上 可以省略ip  如果端口没改过 也可以省略端口  
    mysql -hip -P端口 -u用户名  -p密码  
    实例: mysql -uroot -p
        
    mysql 5.6 默认是没有密码的 
    View Code

    2.修改管理员密码

    1.如果知道原始密码  可以使用mysqladmin 这个工具
    mysqladmin -u用户名 -p旧密码 password 新密码
    实例: mysqladmin -uroot -p  password 123
    
    2.忘记密码
    1.停止服务
    2.启动服务器并添加参数
    mysqld --skip-grant-tables
    3.使用客户端登录服务器 执行修改命令 此时不需要输入密码
    update mysql.user set password = password("123123") where user="root" and host="localhost"
    4.刷新权限
    flush privileges
    5.命令行中重启服务器验证新密码
    View Code

    3.编码设置

    新建一个my.ini文件
    
    # 服务器配置部分
    [mysqld]
    character-set-server = utf8
    # 客户端mysql配置部分
    [mysql]
    default-character-set = utf8
    # 其余客户端配置部分
    [client]
    default-character-set = utf8
    注意:修改了mysqld配置需要重启服务器
    View Code

    八 数据库的增删改查

    一 数据库
    增:create database 数据库名称 charset 字符编码;
    
    例:
    
      create database db1 charset utf8;
    注:charset utf8(字符编码省略,使用默认的)
    
    删:drop database 数据库名称;
    
    例:drop database db1;
    
    改:alter database db1 charset 字符编码;
          alter database db1 charset gbk;
    
    只能修改数据库的字符编码
    查:查看所有库的库名
           show databases;
          单独查看某一个库的信息
         show create database 数据库名;
         show create database db1;
    
    一 表
    
    首先切换文件夹:
        use 数据库名;
        use db1;
        select database(); #查看当前所在的文件夹
    
     
    
       最终的格式:
    
     
    
    最终的格式:
    #                 create table 表名 (
    #                    列1 列属性 [是否为null 默认值],
    #                    列2 列属性 [是否为null 默认值],
    #                    .....
    #                    列n 列属性 [是否为null 默认值]
    #                 )engine = 存储引擎  charset = 字符集
    #
    #              最终的例子:
    #                 create table t4 (
    #                    id  int auto_increment primary key,
    #                    name char(32)  not null  default '',
    #                    pwd  char(32)  not null  default ''
    #                 )engine=Innodb charset=utf8;
    
     
    
     
    
     
    
    auto_increment : 自增
    #                 primary key : 主键索引 (作用: 加快查找的速度)
    #                 not null : 不能为空
    #                 default : 默认值
    #
    #                 注意: 后面一列写完之后, 不能加逗号  (*********),engine=Innodb charset=utf8;如果不写为默认的根据实际情况。
    
     
    删:drop table 表名;
    
     
    
    实例:
    drop table t1;
    注:连带着将数据表中的所有数据都会删掉
    
    改:
    
    #               create table t4 (
    #                 id  int auto_increment primary key,
    #                 name char(32)  not null  default '',
    #                 pwd  char(32)  not null  default ''
    #              )engine=Innodb charset=utf8;
    #
    #              替换字段:
    #                 alter table 表名(t3) change 原列名(name) 新列名(username varchar(32) not null default '');
                    修改
                       alter table userinfo modify name char(32);
    #
    #              新增字段:
    #                 alter table 表名(t3)  add  新列(pwd char(32)  not null  default '');
    #
    #              删除字段:
    #                 alter  table 表名(t3) drop 列名(pwd);
    
    查:
    
    查看当前库下所有的表名
    show tables;
    查看t1表的详细信息
    show create table t1;
    查看表结构
    desc t1;
    
    
    数据行
    增:
    
    insert into userinfo values(1,'jason',123);  插入单条数据
    insert into userinfo values(1,'jason',123),(2,'egon',123),(3,'tank',123);  插入多条数据
    
    删:
    
    #              delete from 表名(t3); 将表中的所有的 数据删除掉, 再次添加的时候, 继续
    会延续上一个 ID
                    delete from userinfo where id =1;  指定删符合条件的数据
    #
    #              truncate 表名(t3);    将表中的所有的 数据删除掉, 再次添加的时候, ID 会重新开始
    #
    #              truncate 速度快
    #
    #              ps: 工作中, 线上数据库, 这个命令根本不会让你用到
    #
    #              delete from 表名(t3) where name = 'xxxxx';
    
    delete from db1.t1 where name = "SB" ;
    
    改:
    
                   update t3 set username='zekai';
    #
    #              update t3 set username='xxxx'  where  id=3;
    #
    #              update t3 set username='xxxx', pwd='xxxxx'  where  id=3;
    
    查:select * from t3; : 将表中的 所有的列全部列出
           select 列名, 列名, 列名 from t3 : 将某一列的值查出
    View Code
  • 相关阅读:
    java实现 洛谷 P1425 小鱼的游泳时间
    java实现 洛谷 P1425 小鱼的游泳时间
    java实现 洛谷 P1425 小鱼的游泳时间
    java实现 洛谷 P1425 小鱼的游泳时间
    Java实现洛谷 P1428 小鱼比可爱
    Java实现洛谷 P1428 小鱼比可爱
    Java实现洛谷 P1428 小鱼比可爱
    阿里面试题总结
    BAT机器学习面试1000题系列
    就目前市面上的面试整理来说,最全的BAT大厂面试题整理在这
  • 原文地址:https://www.cnblogs.com/tfzz/p/11364475.html
Copyright © 2011-2022 走看看