Mysql基础

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

一、数据库的基本概念:


1、数据库发展史

Sybase-->Microsoft(SQL Server)

Informix-->被IBM收购(DB2)

Oracle-->

MySql-->MariaDB


2、DBA工作内容:

(1)、开发:

A、数据库设计

B、代码设计:存储过程、存储函数、触发器

(2)、管理:

A、连接管理以及优化

B、备份和还原

C、数据库设计

D、基本语句优化

E、用户以及权限管理

F、安全管理

G、数据库软件安装及升级

H、配置优化


2、事务(ACID):事务是多个操作组合的一件事情,保证数据要么都完成,要么都失败。

(1)、A:原子性-->不可分割,要么都执行,要么都不执行。

(2)、C:一致性-->从一个一致性状态,到另一个一致性状态。

      比如: A账户有5000元,B账户有5000元,一共10000元。

          如果A转账2000给给B账户,那么A账户为3000元,B账户为7000元,

         那么一共为10000元。总之数据是不会损失,总数是不会变的。

(3)、I:隔离性-->一个事务在提交前所有的修改对其他人来讲是不可见的。

        还是上面的转账例子:A账户-2000,B账户+2000,在事务提交前,其他人是看不到A、B

      两账户变化的即其他人在查询A、B账户时还都是5000元。

(4)、D:持久性-->一旦事务得到提交,其所做的修改会永久有效。


3、事务的隔离级别:

(1)、读未提交:read-uncommited,能读到别人事务尚未提交的修改,叫读未提交。

    如果事务级别为“读未提交”,那么第一个用户执行

   mysql>start transaction;

   mysql>delete from students where stuID=1;

   此时第一个用户事务不提交,那么第二个用户执行

    mysql>start transaction;

   mysql>select * from students,则查询结果已看不到stuID=1的数据。

   此种情形就是“读未提交”的“脏读”问题。

   此时第一个用户事务回滚,那么第二个用户执行               

   mysql>select * from students,则查询结果又能看到stuID=1的数据。            此种情形就是“读未提交”的“不可重复读(两次读取的结果不一样)”问题。 

   另外还有一个“幻读问题(就是两次结果不一样,和产生幻觉是的)”。    

(2)、读提交:read-commited,解决了“脏读”问题。

    如果事务级别为“读提交”,那么第一个用户执行

   mysql>start transaction;

   mysql>delete from students where stuID=1;

    此时第一个用户事务不提交,那么第二个用户执行

    mysql>start transaction;

   mysql>select * from students,则查询结果能看到stuID=1的数据。

   此时第一个用户事务提交,那么第二个用户执行               

   mysql>select * from students,则查询结果不能看到stuID=1数据。            

     此种情形就是“读提交”的“不可重复读(两次读取的结果不一样)”问题。

   另外还有一个“幻读问题(就是两次结果不一样,和产生幻觉是的)”。   

(3)、可重读:repeatable-read,解决了“脏读、不可重复读”问题,但还有幻读问题。

    如果事务级别为“读提交”,那么第一个用户执行

   mysql>start transaction;

   mysql>delete from students where stuID=1;

    此时第一个用户事务不提交,那么第二个用户执行

    mysql>start transaction;

   mysql>select * from students,则查询结果能看到stuID=1的数据。

   此时第一个用户事务提交,那么第二个用户执行

   mysql>select * from students,则查询结果还能看到stuID=1的数据。

   只有第二个用户执行commit或者rollback后,在执行如下查询:

    mysql>select * from students,则查询结果不能看到stuID=1的数据。

    可见还有幻读问题。

(4)、串行化:serializable,强制事务的串行执行解决了“幻读问题”,但效率极差,因只有一个事务完成,另一个事务才开始执行,否则就一直等待,极少用,甚至可以说不用。


注意:

A、自上而下,级别越来越高。MySql的默认隔离级别为“可重读”。

B、MySql常用的存储引擎MyISAM和InnoDB;注意MyISAM不支持事务,InnoDB支持事务。

C、查看MySQL的默认事务隔离级别方法:

mysql>show global variables like 'tx_isolation';

+---------------+-----------------+

| Variable_name | Value       |

+---------------+-----------------+

| tx_isolation | REPEATABLE-READ |

+---------------+-----------------+

D、查看MySQL事务自动提交是否开启,MySql默认是自动提交事务,即默认情况下如果没有显示启动事务,每个语句都当作一个独立的事务,其执行完成后会被自动提交。

mysql> show global variables like 'autocommit';

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| autocommit   | ON   |

+---------------+-------+

E、MySQL是通过多版本并发控制实现事务的,即每个事务启动时,InnoDB会为每个启动的事务提供一个当下时刻的快照。

F、推荐使用“读提交”和“可重读”两种中的一种,MySQL默认隔离级别是“可重读”。


4、SQL(Struct Query Language):

(1)、DCL(Data Control Language):

Grant/Revoke

(2)、DDL(Data Defination Language):

Create/Alter/Drop

(3)、DML(Data Manipulation Language):

Insert/Delete/Select/Update


5、数据库结构示意图:

wKioL1XYGMygNSABAAR8CK8Swr0640.jpg

6、学习MySQL的内容概述:

(1)、MySql基本知识

(2)、Mysql事务、隔离、并发控制、锁

(3)、用户和权限

(4)、监控

(5)、索引:优化sql

(6)、备份和恢复

(7)、复制功能

(8)、集群


7、MySQL 版本(Community/Enterprise):

 (1)、Community社区版

 (2)、Enterprise企业版


二、Linux上安装MySql:

1、安装mysql的方式:

(1)、操作系统自带的rpm包

(2)、Mysql官方提供的rpm包

(3)、通用的二进制格式(类似于绿色软件,解压即可使用)

(4)、源码编译安装

2、通用的二进制格式安装Mysql:

(1)、tar xf mysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local

(2)、ln -sv mysql-5.5.33-linux2.6-x86_64 mysql 

(3)、groupadd -r mysql

       useradd -g mysql -r -s /sbin/nologin mysql

       cd /usr/local/mysql

       chown -R mysql.mysql ./*

(4)、mkdir /data/mydata 

       chown -R mysql.mysql /data/mydata

       

(5)、MySql初始化:

      /usr/local/mysql/scripts/mysql_install_db --datadir=/data/mydata --user=mysql

(6)、初始化完成后,要将/usr/local/mysql/下的组改为root

    cd /usr/local/mysql/

    chown -R root ./*

(7)、mysql配置文件:

cp /usr/local/mysql/support-files/my-large.cnf /etc/my.cnf

因在安装时,datadir进行了调整,所以/etc/my.cnf的[mysqld]段要加上=/data/mydata

说明:/usr/local/mysql/support-files/下可用的mysql配置文件有很多,

如my-large.cnf 、my-innodb-heavy-4G.cnf、my-medium.cnf、my-small.cnf


(8)、配置mysql服务:

       cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld

       chkconfig --add mysqld:添加到服务中

       chkconfig --list mysqld:查看服务

(9)、启动mysql:service mysqld start





三、linux上mySql的客户端:

1、安装:

(1)、vim /etc/profile.d/mysql.sh

   export PATH=/usr/local/mysql/bin:$PATH

   . /etc/profile.d/mysql.sh

(2)、命令行执行mysql即可。

(3)、处理root用户和匿名用户:

A、删除匿名用户:

mysql> drop user ''@'localhost'或者 delete from  user where user='' and host='localhost';

B、给所有的root用户设置密码:

   a、第一种方式:

mysql> SET PASSWORD FOR username@host =PASSWORD('your_password');

mysql> FLUSH PRIVILEGES;

   b、第二种方式:

    mysql> update user set password =PASSWORD('your_password') where user='root';

mysql> FLUSH PRIVILEGES;

2、mysql客户端的使用:

(1)、-u UserName或者--user=UserName,用户省略表示管理员

(2)、-p 或者--password=,密码省略表示空密码

(3)、-h hostName或者--host=hostName,主机省略表示本机。


四、MySql的存储引擎:


1、mysql的存储引擎是插件化的存储引擎。


2、MySql常用的存储引擎MyISAM和InnoDB:

MyISAM:不支持事务,非聚集索引(索引文件和数据文件不在一起,这样查找相对速度较慢);

InnoDB:支持事务,聚集索引(索引文件和数据文件在一起,这样查找速度快)。


五、MySql管理:


1、Mysql的基本命令:

(1)、显示所有数据库命令:

   show databases;

(2)、设置默认数据库:

   use 数据库名,如use mysql;

(3)、显示某库下的所有表:

   show tables;

(4)、查看某表的表结构:desc 表名,如desc user;

(5)、为了安全,一般要删除表user中的匿名用户,删除的命令为:

   drop user 用户账号,如drop user ''@'localhsot'或者delete from user where username= ''

(6)、查看当前打开的数据库:select database();

(7)、查看当前登录的用户:select user();

(8)、查询语句中几个重要的参数:

    A、\G:是结果集不在一行展示。 

    B、\c:取消当前sql的语句的执行。

(9)、执行sql脚本即批处理:

     mysql -uroot -p密码<a.sql,其中a.sql的内容如下:

     show databases;

     select user();

(10)、显示创建表的语句:show create table 表名;


如show create table students;


(11)、显示mysql支持的存储引擎(注:存储引擎是表类型) show engines;

结果如下:Transactions:事务, XA :分布式事务。

+--------------------+---------+------------------------------------------

| Engine         | Support |  Transactions | XA   | Savepoints|

+--------------------+---------+------------------------------------------

| MyISAM         | YES   |  NO           | NO   | NO     |

| CSV           | YES   |  NO           | NO   | NO     |

| MRG_MYISAM      | YES   |  NO           | NO   | NO     |

| BLACKHOLE       | YES   |  NO           | NO   | NO     |

| MEMORY         | YES   |  NO           | NO   | NO     |

| FEDERATED       | NO   |    NULL         | NULL | NULL    |

| ARCHIVE        | YES   |  NO           | NO   | NO     |

| PERFORMANCE_SCHEMA | YES   |  NO           | NO   | NO     |

| InnoDB         | DEFAULT|  YES          | YES  | YES    |

+--------------------+-----------+-----------------------------------------

(12)、显示mysql表状态数据:

A、查看所有表:show  table status;


B、查看某个表:show  table status like '表名';

如show  table status like 'students'\G;

*************************** 1. row ***************************

           Name: students

         Engine: InnoDB

        Version: 10

     Row_format: Compact

           Rows: 6

 Avg_row_length: 2730

    Data_length: 16384

Max_data_length: 0

   Index_length: 0

      Data_free: 10485760

 Auto_increment: 7

    Create_time: 2015-08-24 01:28:58

    Update_time: NULL

     Check_time: NULL

      Collation: latin1_swedish_ci

       Checksum: NULL

 Create_options: 

        Comment: 



2、MySql账户管理:

(1)、用户账号=用户名@主机名

(2)、创建用户账号

(3)、修改用户账号密码:

   set password for 'root'@'localhost.localdomain'=password('123456');



六、约束、键、字段类型、字段类型的修饰符、创建/删除表、增删改查、sql条件:

1、约束constraint:

(1)、主键约束:

惟一,不能为NULL,对于一张表来说主键有且只能有一个。

(2)、外键约束:

       

(3)、惟一键约束:

惟一,可以为NULL,对于某个惟一键来说值不能重复出现,对于一张表来说惟一键可以有多个。

(4)、检查式约束:

用户自定义有效取值范围,如:人的年龄不能大于200

(5)、非空约束:

not null

2、键key:

(1)、主键:能够惟一标识表中每一个记录的字段或者字段的组合。

(2)、外键:

(3)、惟一键


3、字段类型:

(1)、字符型:

char(#)

varchar(#)

text

blob

(2)、数值型

精确数值型:

int

  tinyint

  smallint

  mediumint

  int

  biginit

decimal(常用于金融系统中)

近似数值型

float

double

(3)、日期型

date

time

datetime

timestamp:自1970年到现在的秒数。

(4)、布尔型(mysql无布尔型):


(5)、NULL

(6)、内置类型:

A、ENUM,枚举,如定义性别 ENUM('F','M'),只能是其中一个。

B、SET,集合,只能是集合内一个或几个值的组合。


4、字段或字段类型的修饰符:

(1)、not null:不能为空

(2)、null:可以为空

(3)、unsigned:无符号类型,即>1

(4)、default:默认值

(5)、auto_increment:自动增长,自动增长类型的字段必须为主键或者惟一键。

(6)、primary key:标记某字段为主键

(7)、unique key:惟一键

5、创建表:


create table tbl_name (col1_name col1_type,col2_name col2_type...);


如:create table students (sid bigint,sname varchar(30),sex enum('F','M'));


如:create table students (sid bigint auto_increment primary key,sname varchar(30) not null,age tinyint unsigned not null,sex enum('F','M') default 'M');


6、删除表:

drop table table_name;

如:drop table students;


7、增删改查:

(1)、增:insert into tbl_name (col1,col2...) values (val1,val2...)

      insert into tbl_name select 语句。

(2)、删:delete from tbl_name where col1=条件1 and col2=条件2

(3)、改:update tbl_name set col1=val1,col2=val2 where col1=条件1 and col2=条件2

(4)、查:select col1,col2... from tbl_name where col1=条件1 and col2=条件2


8、sql条件:

(1)、比较条件:=、>=、<=、>、< 、<>

(2)、组合条件:and 、or、not

(3)、模糊条件:like ,其中%匹配任意长度任意字符,_:匹配任意单个字符。












本文转自lzf0530377451CTO博客,原文链接: http://blog.51cto.com/8757576/1687055,如需转载请自行联系原作者



相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Java 关系型数据库 MySQL
MySQL数据库基础
文章主要介绍MySQL数据库中一些常见的操作,为专栏文章,系列介绍
171 0
MySQL数据库基础
|
SQL 存储 关系型数据库
MySQL常用基础 - 小白必看(二)
概念:是一个数据定义语言 该语言部分包括: 1、对数据库的常用操作 2、对表结构的常用操作
160 0
MySQL常用基础 - 小白必看(二)
|
存储 SQL 缓存
MySQL数据库系列(一)------基础
数据不会随程序结束而消失
174 0
MySQL数据库系列(一)------基础
|
关系型数据库 MySQL 数据格式
【0基础学习mysql】之DML-表中数据的操作
【0基础学习mysql】之DML-表中数据的操作
147 0
【0基础学习mysql】之DML-表中数据的操作
|
关系型数据库 MySQL Java
MySQL数据库基础数据入门级[图文详解]
MySQL数据库基础数据入门级[图文详解]
MySQL数据库基础数据入门级[图文详解]
|
SQL 存储 人工智能
华为大佬的“百万级”MySQL笔记,基础+优化+架构一键搞定
前言 MySQL不用多说,大家都知道它是目前最为活跃热门的开源数据库,由于成本低,操作简易的特点,所以在互联网企业中被广泛使用,即使是头部的BATJ。由此可见,想要在互联网行业混得风生水起,或者说想要进入BATJ等一线互联网公司,那么熟练掌握MySQL必定是一块必要的敲门砖。 对于MySQL的使用,可能很多刚开始工作的开发人员还是挺陌生的,但要想学习又不知道从何开始,技术的落后自然会让人感到焦虑。实际上,学习MySQL,找对方法就能轻松搞定。 今天,特将华为大佬整理的“百万级”MySQL笔记分享给你们,从基础到优化再到架构,带你轻松上手,一键搞定。
|
存储 SQL JSON
|
关系型数据库 MySQL
MySQL基础(二)下
MySQL基础(二)下
135 0
MySQL基础(二)下
|
存储 SQL JSON
MySQL基础(二)中
MySQL基础(二)中
115 0
MySQL基础(二)中
|
存储 SQL NoSQL
MySQL基础(二)上
MySQL基础(二)上
206 0
MySQL基础(二)上