• Mysql入门和基本知识


    第一章 Mysql入门

    1.1 了解数据库

    1.1.1什么是数据库?

    MySQL是最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是应用软件。

    数据库:数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以通过SQL对数据库中的数据进行增加,修改,删除及查询操作。

    关系型数据库:数据库中的记录是有行有列的数据库就是关系型数据库,与之相反的就是NoSQL数据库了。

    常见的数据库管理系统

    MYSQL开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL5.5版本之后都是由Oracle发布的版本。

    Oracle收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。

    SQLServerMicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。

    还有DB2,SyBase,SQLite数据库

    1.1.2 Mysql的发展史

    l MySQL的历史可以追溯到1979年,一个名为Monty Widenius的程序员在为TcX的小公司打工,并且用BASIC设计了一个报表工具,使其可以在4MHz主频和16KB内存的计算机上运行。当时,这只是一个很底层的且仅面向报表的存储引擎,名叫Unireg。

    l 1990年,TcX公司的客户中开始有人要求为他的API提供SQL支持。Monty直接借助于mSQL的代码,将它集成到自己的存储引擎中。令人失望的是,效果并不太令人满意,决心自己重写一个SQL支持。

    l 1996年,MySQL 1.0发布,它只面向一小拨人,相当于内部发布。

     

    到了1996年10月,MySQL 3.11.1发布(MySQL没有2.x版本),最开始只提供Solaris下的二进制版本。一个月后,Linux版本出现了。在接下来的两年里,MySQL被依次移植到各个平台。

    l 1999~2000年,MySQL AB公司在瑞典成立。Monty雇了几个人与Sleepycat合作,开发出了Berkeley DB引擎, 由于BDB支持事务处理,因此MySQL从此开始支持事务处理了。

    l 2000,MySQL不仅公布自己的源代码,并采用GPL(GNU General Public License)许可协议,正式进入开源世界。同年4月,MySQL对旧的存储引擎ISAM进行了整理,将其命名为MyISAM。

    2001年,集成Heikki Tuuri的存储引擎InnoDB,这个引擎不仅能持事务处理并且支持行级锁。后来该引擎被证明是最为成功的MySQL事务存储引擎。MySQL与InnoDB的正式结合版本是4.0

    l 2003年12月,MySQL 5.0版本发布,提供了视图、存储过程等功能。

    2008年1月MySQL AB公司被Sun公司以10亿美金收购MySQL数据库进入Sun时代。在Sun时代,Sun公司对其进行了大量的推广、优化、Bug修复等工作。

    l 2008年11月,MySQL 5.1发布,它提供了分区、事件管理,以及基于行的复制和基于磁盘的NDB集群系统,同时修复了大量的Bug。

    2009年4月,Oracle公司以74亿美元收购Sun公司,自此MySQL数据库进入Oracle时代,而其第三方的存储引擎InnoDB早在2005年就被Oracle公司收购

    l 2010年12月,MySQL 5.5发布,其主要新特性包括半同步的复制及对SIGNAL/RESIGNAL的异常处理功能的支持,最重要的是InnoDB存储引擎终于变为当前MySQL的默认存储引擎MySQL 5.5不是时隔两年后的一次简单的版本更新,而是加强了MySQL各个方面在企业级的特性。Oracle公司同时也承诺MySQL 5.5和未来版本仍是采用GPL授权的开源产品。

    1.1.3  Mysql的安装 

    1. mysql安装与使用

     

     

     

     

    登录

    格式1:cmd>  mysql –u用户名 –p密码

    例如:mysql -uroot –proot

    格式2:cmd>  mysql --user=用户名 --host=ip地址 --password=密码

    1.2 Sql语句

    1.2.1  Sql语句介绍

    什么是SQL?

    全称Structured Query Language,简称SQL,中文叫结构化查询语言。

    关系数据库语言的国际标准。SQL92SQL99

    不只是mysql还有其他数据库SQL92或者SQL99这些国际SQL标准基础之上它们还扩展了自己的一些SQL语句比如MySQL中的limit关键字

    l SQL分类:

    数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等

    数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等

    数据控制语言:简称DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户;关键字:grant等

    数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等

    1.2.2 子段类型

    数字型:int

    浮点型:double

    字符型:varchar(可变长字符串)

    日期类型:date(只有年月日,没有时分秒)

    分类

    类型名称

    说明

    整数类型

    tinyInt

    很小的整数

    smallint

    小的整数

    mediumint

    中等大小的整数

    int(integer)

    普通大小的整数

    小数类型

    float

    单精度浮点数

    double

    双精度浮点数

    decimal(m,d)

    压缩严格的定点数------开发时用

    日期类型

    year

    YYYY  1901~2155

    time

    HH:MM:SS  -838:59:59~838:59:59

    date

    YYYY-MM-DD 1000-01-01~9999-12-3

    datetime-开发用

    YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59

    timestamp

    YYYY-MM-DD HH:MM:SS  1970~01~01 00:00:01 UTC~2038-01-19 03:14:07UTC

    文本、二进制类型

    CHAR(M)

    M为0~255之间的整数

    VARCHAR(M)

    M为0~65535之间的整数

    TINYBLOB

    允许长度0~255字节

    BLOB

    允许长度0~65535字节

    MEDIUMBLOB

    允许长度0~167772150字节

    LONGBLOB

    允许长度0~4294967295字节

    TINYTEXT

    允许长度0~255字节

     

    TEXT

    允许长度0~65535字节

     

    MEDIUMTEXT

    允许长度0~167772150字节

     

    LONGTEXT

    允许长度0~4294967295字节

     

    VARBINARY(M)

    允许长度0~M个字节的变长字节字符串

     

    BINARY(M)

    允许长度0~M个字节的定长字节字符串

     

    1.2.3创建表

    create table 表名(

       字段名 类型(长度) 约束,

       字段名 类型(长度) 约束

    );

    单表约束:

        * 主键约束:primary key

        * 唯一约束:unique

        * 非空约束:not null

        * 注意:主键约束 = 唯一约束 + 非空约束

    例如:

    ###创建分类表

    CREATE TABLE sort (

      sid INT PRIMARY KEY, #分类ID

      sname VARCHAR(100) #分类名称

    );

     

    1.2.4 查看表

    查看数据库中的所有表:show tables;

    查看表结构:desc 表名;

    1.2.5 删除表

    drop table 表名;

    1.2.6 修改表

    alter table 表名 add 列名 类型(长度) 约束; --修改表添加列.

    alter table 表名 modify 列名 类型(长度) 约束; --修改表修改列的类型长度及约束.

    alter table 表名 change 旧列名 新列名 类型(长度) 约束; --修改表修改列名.

    alter table 表名 drop 列名; --修改表删除列.

    rename table 表名 to 新表名; --修改表名

    alter table 表名 character set 字符集; --修改表的字符集

    1.2.7 插入记录:insert

    insert into 表 (列名1,列名2,列名3..) values  (值1,值2,值3..); -- 向表中插入某些列

    insert into 表 values (值1,值2,值3..); --向表中插入所有列

    insert into 表 (列名1,列名2,列名3..) values select (列名1,列名2,列名3..) from 表

    insert into 表 values select * from 表

    1.2.8 CMD中文乱码

    修改my.ini文件,然后重启mysql服务器

     

     

    1.2.9聚合函数

    特点:只对单列进行操作

    常用的聚合函数: 

    sum():求某一列的和

    avg()求某一列的平均值

    max()求某一列的最大值

    min()求某一列的最小值

    count()求某一列的元素个数

    1.3 表与表之间的关系(表与表之间数据的关系)

    1.3.1 外键

    主从表的理解

     

    主表是:商品表。主表中,应该有一个字段去关联从表,而这个关联字段就是外键

    从表是:分类表。从表中,应该有一个字段去关联主表,而这个关联字段就是主键

    主键外键的理解

     

    alter table 表名 add [constraint][约束名称] foreign key (主表外键字段) references 从表(从表主键)

    1.3.2 一对一关系

    案例:(打比方)一个丈夫只能有一个妻子

    建表语句

    CREATE TABLE wife(

    id INT PRIMARY KEY ,

    wname VARCHAR(20),

    sex CHAR(1)

    );

    CREATE TABLE husband(

    id INT PRIMARY KEY ,

    hname VARCHAR(20),

    sex CHAR(1)

    );

    一对一关系创建方式1之外键唯一

    添加外键列wid,指定该列的约束为唯一(不加唯一约束就是一对多关系

    ALTER TABLE husband ADD wid INT UNIQUE;

    n 添加外键约束

    alter table husband add foreign key (wid) references wife(id);

    1.3.3 一对多关系

     

    案例:一个分类对应多个商品

     

    1.3.4 多对多关系

     

    1.4 多表关联查询

    1.4.1 交叉连接

    l 隐式交叉连接

    SELECT  * FROM A, B

    l 显式交叉连接

    SELECT  *  FROM  A  CROSS  JOIN  B

    1.4.2 内连接

    l 隐式内连接

    SELECT  *  FROM  A,B  WHERE A.id = B.id

    l 显式内连接

    SELECT  *  FROM  A  INNER JOIN  B ON A.id = B.id

    1.4.3 外连接

    左外连接:LEFT JOIN 或者 LEFT OUTER JOIN

    SELECT  *  FROM  A  LEFT  JOIN  B ON A.id = B.id

    右外连接::RIGHT JOIN 或者 RIGHT OUTER JOIN

    SELECT  *  FROM  A  RIGHT  JOIN  B ON A.id = B.id

    l 全外连接(MySQL不支持FULL  JOIN 或 FULL OUTER JOIN

    SELECT  *  FROM  A  FULL JOIN  B ON A.id = B.id

    1.4.4 分页查询

    l 格式:

    SELECT * FROM table LIMIT [offset,] rows

    1.5 Mysql事务处理

    1.5.1事务概述

    MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

    MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。

    事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。

    事务用来管理DML操作,比如 insert,update,delete 语句

    一般来说,事务是必须满足4个条件(ACID):

    l Atomicity(原子性)

    l Consistency(稳定性)

    l Isolation(隔离性)

    l Durability(可靠性)

    对于ACID的解释如下:

    原子性:构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。

    稳定性(一致性)数据库在事务执行前后状态都必须是稳定的。

    隔离性:事务之间不会相互影响。

    可靠性(持久性)事务执行成功后必须全部写入磁盘。

    1.5.2MySQL事务支持

    常见的操作有一下三个:

    l BEGIN或START TRANSACTION;显式地开启一个事务;

    l COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称为永久性的;

    l ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;

    MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

    第二章 进一步了解Mysql

    2.1 MySQL物理结构

    MySQL是通过文件系统对数据进行存储和管理的。

    MySQL从物理结构上可以分为日志文件和数据文件。

    MySQL通过日志记录了数据库操作信息和错误信息。常用的日志文件包括错误日志、二进制日志、查询日志、慢查询日志和 InnoDB 引擎在线 Redo 日志中继日志等。

    错误日志(err log):

    * 默认是开启而且从5.5.7以后无法关闭错误日志

    * 记录了运行过程中遇到的所有严重的错误信息,以及 MySQL每次启动和关闭的详细信息

    默认的错误日志名称:hostname.err

    * 错误日志所记录的信息是可以通过log-error和log-warnings来定义的,其中log-err是定义是否启用错误日志的功能和错误日志的存储位置,log-warnings是定义是否将警告信息也定义至错误日志中。

    * log_error可以直接定义为文件路径,也可以为ON|OFFlog_warings只能使用1|0来定义开关启动

    2.1.2数据文件

    查看MySQL数据文件:SHOW VARIABLES LIKE ‘%datadir%’;

    .frm文件主要存放与表相关的数据信息,主要包括表结构的定义信息

    .ibd和.ibdata文件:用来存储InnoDB存储引擎表数据和索引信息

    .myd文件主要用来存储使用MyISAM存储引擎的表数据信息

    .myi文件主要用来存储使用MyISAM存储引擎的表数据文件中任何索引的数据树。

    2.2 Mysql索引

    2.2.1 创建索引

    CREATE INDEX index_name ON table(column(length)) 

    ALTER TABLE table_name ADD INDEX index_name ON (column(length))

     

    CREATE UNIQUE INDEX index_name ON table(column(length)) 

    CREATE FULLTEXTINDEX index_name ON table(column(length)) 

     

    ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))

    2.2.2删除索引

    DROP INDEX index_name ON table

    2.4 Mysql 

    1.表级锁行级锁

    2.共享锁、排他锁、间隙锁

  • 相关阅读:
    深拷贝的终极探索(90%的人都不知道)
    VS Code:让你工作效率翻倍的23个插件和23个编辑技巧
    Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!
    【译】使用 ndb 调试 node 应用
    nodejs的express使用介绍
    Koa 框架教程
    VSCode配置Git随记
    单页面路由原理及实现
    可能比文档还详细--VueRouter完全指北
    急速JavaScript全栈教程
  • 原文地址:https://www.cnblogs.com/wnlsq/p/12109687.html
Copyright © 2020-2023  润新知