• MySQL


    MySQL介绍

    是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一!是基于socket编写的一款C/S架构的软件

    1、常见的数据库

    关系型数据库(需要有表结构)

    • MySQL 是一款免费、开源、支持大中型企业的数据库,运用广泛,后来被Sun公司收购,最后由Oracle公司将Sun公司合并,mysql的创始人又开发了一款MariaDB,完全兼容mysql,使用起来跟mysql一模一样!!
    • Oracle 是一款闭源且收费的分布式数据库,其功能极其强大!
    • SQLsever 是微软旗下的,仅支持Windows系统,局限性强
    • DB2 是IBM开发的数据库软件,闭源、收费,与IBM的机器绑定销售

    非关系型(key-value形式储存,没有表结构)

    • MongoDB
    • Redis
    • HBASE
    • memcache 

    2、Linux系统下的MySQL安装方法

    1.解压tar包
    cd /software
    tar -xzvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz
    mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql-5.6.21
    
    2.添加用户与组
    groupadd mysql
    useradd -r -g mysql mysql
    chown -R mysql:mysql mysql-5.6.21
    
    3.安装数据库
    su mysql
    cd mysql-5.6.21/scripts
    ./mysql_install_db --user=mysql --basedir=/software/mysql-5.6.21 --datadir=/software/mysql-5.6.21/data
    
    4.配置文件
    cd /software/mysql-5.6.21/support-files
    cp my-default.cnf /etc/my.cnf
    cp mysql.server /etc/init.d/mysql
    vim /etc/init.d/mysql   #若mysql的安装目录是/usr/local/mysql,则可省略此步
    修改文件中的两个变更值
    basedir=/software/mysql-5.6.21
    datadir=/software/mysql-5.6.21/data
    
    5.配置环境变量
    vim /etc/profile
    export MYSQL_HOME="/software/mysql-5.6.21"
    export PATH="$PATH:$MYSQL_HOME/bin"
    source /etc/profile
    
    6.添加自启动服务
    chkconfig --add mysql
    chkconfig mysql on
    
    7.启动mysql
    service mysql start
    
    8.登录mysql及改密码与配置远程访问
    mysqladmin -u root password 'your_password'     #修改root用户密码
    mysql -u root -p     #登录mysql,需要输入密码
    mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;     #允许root用户远程访问
    mysql>FLUSH PRIVILEGES;     #刷新权限
    Linux系统中安装MySQL
    1. 解压
    tar zxvf  mariadb-5.5.31-linux-x86_64.tar.gz   
    mv mariadb-5.5.31-linux-x86_64 /usr/local/mysql //必需这样,很多脚本或可执行程序都会直接访问这个目录
    
    2. 权限
    groupadd mysql             //增加 mysql 属组 
    useradd -g mysql mysql     //增加 mysql 用户 并归于mysql 属组 
    chown mysql:mysql -Rf  /usr/local/mysql    // 设置 mysql 目录的用户及用户组归属。 
    chmod +x -Rf /usr/local/mysql    //赐予可执行权限 
    
    3. 拷贝配置文件
    cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf     //复制默认mysql配置 文件到/etc目录 
    
    4. 初始化
    /usr/local/mysql/scripts/mysql_install_db --user=mysql          //初始化数据库 
    cp  /usr/local/mysql/support-files/mysql.server    /etc/init.d/mysql    //复制mysql服务程序 到系统目录 
    chkconfig  mysql on     //添加mysql 至系统服务并设置为开机启动 
    service  mysql  start  //启动mysql
    
    5. 环境变量配置
    vim /etc/profile   //编辑profile,将mysql的可执行路径加入系统PATH
    export PATH=/usr/local/mysql/bin:$PATH 
    source /etc/profile  //使PATH生效。
    
    6. 账号密码
    mysqladmin -u root password 'yourpassword' //设定root账号及密码
    mysql -u root -p  //使用root用户登录mysql
    use mysql  //切换至mysql数据库。
    select user,host,password from user; //查看系统权限
    drop user ''@'localhost'; //删除不安全的账户
    drop user root@'::1';
    drop user root@127.0.0.1;
    select user,host,password from user; //再次查看系统权限,确保不安全的账户均被删除。
    flush privileges;  //刷新权限
    
    7. 一些必要的初始配置
    1)修改字符集为UTF8
    vi /etc/my.cnf
    在[client]下面添加 default-character-set = utf8
    在[mysqld]下面添加 character_set_server = utf8
    2)增加错误日志
    vi /etc/my.cnf
    在[mysqld]下面添加:
    log-error = /usr/local/mysql/log/error.log
    general-log-file = /usr/local/mysql/log/mysql.log
    3) 设置为不区分大小写,linux下默认会区分大小写。
    vi /etc/my.cnf
    在[mysqld]下面添加:
    lower_case_table_name=1
    
    修改完重启:#service  mysql  restart
    Linux系统中安装MariaDB

    3、windows绿色版安装及密码修改(版本为5.6.42)

    # 1、下载MySQL:
    http://dev.mysql.com/downloads/mysql/
    
    # 2、解压
    # 将下载的压缩包解压到想要安装的目标盘下的文件夹
    
    # 3、添加环境变量,将解压缩后的bin文件添加至系统环境变量,如:C:Program Files (x86)mysql-5.6.42-winx64in
    
    # 4、注册为系统服务,注:需要以管理员身份运行cmd
    mysqld --install
    
    # 5、启动mysqld服务
    net start MySQL
    
    # 6、启动mysql客户端连接至mysql服务
    mysql -uroot -p
    
    # 7、关闭mysql服务
    net stop MySQL 或 taskill /f /pid PID号 或 tskill mysqld
    
    # 8、重启mysql客户端
    mysql -uroot -p     # 初始密码为空,直接回车进入
    
    # 9、修改密码(须退出mysql操作)
    mysqladmin -uroot password "自己的密码"   # 原密码为空时可以不用-p
    mysqladmin -uroot -p"旧密码" password "新密码"
    

    4、忘记密码解决办法

    Windows平台中的密码破解方式(mysql5.7版本),5.6版本为密码的字段为password

    #1 关闭mysql服务
    
    #2 在cmd中执行(跳过授权表登录操作):mysqld --skip-grant-tables
    
    #3 在新的cmd中执行:mysql
    
    #4 执行如下sql命令:
    update mysql.user set authentication_string=password('新密码') where user = 'root';
    
    # 刷新权限
    flush privileges;
    
    #5 tskill mysqld #或taskkill /f /pid pid号
    
    #6 重新启动mysql
    方式一
    #1. 关闭mysql,可以用tskill mysqld将其杀死
    
    #2. 在解压目录下,新建mysql配置文件my.ini
    #3. my.ini内容,指定
    [mysqld]
    skip-grant-tables
    
    #4.启动mysqld
    #5.在cmd里直接输入mysql登录,然后操作
    update mysql.user set authentication_string=password('新密码') where user='root and host='localhost';
    
    # 刷新权限
    flush privileges;
    
    #6.注释my.ini中的skip-grant-tables,然后启动myqsld,然后就可以以新密码登录了
    方式二

    Linux平台中的密码破解方式(mysql5.7版本)

    1. 停止mysql
        /etc/init.d/mysqld stop
    2. 启动数据库为无密码验证模式
        mysqld_safe --skip-grant-tables --skip-networking  &
    3. 更新密码
        update mysql.user set authentication_string=PASSWORD('456') where user='root' and host='localhost';
    4. 重启
        /etc/init.d/mysqld restart
    5. 登录
        mysql -uroot -p456
    View Code

    5、统一字符编码

    #1. 修改配置文件my.ini
    [mysqld]
    default-character-set=utf8
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    
    #mysql5.5以上:
    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    
    #2. 重启mysql服务
    
    #3. 查看修改结果:
    mysql>s
    mysql>show variables like '%char%'
    View Code

    6、为mysql服务指定配置文件(my.ini

    #在mysql的解压目录下,找到my.ini,然后配置
    #1. 在执行mysqld命令时,下列配置会生效,即mysql服务启动时生效
    [mysqld]
    port=3306
    character-set-server=utf8
    default-storage-engine=innodb
    innodb_file_per_table=1
    
    
    -----------------针对5.7版本--------------------------
    #解压的目录
    basedir=D:mysql-5.7.23-winx64
    #data目录
    datadir=D:mysql-5.7.23-winx64data #在mysqld --initialize时,就会将初始数据存入此处指定的目录,在初始化之后,启动mysql时,就会去这个目录里找数据
    -----------------------------------------------------
    
    
    #2. 针对客户端命令的全局配置,当mysql客户端命令执行时,下列配置生效
    [client]
    port=3306
    default-character-set=utf8
    # 可以将用户名密码配置在ini文件
    user=root
    password=123
    
    #3. 只针对mysql这个客户端的配置,2中的是全局配置,而此处的则是只针对mysql这个命令的局部配置
    [mysql]
    port=3306
    default-character-set=utf8
    
    #!!!如果没有[mysql],则用户在执行mysql命令时的配置以[client]为准

    7、mysql再次启动时显示失败的解决方案

    问题1:在使用net start msql启动时提示“服务没有报告任何错误”,启动失败!!
    解决方案:先在配置文件my.ini中将data的路径和文件的根目录添加进去,如(datadir=D:mysql-5.7.23-winx64data;basedir=D:mysql-5.7.23-winx64),注意不是让你自己新建data文件夹!!而是当你在mysql的bin目录下执行mysqld --initialize-insecure的命令时自动添加的,第一次执行这个命令可能会等待的时间较长,并且控制台没有任何返回结果。只是需要稍等即可,完了你就可以看到mysql的根目录下会自己多出一个data文件夹
    
    问题2:没有先执行mysqld  --initialize-insecure,而是先执行net start mysql了,启动失败
    解决方案:此时的解决方案是:删除data文件夹,然后执行mysqld - initializemysqld  --initialize-insecure,再net start mysql
    
    问题4:mysql安装完了,可高兴的输入“mysql或者mysql -uroot -p”一回车,居然没有进去,出现“ERROR 1045 Access denied for user 'xxx' NO”的错误
    解决方案:mysql默认安装会有密码生成,密码文件直接写在 log-error日志文件中(在5.6版本中是放在 root/.mysql_secret 文件里,更加隐蔽,不熟悉的话可能会无所适从),MySQL5.7在安装完后,第一次启动时,会在root目录下生产一个随机的密码,文件名为.mysql_secret
    
    进去之后重置密码:SET PASSWORD = PASSWORD('new password');
    View Code

    SQL语句

    # 1. 操作文件夹
    增:
        create database db1 charset utf8;
    查:
        show databases;
        show create database db1;
    改:
        alter database db1 charset utf8;
    删:
        drop database db1;
    
    
    # 2. 操作文件
    先切换到文件夹下:use db1
    增:
        create table t1(id int,name char,...);
    查:
        show tables;
        show create table db1;
        desc db1;
    改:
        alter table t1 modify name char(1);
        alter table t1 change old_name new_name char(2);
        alter table t1 add name int;
        改字符编码:
            alter table t1 default character set gbk
        改文件名:
            rename table t1 to t2
    删:
        drop table t1;
    
    
    # 3. 操作文件中的内容/记录
    增:
        insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');
    查:
        select * from t1;
        select id name from t1;
    改:
        update t1 set name = 'sb' where id = 2;
    删:
        delete from t1 where id = 1;
    
    
    清空表:
    delete from t1;  # 如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。
    truncate table t1; 数据量大,删除速度比上一条快,重建表,清空所有数据
    
    auto_increment 表示:自增
    primary key 表示:约束(不能重复且不能为空);加速查找

    表相关之存储引擎

    1、什么是存储引擎

    mysql中建立的库就是一个文件夹

    库中建立的表就是一个文件

    现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel,处理图片用png等

    数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。

    2、如何查看存储引擎

       #查看所有支持的存储引擎

    show enginesG

     #查看正在使用的存储引擎

    show variables like 'storage_engine%';  

    3、使用存储引擎

      方法一:建表时指定

    create table innodb_t1(id int,name char)engine=innodb;

    create table innodb_t2(id int)engine=innodb;

    show create table innodb_t1;

    show create table innodb_t2;

    方法二:从配置文件中指定

    [mysqld]

    default-storage-engine=INNODB

    innodb_file_per_table=1

    表相关之表的创建

    1、介绍表

    表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段,如:

    id,name,age称为字段,其余每一行内容称之为一条记录

    2、创建表

    语法

    create table 表名(
    字段名1 类型[(宽度) 约束条件],
    字段名2 类型[(宽度) 约束条件],
    字段名3 类型[(宽度) 约束条件]
    );

    注意

     在同一张表中,字段名是不能相同
     宽度和约束条件可选
     字段名和类型是必须的

    数据类型之整型

    1、所占的字节数

    tinyint    1
    smallint    2
    mediumint  3
    int      4
    bigint     8

    2、非严格模式下

    默认情况下整型是有符号的,需要用一个二进制位存储符号

    给整型加上约束unsigned来表示无符号

    如果数据超出范围就保存最大的值,例如:在无符号下保存256 其实存的255

    如果有符号 例如 tinyint 保存-129 其实存的是-128

    查看当前模式命令 show variables like "sql_mode";

    修改为严格模式命令 set global sql_mode = "STRICT_TRANS_TABLES";

    3、严格模式下

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

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

    4、长度限制对于整型的意义

    create table t1(id int(1));
    insert into t1 value(454555);
    select *from t1;

    发现这个数也存储成功
    说明这里长度指的不是存储容量限制而是显示的宽度
    如果你的数据超过了显示宽度,有几个长度就显示几个,其余的都不会显示出来
    如果不足,则补全到指定长度:create table t2(id int(10) zerofill);

    5、怎么选择整数型

    可根据实际情况来判断,能够保存你的数据的最小类型即可

    数据类型之字符型

    1、分类

    char    定长字符
    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 用于保存数据长度的数据最长2bytes

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

    2、验证

    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

    3、结论

    这是因为 mysql在存储时 自动加上的空格 对使用者而言是没有意义的 所以mysql自动帮你处理掉空格了
    我们可以设置sql模式 来让它现出原形
    set global sql_mode = "PAD_CHAR_TO_FULL_LENGTH,STRICT_TRANS_TABLES"
    设置完成后重启msyql 再次查询长度

    4、注意

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

    %   任意个数的任意字符
    _     1个任意字符

    5、如何选择

    char

    存取效率高
    浪费存储空间

    varchar

    存取效率低于char
    节省存储空间

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

    6、大文本类型

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

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

    数据类型之浮点型

    1、所占字节数

    float      4
    double    8
    decimal   不确定(手动指定)

    2、给浮点设置宽度限制

    float(m,d)
    double(m,d)
    decimal(m,d)

    3、长度说明

    m 表示这个浮点数整体的长度
    d 表示小数部分的长度
    例如: float(5,3) 最大值: 99.999

    4、区别

    相同点:

    小数部分最大长度都是 30
    float 和 double 的最大长度为 255

    不同点:

    decimal 的整体最大长度 65
    精度不同
    double 比 float 精度高
    decimal 是准确的 不会丢失精度,对精确度要求高就使用 decimal

    数据类型之日期型

    1、分类

    time       时分秒      HH:MM:SS
    year       年份
    date         日期        年 月  日
    datetime    日期 + 时间    年 月  日  时  分  秒     年份最大是9999
    timestamp 时间戳       从1970-1-1开始算       年份最大是2037

    2、共同点

    时间的存取通过字符串类型

    都可以使用 now() 函数来插入当前时间

    datetime 和 时间戳都能够表示日期和时间

    3、不同点

    年份最大范围不同
    时间戳可以为空,即代表当前时间
    时间戳在你更新记录时会自动更新为当前时间

     

    完整性约束

  • 相关阅读:
    Android提高UI性能技巧
    POJ-1785-Binary Search Heap Construction(笛卡尔树)
    atitit。企业组织与软件project的策略 战略 趋势 原则 attilax 大总结
    Remove Duplicates from Sorted List II 解答(有个比較特殊的case leetcode OJ没有覆盖)
    强名称程序集(strong name assembly)——为程序集赋予强名称
    虚函数练习:交通工具信息
    99 位职业设计师 99 个设计谏言
    在智能创业的风口鼓风,全国首个民间资本为主的物联网行业投融资平台诞生!
    具体解释。。设计模式5——DAO。。studying
    Android新控件RecyclerView剖析
  • 原文地址:https://www.cnblogs.com/rongge95500/p/9629538.html
Copyright © 2020-2023  润新知