zoukankan      html  css  js  c++  java
  • MYSQL

     

    一.什么是数据库?

    文件处理就可以将数据永久存储

    问题

    1.管理不方便

    2.文件操作效率问题

    3.一个程序不太可能仅运行在同一台电脑上

    提高计算机性能的方式

    1.垂直扩展  指的是更换性能更好的硬件

    2.水平扩展  指的就是添加更多的计算机  把任务分配给每一台 (分布式计算)

    分布式计算 的好处

    1.其中某一台挂了 不会导致整个系统瘫痪  稳定性高

    2.理论上性能可以无限扩展

    分布式计算其实也是整体

    数据需要被共享  这就需要socket技术

    共享就存在竞争问题   加锁处理

    文件存取效率问题

     

    数据库 本质上就是一套软件 由服务器端 和 客户端组成  C/S  B/S

     

    早些年 没有数据库的时候  程序员要想实现功能 得自己写一套socket 并解决上述问题

    于是就有了数据库软件公司

    目前常见的数据库

    关系型数据库

    数据与数据之间可以建立关联关系(用户数据和购买信息)

    SQLServer

    仅支持windows

    MySQL

    免费 开源 性能也不差   mysql 先后被sun  和 oracle收购

    mariaDB  mysql的创始人 担忧mysql的未来  于是推出mariaDB  使用起来完全一致

    Oracle

    目前最牛逼的数据库 收费很高

    DB2

    IMB 收费的  一般与计算机绑定销售

     

    非关系型数据库

    速度贼快

    key value 存取

    MongoDB

    redis

    memcache

     

    数据库相关概念

        数据 用于记录某事物状态的符号 或 别的形式  数字 音频

            age = 20

        记录 就是一个事物的典型特征的组合  在文件中体现为一行文本

            yyh,20,man,180

        表  就是一个一个的文件

        库  就是一个文件夹

     

        数据库管理系统(DBMS) 就是一个软件用来管理库的  C/S程序

    数据库服务器  运行着DBMS的计算机称为数据库服务器

    数据库服务器中存放的是 库(文件加) 表(文件) 表里面是记录(一行数据)

     

    二.设置密码

    mysqladmin.exe 用于设置密码

    mysqladmin -uroot -p旧密码 password 新密码

     

    破解密码

    1.删除存储密码的文件

    2.重装mysql

    3.可以在启动服务器时 告诉他 让他不要读取密码文件

        1.mysqld -skip-grant-tables

        2.无密码登录服务器

        3.使用update 来更新你的密码  在msyql.user表中

            在客户端 update mysql.user set password = password("321") where user = "root" and host="localhost";

        4.重启服务  验证新密码

     

    三.安装mysql得到两个程序

    1.服务器程序

        存取数据时服务器的工作

    2.客户端程序

        命令服务器来完成存取工作

        客户端将命令发送给服务器  服务器解析执行命令 返回客户端要的数据

     

        服务器为了保证数据安全需要进行用户验证

        默认有一个root 账户 默认没有密码  不安全

        需要修改密码:

            在服务器的终端中执行

               mysqladmin.exe  -u要改的用户名 -p旧密码  password 新密码

               在服务器上执行命令时 如果看到Install/Remove of the Service Denied! 说明权限不够得用管理员身份运行

                 如果忘记密码 要破解 也需要在服务器终端启动mysql服务 并且需要添加跳过授权表的参数

     

     

        mysql -uroot -padmin  用mysql自带的客户端登录服务器

        -u 用户名  -p 密码  -h 服务器的ip  -P端口号   在本机上执行客户端不需要指的 -h -P

     

        常见sql命令

        show databases;

        查看所有数据库名称

     

        use 数据库名称

        选择某个数据库  就是进入文件夹

     

    quit or  exit 退出客户端

     

        以上的指令 只有两个是在服务器端执行

        mysqld

        mysqladmin

    四. 基本sql语句句

    1. 库相关

    create database mydb charset utf8;

    show databases;

    show create databases mydb;

    alter database mydb charset gbk

    drop database mydb;

    2. 表相关

    切换⽂文件夹 (选择数据库)

    use mydb;

    create table t1 (id int,name char)

    show tables;

    show create table t1; desc t1;

    改字段

    alter table 表名 add | modify | drop | change

    add  列列名和类型

    modify 列列名 类型

    drop 跟列列名

    change 旧列列名 新列列名 类型改字符编码

    alter table 表名 default character set gbk

    改名称

    rename table tname1 to tname2

    drop table 表名

    创建表的完整语法
    create table 表名(
    字段名称 数据类型 [(长度)约束条件],
    字段名称 数据类型 [(长度)约束条件]
    ) 
    
    必须的:字段名 数据类型 表名 ******
    可选的:长度 约束条件 ****
    
    长度用于设置数据的长度
    
    数据类型也是一种约束条件,约束指的是除了数据类型外的额外的规范
    
    如果添加的数据超过了指定的长度范围,超出范围的就丢弃;
    
    注意: 字段名 和 表名 库名 都不是MySQL的关键字 比如 select from not......******

    3. 记录相关

    nsert into tablename values(data,....),(data)...

    select id,name from t1; 列列名可⽤用*号表示通配符

    update 表名 set 列列名 = where 条件 ; 可同时修改多个

    字段

    ⽤用逗号隔开 列列名=,列列名=值... 没有条件则修改全部

    delete from 表名 where 条件; 没有条件则删除所有;

    truncate  table   t1; 重建表,清空所有数据;

    五.关规范

    字段名 表名 库名 

    数字 字⺟母 @ $ # _ 组成不不能纯数字

    不不能是关键字

     表的分类(数据存储引擎)

    先说什什么是引擎?

    汽⻋车的发动机是不不是引擎? 引擎就是⼀一个系统的核⼼心部分

    为什什么需要分类呢? 发动机分类呢? 分柴油 汽油 电动

    各⾃自的使⽤用场景不不同

    mysql⽀支持的引擎show engines

    不不同引擎效果测试

     七 数据类型

    为什么需要将数据分类?

      1 为了描述事物更加准确

      2 描述起来更方便 

      3 节省内存空间 

        l a 你   utf8 下 五个字节

        l a b c  unicode  6 个字节

    mysql支持的数据类型:

    整型:  tinyint   smallint   mediumint   int    bigint

    字节数:     1    2         3   4  8

    默认情况下整型是有符号的  需要用一个二进制位存储符号,给整型加上约束 unsigned 来表示无符号,如果超出范围就尽可能保存最大的,例如在无符号下保存256 其实存的是255,如果有符号,例如 tinyint  保存 -1280  其实存的是-128  是最小值

    修改严格模式:

    以上特性的出现是因为MySQL处于严格模式

      查看当前模式  show variables like "sql_mode":

      修改为严格模式  set global sql_mode="STRICT_TRANS_TABLES":

    严格模式下  如果值超出范围就直接报错,在一些版本中默认的就是严格模式!

      在我们的正常开发中,我们应该先判断数据的正确性,没有问题在发个数据库

    怎么选择:根据实际情况 来判断,能够保存你的数据的最小类型

    长度限制对于整型的意义:

                create table t10(id int(1));

                insert into t10 value(454555);

                select *from t10;

                发现这个数也存储成功

                说明 这里长度指的不是存储容量限制

                而是显示的宽度

                如果你的数据超过了显示宽度 有几个显示几个

                如果不足 则补全到指定长度  得告诉它用什么来补全

                create table t13(id int(10) zerofill);

               总结 不是容量限制 而是 显示宽度

                    要限制显示宽度

                     1.创建表时 给整型加上宽度

                     2.加上zerofill约束

    浮点型:小数型

    float  4个字节,double 8个字节, decimal 不确定(手动指定)

    给浮点型设置的的宽度限制

    float(m,d)

    double(m,d)

    decimal(m,d)

    长度说明:m表示这个浮点数整体的长度,d表示小数部分的长度

    例如:float(5,3)最大值99.999

    区别*******

    相同点:小数部分最大长度都是30,float和double的最大长度为255

    不同点:decimal的整体最大长度为65,精度不同:double比float精度高,decimal是准确的,不会丢失精度

     字符型

     分类:1. char 定长字符  2.varchar 变长字符

     char 类型的长度是固定的,无论你存储的数据有多长,占用的容量都一样 

    char(3)存储的数据为"a" 在硬盘保存的数据还是占用3 个字符长度,实际保存的是“a  ”

    varchar 长度是可变的 存储的数据有多长就占用多长

    varchar(3) 储存的数据诶“a”在硬盘保存的数据还是占用1个字符长度,实际保存的是“a”

    yxx exx lxx zxx cx wxx char(3)
    (1bytes+yx)(1bytes+exx)(1bytes+lx)(1bytes+zxx) varchar(3)
    如果是可变长度 则有问题 不知道数据从哪里开始到哪里结束 所以需要有一个位置保存数据的长度
    vharchar 能支持的最大长度是65535 用于保存数据长度的数据最长两个bytes

    如果是char类型,如果你的数据不足指定的长度,就在后面用空格补齐

    验证:

    使用一个char_length的函数,可以查看字符的长度 

    create table t18(a char(4),b varchar(4));
    insert into t18 value("x","x");
    select char_length(a),char_length(b) from t18;
    两个字段的长度都为1

    结论:

    这是因为MySQL在存储时自动加上空格,对使用者而言是没有意义的,所以 MySQL自动帮你处理

    掉空格

    我们可以设置sql模式来让它先出原形

    set global sql_mode = "PAD_CHAR_TO_FULL_LENGTH,STRICT_TRANS_TABLES"
    设置完成后重启msyql 再次查询长度

    注意:
    当你在执行这样的查询语句时 mysql会自动将参数末尾的空格去除
    select *from t19 where name = "yh"
    当你在使用模糊搜索时 要注意 定长字符 后面可能会有空格 所以最好在后面加上百分号 %
    select *from t19 where name like "yh";
    % 任意个数的任意字符
    _ 1个任意字符

    如何选择
    char
    存取效率高
    浪费存储空间
    varchar
    存取效率低于char
    节省存储空间
    使用起来感受不到区别 通常用的是char

    char和varchar 长度都比较小 最大就是65535

    大文本类型:
    TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT 文本是带有编码
    BLOB 系列 TINYBLOB BLOB MEDIUMBLOB LONGBLOB 也是字符数据 但是不带编码

    二进制类型: 用于存储多媒体数据 比如视频 但是我们一般不会将多媒体数据存到数据 而是存储文件路径地址
    BINARY系列 BINARY VARBINARY 存储二进制数据

    注意:为该类型指定宽度时,仅仅只是指定查询结果的显示宽度,与存储范围无关,存储范围如下

    其实我们完全没必要为整数类型指定显示宽度,使用默认的就可以了

    默认的显示宽度,都是在最大值的基础上加1

    int的存储宽度是4个Bytes,即32个bit,即2**32

    无符号最大值为:4294967296-1

    有符号最大值:2147483648-1

    有符号和无符号的最大数字需要的显示宽度均为10,而针对有符号的最小值则需要11位才能显示完全,所以int类型默认的显示宽度为11是非常合理的

    最后:整形类型,其实没有必要指定显示宽度,使用默认的就ok

        

     

     

     

  • 相关阅读:
    十天学会php之第一天
    学习PHP的一些经验
    PHP中的数据类型(1)
    PHP中的常量
    赵凡导师并发知识第一次分享观后感
    面向对象之 __setitem__()、__getitem__()、__delitem__() 用法
    spider数据抓取(第二章)
    识别网站所用技术
    scrapy安装要求
    基于bs4的防止xss攻击,过滤script标签
  • 原文地址:https://www.cnblogs.com/xuecaichang/p/9629654.html
Copyright © 2011-2022 走看看