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

相关推荐

  • 关于大型网站技术演进的思考(十四)–网站静态化处理—前后端分离—上(6)

    原文出处: 夏天的森林    前文讲到了CSI技术,这就说明网站静态化技术的讲述已经推进到了浏览器端了即真正到了web前端的范畴了,而时下web前端技术的前沿之一就是前后端 分离技术了,那么在这里网站静态化技术和前后端分离技术产生了交集,所以今天我将讨论下前后端分离技术,前后端分离技术讨论完后,下一篇文章我将会以网站 静态化技术…

    Linux干货 2015-03-11
  • 【招聘需求】高级运维工程师/上海虹口区/待遇20k左右

    上海虹口区/待遇20k左右 有意向者发简历至@管家邮箱 邮件名是:[求职]Net-姓名-花名-工作年限 岗位职责:1、降低技术壁垒,建设运维工具、运维平台,实现运维自动化,包括 运维自动化、配置管理中心等。2、具备前瞻性,带领运维技术团队完成业务支撑,负责定位、分析、跟踪和相协调处理重大事故,使之对业务影响降至最低。3、技术支持、培训、知识库建设。4、运维接…

    Linux干货 2015-03-12
  • 如何将迁移home到独立分区中

        背景(centos7中):         由于在刚开始学习linux时磁盘分配追求简单,只是把一个磁盘简单的分了3个分区。现在,因用户数据增多、磁盘空间变少、当数据撑满磁盘时,会导致系统崩溃。为防止此种情况的发生我必须把把根下的/home 目录迁移出 来独立分…

    2017-08-10
  • CentOS进程管理

    CentOS进程管理 笔记 Linux系统中的基本运行单位是进程,通过对系统系统中的进程的管理能够对系统的实时运行状态进行了解和调度。Linux中提供了用于查看、调整和停止进程的命令。本文仍然以RHEL6说明Linux系统的进程管理。 CentOS进程管理 一、进程概述 二、查看进程 1、使用ps命令 2、top命令 一、进程概述 程序是保存在存储介质中的可…

    Linux干货 2017-05-15
  • 磁盘分区管理之磁盘基础知识1

    1、磁盘基础知识 1.1 磁头 磁头是利用气流漂浮在盘片上,并没有接触到盘片,因而可以在各轨间高速来回移动,但如果磁头距离盘片太高,读取的信号就会太弱;太低又会磨到盘片表面,所以盘片表面必须相当光滑平整,任何异物和尘埃均会使得磁头摩擦到表面而造成数据永久性损坏。 硬盘读写磁头为了能在磁盘表面高速来回移动读取数据,则需漂浮在磁盘表面上,但是不能接触,接触就会造…

    Linux干货 2016-09-07
  • 马哥教育21期网络班—第12周课程+练习—-LAMP练习

    1、请描述一次完整的http请求处理过程; (1) 建立或处理连接:接收请求或拒绝请求 (2) 接收请求: 接收来自于网络的请求报文中对某资源的一次请求的过程; 持久连接:接收到请求不会断开这个请求 非持久连接:一个连接请求断开一次 并发访问响应模型(Web I/O): 单进程I/O结构:启动一个进程处理用户请求,而且一次只处理…

    Linux干货 2016-09-26