zoukankan      html  css  js  c++  java
  • day-41mysql

    一. 为啥使用数据库?

      因为之前使用文件(Excel)管理数据, 但是数据量特别大的时候,使用Excel管理 的话, 就比较的麻烦了
      因此引入一个新的数据管理软件 : 数据库软件

    二. 数据库的分类?

      关系型数据库

        1. 有约束
        2. 基于硬盘的存储 (就是将数据存储到硬盘上, 持久化 === 落地)

        典型代表:
          MySQL oracle(国企) sqlserver(微软) sqllite db2

      非关系型数据

        1. 没有约束 (key--->value)
        2. 基于内存存储 (将数据放入到内存中)

        典型代表:
          MemCache, redis(微博), mongodb

    三. mySQL的架构::

      客户端:
        socket客户端, 连接服务端, 发送指令 (SQL语句)
      服务端:
        socket服务端, 接收客户端的指令, 并将结果返回给客户端

    四. MySQL 的安装

      版本: 5.5 以上 5.7 以下

      1. 可执行文件:
    .    exe 或者 .msi文件
        点击下一步

    2. 压缩包

      解压, 进入目录 bin

      mysqld : 启动服务

      mysql : 连接服务端

    3. 环境变量的配置

    ps:
      工作中, 线上的 MySQL 不需要开发自己装, 运维或者DBA装
      练习中, 需要自己手动安装MySQL

    五. 初始化:
      mysqld --initialise-secure
      数据库 (文件夹):
        表 (文件)
          数据行 (文件中的一行内容)

    六. 数据库的操作: 

    1. 数据库:
      增加:
        SQL语句:
          create database 数据库名称;
          例子:
            create database db1;

      删
        drop database 数据库名称;
        drop database db1;
      修改
        没有专门的修改指令 update
        删了重新建

      查询
        show databases;
      使用:
        use 数据库名;
        use db1;

    2. 数据表:
      新建:
        use db1;
          SQL语句:

            最终的格式:
              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;        

            ps:
              引擎: Innodb 和 MyIsam

                Innodb >Innodb 
                5.5 版本以上 默认是Innodb

              auto_increment : 自增
              primary key : 主键索引 (作用: 加快查找的速度)
              not null : 不能为空
              default : 默认值

              注意: 后面一列写完之后, 不能加逗号

      

      查看:       

         show tables;

         desc 表名; : 查看表的结构

         show create table 表名 : 查看表的创建过程

      

      删
        指令:
          drop table 表名;

          连带着将数据表中的所有数据都会删掉

          ps: 工作中, 线上数据库, 这个命令根本不会让你用到

        实例:
          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 表名(t3) add 新列(pwd char(32) not null default '');
        删除字段:
          alter table 表名(t3) drop 列名(pwd);

           列类型:

             a. 数值型
              create table t4 (
                id unsigned mediumint auto_increment primary key,
                name char(32) not null default '',
                pwd char(32) not null default ''
              )engine=Innodb charset=utf8;

              tinyint :
                范围:
                  有符号: -128到127
                  无符号: 0 到 255 unsigned
              smallint
                范围:
                  有符号: -32768到32767
                  无符号: 0 到 65535 unsigned
              mediumint
                范围:
                  有符号: -8388608到8388607
                  无符号: 0 到 16777215 unsigned
              int
              bigint

              区别:
                a. 取值范围不一样, 根据自己公司的业务来去选择
                b. 无符号和有符号的意思
              float(M,D) 浮点型
              decimal(M,D) 定点型 比float更加的精准

                例如: 3.1415151519868789789
                float: 3.141515000000000000
                decimal : 3.1415151519868789789
                126.35
                M:小数总共多少位 decimal(5, )
                D:小数点后面几位 decimal(5, 2)
                使用场景:
                  比如 说存 salary 工资 : 6000.23 decimal(,2)

            b. 字符串类型
                char : 定长 char(32) 这一列的值就是32 优点: 速度快 缺点: 浪费
                varchar : 变长 varchar(32) 优点: 不浪费, 节省空间 缺点: 速度慢
                根据自己公司的业务来去选择:
                create table userinfo (
                  id unsigned mediumint auto_increment primary key,
                  name varchar(128) not null default '',
                  pwd char(32) not null default '',
                  create_time datetime not null default '1970-01-01 00:00:00'
                )engine=Innodb charset=utf8;
                一般情况下, 如果没有100%的把握, 都是用varchar()
                text: 文本 范围比较大, 如果存储大量字符的话, 可以使用这个字段
            c. 时间类型
              date 2019-6-12
              推荐使用datetime

          关于主键自增: (不是重点)
          show session variables like 'auto_inc%';(会话)
          set session auto_increment_increment = 2;

          show global variables like 'auto_inc%';(局部)
          set global auto_increment_increment = 2;


    3. 数据行:
      增
        insert into t3 (id, name) values (1, '你好');
      查询
        select * from t3; : 将表中的 所有的列全部列出
        select 列名, 列名, 列名 from t3 : 将某一列的值查出
      删
        delete from 表名(t3); 将表中的所有的 数据删除掉, 再次添加的时候, 继续会延续上一个 ID
        truncate 表名(t3); 将表中的所有的 数据删除掉, 再次添加的时候, ID 会重新开始
        truncate 速度快
        ps: 工作中, 线上数据库, 这个命令根本不会让你用到
        delete from 表名(t3) where name = 'xxxxx';
      修改
        update t3 set username='zekai';
        update t3 set username='xxxx' where id=3;
        update t3 set username='xxxx', pwd='xxxxx' where id=3;

    七. 外键:

      缺点:
        1. 数据重复
        2. 如果 部门过长的话, 太占用空间
      解决方法:
            重新设计一张表, 这张表 中存放部门的相关信息

      ======》一对多

     1 部门表:
     2         
     3             create table department (
     4                 id  int auto_increment primary key, 
     5                 depart_name varchar(32)  not null  default ''
     6             )engine=Innodb charset=utf8;
     7             
     8             insert into department (depart_name) values ('公关'), ('关关'),('关公');
     9             
    10             create table userinfo (    
    11                 id  int auto_increment primary key, 
    12                 name varchar(32) not null default '',
    13                 depart_id int not null  default 1,
    14                 
    15                 # constraint 外键名(fk_userinfo_depart) foreign key (列名(depart_id)) references 表名(department)(关联的列名(id)),
    16                 constraint fk_userinfo_depart foreign key (depart_id) references department(id)
    17             
    18             )engine=Innodb charset=utf8;
    19             
    20             
    21             insert into userinfo (name, depart_id) values ('root1', 1);
    22             insert into userinfo (name, depart_id) values ('root2', 2);  错误的

      注意:
        创建多个外键的时候, 名称不能一样

  • 相关阅读:
    JAVA List中剔除空元素(null)的方法
    onchange onpropertychange 和 oninput 事件的区别
    window.open()与window.showModuleDialog()
    Eclipse 安装插件(aptana、svn 、git、Java EE、JSHint)
    数字组合 · Combination Sum
    分割回文串 · Palindrome Partitioning
    N皇后问题12 · N-Queens
    全排列12 · Permutations
    Course Schedule课程表12(用Topological Sorting)
    133克隆图 · Clone Graph
  • 原文地址:https://www.cnblogs.com/klw1/p/11012884.html
Copyright © 2011-2022 走看看