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

相关推荐

  • LB Cluster:lvs

    Linux Cluster: Cluster:计算机集合,为解决某个特定问题组合起来形成的单个系统; Linux Cluster类型: LB:Load Balancing,负载均衡; HA:High Availiablity,高可用; A=MTBF/(MTBF+MTTR) (0,1):90%, 95%, 99%, 99.5%, 99.9%, 99.99%, …

    Linux干货 2017-06-24
  • Linux-进程管理

    本小节介绍  1、进程的描述  2、用户怎么样管理进程  3、进程管理的命令 进程的概念        内核的功能:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等。        Pro…

    2017-07-02
  • bash脚本变量的使用

    bash脚本的变量使用详解 变量的类型包括整数、字符串和数组,但在bash脚本编程中不需要指定类型就可以直接赋值,默认均为字符型,其参与运算会自动进行隐式类型转换。 变量的赋值方式为:name='value',其中“=”两边一定不能有空格,如果变量值中包含有空格则需要使用引号引起来,需要注意的是强引用和弱引用的区分。此外变量的赋值也可以引…

    Linux干货 2016-08-15
  • do some test

    1、简述TCP三次握手四次挥手过程及各过程中客户端和服务器端的状态。     三次握手:         a(syn-send) -> send syn -> b(listen)         a(syn-send) <- receive …

    Linux干货 2016-06-12
  • 优云Monitor:开启数据中心主机运维的上帝视角

    常常有这么一句话在激励每一位运维人员,“不以故障多为耻,而以恢复快为荣。”运维人员就是要快速定位问题,分析问题,排除故障,快速恢复来保障生产业务不受中断。然而,现代大型数据中心,运维人员要管理的系统节点比以前繁多,为了掌控数据中心的实时运行情况与定位问题,需要花的时间成本已经长得无法接受。 而优云Monitor给运维人员提供了极好的可视化手段,能够让运维人员…

    系统运维 2017-01-09
  • 循环结构

    循环结构 循环执行:     讲一段代码重复执行一次或多次          进入条件:条件满足时进入循环     退出条件:每一个循环都应该有退出条件,以有机会退出循环;   &…

    Linux干货 2016-08-21