• mysql基础


      数据库
    是用户存放数据、访问数据、操作数据的存储仓库,用户的各种数据被有组织的存放在数据库中。可以随时被有权限的用户查询、统计、添加、删除、和修改。
    是长期存储在计算机内的,有组织、可共享的数据集合。
    数据库系统是由普通的文件系统发展而来的。数据库系统具有较高的数据独立性,即不依赖于特定的数据库应用程序;
    数据库系统的数据冗余小,可以节省数据的存储空间;
    另外数据库系统还很容易实现多个用户的数据共享。

      数据库的发展史
    初始阶段-----人工管理:人力手工整理存储数据
    萌芽阶段-----文件系统:使用磁盘文件来存储数据
    初级阶段-----第一代数据库:出现了网状模型、层次模型的数据库
    中级阶段-----第二代数据库:关系型数据库和结构化查询语言
    高级阶段-----新一代数据库:“关系-对象”型数据库

    数据模型

     程序员的数据库要求

    基本的SQL操作、CRUD操作多表连接查询、分组查询和子查询。
    常用数据库的的单行函数。
    常用数据库的基本命令。
    常用数据库的开发工具。
    事务概念。索引、视图、存储过程和触发器。

    时下流行的DBMS
    Oracle:应用广泛、功能强大,分布式数据库系统关系-对象”型数据库
    MySQL:快捷、可靠开源、免费、与php组成经典的LAMP组合
    SQL Server:针对不同用户群体的五个特殊版本易用性好
    DB2:应用于大型应用系统,具有较好的可伸缩性

    MLSQL简介
    MySQL是一个小型关系数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被sun公司10亿美金收购。2009年,SUN又被Oracle以74亿美金收购。目前MySQL被广泛地应用在Internet上的中小型网站中。由于体积小、速度快、总体拥有成本低,尤其是开放源代码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

    MySQL的特性
    1.使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。
    2.支持AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多种操作系统。
    3.为多种编程语言提供了API。这些编程语言包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。
    4.支持多线程,充分利用CPU资源,支持多用户。
    5.优化的SQL查询算法,有效地提高查询速度。
    6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
    7.提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
    8.提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
    9.提供用于管理、检查、优化数据库操作的管理工具。
    10.可以处理拥有上千万条记录的大型数据库。

    版本介绍:
    Alpha版:开发版,公司内部使用
    Beta版:完成开发后,用户体验版
    RC版:生产环境发布之前的一个小版本或称候选版
    GA版:正式发布版本
    file://C:UsersADMINI~1AppDataLocalTempct_tmp/1.png
    MySQL获取:
    http://www.mysql.com/从官方网站下载安装包
    从官方网站下载源代码包
    从官方网站下载二进制包
    从发行版本光盘中获取安装包

    MySQL在企业中应用
    数据库排名:http://db-engines.com/en/ranking
    file://C:UsersADMINI~1AppDataLocalTempct_tmp/2.png
    为什么选择MySQL?
    MySQL性能卓越,服务稳定,很少出现异常宕机;
    MySQL开放源代码且无版权制约,自主性及使用成本低;
    MySQL历史悠久,社区及用户非常活跃,遇到问题,可以寻求帮助;
    MySQL软件体积小,安装使用简单,并且易于维护,安装维护成本低;
    MySQL品牌口碑效应,使得企业无需考虑就直接用之,LAMP,LEMP流程结构;
    MySQL支持多种操作系统,提供多种API接口,支持多种开放语言,特别对流行的PHP语言有很好的支持;

    mysql体系结构

        

    连接层

    1. 思想   为解决资源频繁分配,释放所造成的问题,为数据库建立一个"缓冲池".
    2. 原理:预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从"缓冲池"中取出一个。使用完毕之后再放回去。

            3. 作用:进行身份验证,线程重组,连接限制,检查内存,数据缓存;管理用户的连接,线程 处理等需要缓存的需求。

    SQL层

    1.管理服务组件:从备份和恢复的安全性、复制、集群、管理、配置、迁移和元数据等方面管理数据库。

    2.SQL接口组件:进行DML、DDL、存储过程、师徒、触发器等操作和管理;用户SQL命令接口。

    3.解析器组件:验证和解析SQL命令。

    4.查询优化器组件:对SQL语句查询进行优化"选取、投影和连接"

    4.缓存和缓冲区:有一系列小缓存组成的,比如表缓存,记录缓存,key缓存,权限缓存等。

    插件式存储引擎

    mysql的存储引擎是插件式的。他根据MySQL AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制,这种访问机制就就叫存储引擎。

    1.MylSAM:他查询速度快,有较好的索引优化和数据压缩技术。但是不支持事物。

    2.InnoDB:支持事物,并提供行级锁定,应用广泛。

    3.BDB:不在从底层支持BDB.

    4.Memory:适合存储临时数据。

    5.Archive:适合存储历史数据。

    物理文件层

    1.支持文件类型:EXT3、EXT4、NTFS、NFS。

    2.文件内容:数据文件、日志文件、配置文件、其他文件。

    mysql安装

    1.下载RPM包安装

    1)卸载mariadb    #rpm -e mariadb

    2)安装 yum install   mysql mysql-server  (前提是从网上rpmfind.net下载下来)

       启动: [root@localhost ~]# systemctl start mysqld

                 [root@localhost ~]# systemctl enable mysqld

      mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改:
                 [root@localhost ~]# grep "temporary password" /var/log/mysqld.log
                2017-08-04T15:14:25.922138Z 1 [Note] A temporary password is generated for root@localhost: Ng21WK5INA_x
    登陆数据库修改密码:
    alter user 'root'@'localhost' identified by 'ABC123,com';    

    2.yum源方式安装

      [root@localhost ~]# yum install -y https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm

      [root@localhost ~]# yum list | grep "mysql-community"

    安装:[root@localhost ~]#   yum install mysql-community-client mysql-community-server

    通用二进制安装:

      1、下载glibc版本的Mysql
    mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
    2、新建用户以安全方式运行进程
    # groupadd -r -g 306 mysql
    # useradd -r -u 306 -g 306 -s /sbin/nolgin -M mysql
    3、安装并初始化mysql
    # # tar xf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
    # cd /usr/local/
    # ln -sv mysql-5.7.18-linux-glibc2.5-x86_64/ mysql
    # chown -R mysql.mysql mysql/*
    初始化
    # cd mysql
    # bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

     

    记住密钥:2017-08-04T15:29:52.665521Z 1 [Note] A temporary password is generated for root@localhost: rlrrF!tk>2d=

    4、修改mysql主配置文件
    # vim /etc/my.cnf 

      5、为mysql提供sysv服务脚本
    # cp support-files/mysql.server /etc/rc.d/init.d/mysqld
    # chmod +x /etc/rc.d/init.d/mysqld
    6、启动mysql
    # chkconfig --add mysqld --添加为系统服务
    # chkconfig mysqld on --开机自启动
    # systemctl start mysqld
    7、将mysql的bin目录加入PATH环境变量,编辑/etc/profile文件 使用mysql客户端命令
    [root@stutest mysql]# mysql
    -bash: mysql: command not found
    由于PATH环境变量中没有添加,因此有两种方式:
    一种是用绝对路径,如下:
    # /usr/local/mysql/bin/mysql
    第一种用起来比较麻烦,我们下面用第二种添加到PATH
    # cd /etc/profile.d/ # vim mysql.sh
    添加如下内容 export PATH=$PATH:/usr/local/mysql/bin
    # source mysql.sh  

    源码安装

      从5.5开始使用cmake编译。
    在mysql5.7后编译安装需要boost的支持

      2、编译安装MySQL
    1)解压 # tar xf mysql-boost-5.7.18.tar.gz -C /usr/local/src/
    2)使用cmake编译MySQL
    cmake指定编译选项的方式不同于make,其实现方式对比如下:
    ./configure cmake .
    ./configure --help cmake . -LH or ccmake .
    注意:如果想清理此前的编译所生成的文件重新编译,则需要使用如下两条命令:
    make clean;rm CMakeCache.txt
    [root@localhost mysql-5.7.18]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
    -DMYSQL_DATADIR=/usr/local/mysql/data
    -DDEFAULT_CHARSET=utf8
    -DDEFAULT_COLLATION=utf8_general_ci
    -DWITH_EXTRA_CHARSETS=all
    -DWITH_MYISAM_STORAGE_ENGINE=1
    -DWITH_INNOBASE_STORAGE_ENGINE=1
    -DWITH_ARCHIVE_STORAGE_ENGINE=1
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1
    -DWITH_INNODB_MEMCACHED=1
    -DENABLED_LOCAL_INFILE=1
    -DMYSQL_UNIX_ADDR=/tmp/mysql.sock
    -DWITH_BOOST=boost

    cmake参数:https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html
    3)编译安装 # make && make install

    3、为mysql提供主配置文件
    mv /etc/my.cnf /etc/my.cnf.backup
    vim /etc/my.cnf

        [client]
    socket = /tmp/mysql.sock


    [mysqld]
    socket = /tmp/mysql.sock
    basedir = /usr/local/mysql
    datadir = /usr/local/mysql/data
    character_set_server=utf8
    4、初始化 创建用户
    # groupadd -g 306 mysql
    # useradd -r -u 306 -g 306 -s /sbin/nolgin -M mysql
    创建数据库存放目录并授权
    # mkdir /usr/local/mysql/data -p
    # chown -R mysql.mysql /usr/local/mysql/data
    初始化mysql
    # /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
    5、为mysql提供sysv服务脚本
    # cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    # chmod +x /etc/init.d/mysqld
    # chkconfig --add mysqld
    # chkconfig mysqld on
    6、修改PATH环境变量,让系统可以直接使用mysql的相关命令l
    # vim /etc/profile.d/mysql.sh
    export PATH=$PATH:/usr/local/mysql/bin
    # source mysql.sh
    启动MySQL:# systemctl start mysql

      MySQL多实例安装
    1、创建mysql用户及组
    2、编译安装MySQL 这里为了节省,采用通用二进制格式。
    3、创建多实例数据目录
    mkdir -p /var/run/mysqld
    mkdir -p /usr/local/mysql/data330{6,7} /usr/local/mysql/binlog330{6,7}
    chmod 750 /var/run/mysqld /usr/local/mysql/data* /usr/local/mysql/binlog*
    chown -R mysql:mysql /usr/local/mysql/ /var/run/mysqld

    4、创建MySQL多实例的配置文件

    vi /etc/my.cnf

    [mysqld_multi]
    mysqld = /usr/local/mysql/bin/mysqld_safe
    mysqladmin = /usr/local/mysql/bin/mysqladmin
    #user = root
    #password = rootpwd

    [mysqld3306]
    port = 3306
    server_id = 3306
    basedir =/usr/local/mysql
    datadir =/usr/local/mysql/data3306
    log-bin=/usr/local/mysql/binlog3306/mysql-bin
    socket =/tmp/mysql3306.sock
    log-error =/var/log/mysqld3306.log
    pid-file =/var/run/mysqld/mysqld3306.pid

    [mysqld3307]
    port = 3307
    server_id = 3307
    basedir =/usr/local/mysql
    datadir =/usr/local/mysql/data3307
    log-bin=/usr/local/mysql/binlog3307/mysql-bin
    socket =/tmp/mysql3307.sock
    log-error =/var/log/mysqld3307.log
    pid-file =/var/run/mysqld/mysqld3307.pid

    5、MySQL命令全局使用路径(添加环境变量)
    6、初始化MySQL多实例数据文件
    # cd /usr/local/mysql/scripts/
    # /usr/local/mysql/bin/mysqld --initialize --datadir=/usr/local/mysql/data3306 --user=mysql
    # /usr/local/mysql/bin/mysqld --initialize --datadir=/usr/local/mysql/data3307 --user=mysql
    8、启动MySQL多实例
    mysqld_multi report
    启动:mysqld_multi start 3306,3307
    关闭:mysqld_multi stop 3306,3307

    登录:mysql -uroot -p -S /tmp/mysql3307.sock -P 3307
    mysql -uroot -p -S /tmp/mysql3306.sock

    MySQL基础操作
    1、启动与关闭
    RHEL6: service mysql start|stop 或 /etc/init.d/mysql start|stop
    RHEL7: systemctl start|stop mysql
    2、登录与退出
    mysql -u user_name -ppassword -h host_name
    h:连接MySQL不在本机时,填写主机名或IP地址
    u:登录MySQL用户
    p:登录MySQL的密码
    注意:密码写在命令行时一定不能有空格
    3、设置及修改MySQL root用户密码
    没有密码时设置: mysqladmin -uroot password '123456'
    修改root密码:
    方法1:mysqladmin -uroot -p'123456' password
    5.6版本:方法2:update mysql.user set password=password('111') where user='root';
    #新版的mysql数据库下的user表中已经没有Password字段了
    5.7 版本:update user set authentication_string=password('123456') where user='root' and Host = 'localhost';
    提示:此法适合--skip-grant-tables方式修改密码。
    重启mysql服务,修改密码生效。
    方法3:set password=password('123');

    root密码遗忘:
    1.在/etc/my.cnf中添加

    skip-grant-table   ==> 重启服务

    2.进入mysql中

    5.6版本:update mysql.user set password=password('111') where user='root';

    5.7 版本:update user set authentication_string=password('123456') where user='root' and Hos

    3. flush privileges;

       q   =>退出数据库

    4.systemctl restart mysqld

     三、mysql数据库操作

      SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:
    DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
    DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
    DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE

      3.1系统数据库
    information_schema: 虚拟库,主要存储了系统中的一些数据库对象的信息,例如用户表信息、列信息、权限信息、字符信息等
    performance_schema: 主要存储数据库服务器的性能参数
    mysql: 授权库,主要存储系统用户的权限信息
    test: MySQL数据库系统自动创建的测试数据库

    创建数据库 查看数据库 删除数据库
    create database 库名 show  databases drop database 库名

    创建表 查看表 删除表(结构、数据)
    create table show tables drop table 表名/ delete table 表名

    选择数据库:use 数据库名    

      查看数据库信息
    查看当前连接的数据库 SELECT DATABASE();
    查看数据库版本 SELECT VERSION();
    查看当前用户 SELECT USER();
    查看所有用户 SELECT User,Host,Password FROM mysql.user;
    执行Linux命令: SYSTEM <命令>

    四、mysql常用数据类型

    int    整型

    char    字符型

    varchar     字符型(变长)

    float         浮点型    例:float(3,2)数据宽度为3位,小数点后最多2位。

    date   日期    /   time    时间 / datetime  时间日期 /  timestamp  时间戳/  year  年(4位)

    五、选择存储引擎

    1.查看

      SHOW ENGINESG
    SHOW VARIABLES LIKE 'storage_engine%';

    2.选择存储引擎

    方法1.
    mysql> create table innodb1(
    -> id int
    -> )engine=innodb;
    mysql> show create table innodb1;

    方法2.
    /etc/my.cnf
    [mysqld]
    default-storage-engine=INNODB

    mysql表操作

    创建表 查看表结构 修改表 删除表(结构、数据)
    create table 表名 desc table 表名 alter table 表名 (add/drop  字段 ······) drop table/delete table 表名

    修改字段:modify 字段 类型   (notnull、primary key、auto_increment)

    例:  mysql> CREATE DATABASE school; //创建数据库school
    mysql> use school;
    mysql> create table student1(
    -> id int,
    -> name varchar(50),
    -> sex enum('m','f'),
    -> age int
    -> );
    Query OK, 0 rows affected (0.03 sec)

    mysql数据操作

    插入数据 更新数据 删除数据 查询数据
    insert into   表名(字段2,字段3…) VALUES (值2,值3…); update 表名 set   字段1=值1; delete from 表名 select 字段 from 表名

    复制表结构:create table t4 like t3;        包括约束条件一起复制

    只复制表结构:create table t4 select * from t3  were 1=2     (条件为假)

    复制表结构和数据:create table t4 select * from t3;           不包括约束条件

    单/多表查询条件限制

    as  起别名

    distinct   去重

    current_date   当前日期

    % 匹配多个字符

    _   匹配一个字符

    order   by     排序{升序 ESC (默认),降序 DESC}

    limit     结果限定

    count (*)     计数

    group  by     分组

    show    now() ;      显示当前时间

    year  (now())-year   (birthday)=年龄

    分组统计后条件不能用were,得用having。

    were中不能使用聚合函数(AVG、max、min等),having 可以。

    replace(替换) into   类似   insert   into  。         ==> replace 相当于delete+insert

    显示mysql的字符集:show variables  like '%char%' ;

    多表查询关键字

    left/right   join             左/右连接

    full    join                  全连接  

    between () and ()    在什么和什么之间

    is null 或 is not  null

    in(集合)或not  in

    like   模糊匹配

    子查询:

    exists   /  not  exists

    any 、all、in、not in

    =、>、<、!=

    多表查询完整语句

    select   *  from 表名

    where  ·····················

    group  by ····················

    having ·······················

    limit  ·······················

  • 相关阅读:
    CSS中A的一个应用
    net2.0下的简繁转换
    SQL Server游标的使用【转】
    在sql stuff 函数用法
    在sql stuff 函数用法 1
    关于数据库优化问题收集
    SQL中 patindex函数的用法
    SQL中的TRY CATCH
    SqlDataAdapter.Update批量数据更新
    在winForm窗体上加上DialogResult作为返回
  • 原文地址:https://www.cnblogs.com/sxchengchen/p/7749966.html
Copyright © 2020-2023  润新知