mysql基础

 

mysql基础

数据模型:

数据模型:层次模型、网状模型、关系模型、……

关系模型:

二维关系:表
    行:row, entity
    列:colume, attribution

索引:数据结构,辅助完成数据查找;
    较少的代价,完成数据查找
    但是带来的副作用时,导致数据修改速度变慢。
    原始数据发送改变,索引也要改变。

数据库管理系统

DMBS:DataBase Management System RDBMS:Relational DBMS

关系型数据库:

    SQL引擎:向用户提供逻辑视图

    存储引擎:Storage Engine
        将数据以块级别存储在磁盘设备上。一定程度上有类似文件系统的功能。

注:关系型数据提供两种视图,向用户提供逻辑布局,存储上提供物理布局。并能够将物理布局完美的映射到逻辑布局
    逻辑布局:逻辑上是表结构
    物理布局:物理上存储上的数据流

SQL接口(SQL引擎):

客户端要与SQL交互,就能够与SQL的API交互。交互的方式使用SQL协议进行交互。 SQL解释用户的SQL语句,交给存储引擎处理。

SQL:Structure Query Language
    结构化查询语言

    ANSI:SQL-标准,SQL-86, SQL-89, SQL-92, SQL-99, SQL-03, ...

SQL代码:支持脚本

    存储例程:storage routing
        存储过程:storage procedure 过程没有返回值
            过程调用使用call
        存储函数:storage function  函数有返回值
            函数调用使用select

    触发器:trigger
        有一个监视器,监视对象一旦满足某个条件或动作就执行某个行为。
    事件调度器:event scheduler
        类似系统计划任务,定期或周期性的执行某个代码

SQL引擎和存储引擎的关系像shell和内核之间的关系。

事务:一个由单个或多个SQL语句组成的不可分割原子操作(一般为写入语句),Transaction;

        A:20000
        B: 3000
        A给B转账5000,A要减去5000,B要加上5000

关系型数据库是否满足事物,要通过ACID测试      
ACID:
    A: 原子性;不可分割,要么都执行,要么都不执行。
    C:一致性;从一个一致状态转到另一个一致状态。
    I:隔离性;只有一个事物结束,才能执行另一个事物
        比如一个人用A的账户给B转账10000,另一个人在异地取款1500.两个事物不能交叉进行。
    D:持久性;存储到设备中,不能事物结束后,还没写入设备。否则断电数据丢失。

满足事物性的数据库,并发性较低。隔离是有级别的,隔离级别低并发较高,隔离级别高并发则较低。

博客作业:amp的各种部署方式;

回顾: fpm、amp编译安装、MariaDB fpm: pm=static|dynamic /pm-status ?json, ?xml, ?html, ?full

    amp编译安装:
        考虑:如何做到服务开机自启?

        Unit File, Init Script?

    MariaDB:
        事务:ACID


基础概念:

数据类型: 作用:存储格式、数据范围、所能参与的运算、排序方式

字符型:
    定长字符型:CHAR(#),BIARNY(#)
    变长字符型:VARCHAR(#),VARBINARY(#)
    对象存储:
        TEXT
        BLOB
    建类型:ENUM,SET

数值型:

    精确数值型:
        INT:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT

    近似数值型:
        FLOAT
        DOUBLE

    日期时间型:
        DATE
        TIME
        DATETIME
        TIMESTAMP
        YEAR

修饰符:NOT NULL, DEFAULT,
类型符:UNSIGNED

数据库的设计范式:

第一范式:字段是原子性的;
第二范式:存在可用的主键;
第三范式:任何字段都不应该依赖于其它表的非主键字段;

数据约束:向数据表中插入数据时要遵守的限制规则
    主键:primary key,表上一个或多个字段的组合,填入主键字段中的数据,必须不同于已经存在的其它行的相同字段上的数据,而且也不能为空;一个表只能存一个主键;

    惟一键:unique key,表上一个或多个字段的组合,填入其中字段中的数据,必须不同于已经存在的其它行的相同字段上的数据,但可以为空;一个表可以有多个惟键;

    外键:foreign key,一个表中的外键字段中所能够插入的数据取值范围,取决于引用的另一个表上主键字段上的已经存在数据集合;
        检查条件约束:check,自定义的逻辑表达式;

MariaDB的基础应用:

MariaDB程序组成:

        C:Client
            mysql
            mysqladmin
            mysqldump
            mysqlbinlog
            ...
        S:Server
            mysqld
            mysqld_safe
            mysqld_multi

管理工具程序:

            myisampack
            myisamchk
            ...

基于套接字通信

IPv4:PORT
IPv6:PORT
Unix_Sock:/var/lib/mysql/mysql.sock, /tmp/mysql.sock

命令行客户端程序mysql

mysql [OPTIONS] [database]

    常用选项:
    -uUSERNAME
    -hHOST
    -pPASSWORD          
    -Ddb_name           
    -S sock_file_path
    -P port         
    -e 'STATEMENT'

命令:

客户端命令:在客户端执行;
mysql> help 
    \?:获取可用的命令帮助;
    \q:退出客户端程序;
    \d CHAR:自定义语句结束符;
    \g:语句结束标记;
    \G:语句结束标记,竖排显示结果;
    \! SHELL_CMD:运行shell命令;
    \s:当前连接及服务器相关的状态信息;
    \. 

服务端命令:SQL语句,发往服务端运行,并取回结果;需要显式的语句结束符;

    DDL:数据定义语言,主要用于数据库组件,例如数据库、表、索引、视图、触发器、事件调度器、存储过程、存储函数;
            CREATE, ALTER, DROP

    DML:数据操纵语言,CRUD操作,主要用于操作表中的数据;
            INSERT,DELETE,UPDATE,SELECT

    DCL:数据控制语言
            GRANT, REVOKE

SQL语句:

    获取帮助:
        mysql> help KEYWORD
        mysql> help contents

数据库管理:

        CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name  [DEFAULT] CHARACTER SET [=] charset_name 

        ALTER {DATABASE | SCHEMA} [db_name] CHARACTER SET [=] charset_name

        DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

        相关命令:
            SHOW CHARACTER SET 
            SHOW COLLATION
            SHOW CREATE DATABASE db_name

表管理:

        表创建:
            CREATE  TABLE [IF NOT EXISTS] tbl_name  (create_definition,...)  [table_options]

                create_definition:由逗号分隔的列表
                    字段定义:
                        column_name column_defination
                    约束定义:
                        PRIMARY KEY(col1[,col2, ....])
                        UNIQUE KEY 
                        FOREIGN KEY 
                        CHECK(expr)
                    索引定义:
                        {INDEX|KEY} 
                        {FULLTEXT|SPATIAL}

                column_definition:      
                    data_type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string']

                table_option:
                    ENGINE [=] engine_name

                查看数据库支持的存储引擎种类:
                    SHOW ENGINES;

                查看表状态信息:
                    SHOW TABLE STATUS [WHERE CLAUSE] [LIKE CLAUSE]
        表修改:            
                ALTER  TABLE tbl_name [alter_specification [, alter_specification] ...]

                    alter_specification:
                        (1) 表选项 
                            ENGINE=engine_name
                            ...
                        (2) 表定义 
                            (a) 字段
                                ADD 
                                DROP
                                CHANGE
                                MODIFY 
                            (b) 键和索引
                                ADD {PRIMARY|UNIQUE|FOREIGN} key (col1, col2, ...)
                                ADD INDEX(col1, col2, ...)

                                DROP {PRIMARY|UNIQUE|FOREIGN} KEY key_name;
                                DROP INDEX index_name;

                    查看表上的索引信息:
                        SHOW INDEXES FROM tbl_name;
            表删除:            
                DROP  TABLE [IF EXISTS] tbl_name [, tbl_name] ...

            查看表创建语句:
                SHOW CREATE TABLE tbl_name

索引管理:

            创建:
                CREATE  [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON tbl_name (index_col_name,...)

                    index_col_name: 
                        col_name [(length)] [ASC | DESC]

            删除:
                DROP  INDEX index_name ON tbl_name

            查看:
                SHOW {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name  [{FROM | IN} db_name]  [WHERE expr]

DML语句:

            INSERT,SELECT,DELETE,UPDATE

            INSERT:
                INSERT  [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} ({expr | DEFAULT},...),(...),...

            SELECT:
                (1) SELECT * FROM tbl_name;
                (2) SELECT col1, col2, ... FROM tbl_name;
                    字段别名:col1 AS ALIAS
                (3) ELECT col1, col2, ... FROM tbl_name WHERE CLUASE;
                    WHERE expr:布尔表达式;
                        col_name OPERATOR value|col_name;

                            操作符:
                                >, <, <=, >=, =, !=
                                BETWEEN ... AND ...
                                LIKE 'PATTERN':
                                    通配符:
                                        _:匹配任意单个字符;
                                        %:任意长度的任意字符;
                                RLIKE 'PATTERN':
                                IN(list)

                            组合条件:
                                and, or, not 
                (4) SELECT col1, ... FROM tbl1_name [WEHRE CLAUSE] ORDER BY col1, col2, ... [ASC|DESC]

            DELETE:
                DELETE FROM tbl_name
                    [WHERE where_condition]

            UPDATE:
                UPDATE table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
                    [WHERE where_condition]

图形管理工具:

phpMyAdmin Navicat mysql-front SQLyog  ToadForMySQL

原创文章,作者:yyw,如若转载,请注明出处:http://www.178linux.com/56571

(0)
yywyyw
上一篇 2016-11-01
下一篇 2016-11-01

相关推荐

  • jenkins+gitlab构建安卓自动编译环境

        因工作关系接触到接触到安卓自动编译环境,网上的资料都推荐了jenkins,因为第一次接触安卓和jenkins,踩了不少的坑,有总结才有进步。    gitlab环境之前已经安装完成可用,具体步骤另外详解吧。本例目标是在gitlab可用前提下,通过jenkins将git仓库的代码自行编译打包,生成可用的apk安装…

    Linux干货 2016-07-16
  •  编译安装步骤     大致过程:(源代码–预处理–编译–汇编–链接–执行)   第一步 下载安装开发工具“Development toos” 第二步 下载解压源代码包 仔细阅读“Install和 Read me” 第三步 使用./conf…

    Linux干货 2017-04-24
  • 文件查找工具之——find

        前言:Linux一切皆文件,在linux的系统中如果我们需要找到所需的文件,除了一步一步慢慢找,还有一种办法就是要使用Linux中查找文件工具命令,能让我们很快定位到我们所需的文件。所以我们必须要学好文件查找工具 一、首先我们先要了解文本搜索和文件查找的区别     文本…

    Linux干货 2015-07-06
  • MySQL 简述

    1 概述
    2 安装
    3 数据库的操作
    4 注意事项

    Linux干货 2017-09-25
  • Linux下软件包安装(rpm,yum)

    Linux下软件包安装(rpm,yum,源代码) 1)    Rpm包管理安装 2)    Yum包程序管理器 3)    本地Yum仓库建制 ======================================= 1) …

    Linux干货 2016-06-22
  • 一键获取MySQL账户及相关的权限

    有时候,运维同学可能在做grant授权时候,给的用户权限太高了,有风险。因此,我们接手服务器后有必要检查一遍用户权限。 #!/bin/bash# 一键获取MySQL账户及相关的权限 user=’root’ password=’123456′ MYSQL_CMD=’/usr/local/mysql/b…

    Linux干货 2017-05-07