MySQL数据库学习

Posted longblogs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据库学习相关的知识,希望对你有一定的参考价值。

mysql数据库简介

MySQL是一个关系型数据库管理系统(relational database management system,RDBMS)

常用的关系型数据库软件有:MySQL、MariaDB、Oracle、SQL Server、PostgreSQL、DB2

1.1  RDBMS数据库的特点

  •  数据以表格的形式出现
  •  每行记录数据的真实内容
  •  每列记录数据真实内容的数据域
  •  无数的行和列组成一张表
  • 若干的表组成一个数据库

1.2  MySQL引擎

包括:ISAM、MyISAM、InnoDB、Memory、CVS、BlackHole、Archive、Performance_Schema、Berkeley、Merge、Federated、Cluster/NDB等,其中MyISAM与InnoDB使用最广泛

1)  MyISAM与InnoDB引擎功能对比

引擎特性

MyISAM

InnoDB

批量插入的速度

集群索引

不支持

支持

数据缓存

不支持

支持

索引缓存

支持

支持

数据可压缩

支持

不支持

硬盘空间使用

内存使用

外键支持

不支持

支持

存储限制

没有

64TB

事务安全

不支持

支持

锁机制

表锁

行锁

B树索引

支持

支持

哈希索引

不支持

支持

全文索引

支持

不支持

  •  MyISAM:MySQL5.0之前的默认数据库引擎,MyISAM其执行数据速度比InnoDB更快,但不提供事务支持,不支持外键,如果执行大量的select操作,MyISAM是更好的选择,支持表锁
  •  InnoDB:MySQL5.5之后默认引擎为InnoDB,事务型数据库的首选引擎,支持ACID事务,支持外部键、行级锁等高级数据库功能,执行大量的insert或update操作可以使用InnoDB引擎。

            A-原子性(atomicity):一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性

           C-一致性(consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态

           I-隔离性(isolation):一个事务所做的修改在最终提交以前,对其他事务是不可见的

           D-持久性(durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚

2  MySQL数据库字符集设置

有以下两种方法

1)  编辑vim /etc/my.cnf配置文件,在相应段中加入相应的参数字符集,修改完毕后重启MySQL服务即可

  •  [client]字段里加入:default-character-set=utf8
  •  [mysqld]字段里加入:character-set-server=utf8
  •  [mysql]字段里加入:default-character-set=utf8

2)  MySQL命令行中运行如下指令

  •  show variables like ‘%char%’;
  •  SET character_set_client=utf8;
  •  SET character_set_results=utf8;
  •  SET character_set_connection=utf8;

3  MySQL管理工具

3.1  mysql工具

mysql是一个简单的命令行SQL工具,该工具支持交互式和非交互式

例:mysql -u root -p -h 192.168.1.100

3.2  mysqladmin工具

mysqladmin是一个执行管理操作的工具,使用它可以检查服务器配置、当前运行状态,以及创建、删除数据库等

1)修改root密码

mysqladmin -u root -p password ‘newpassword‘

2)创建数据库

mysqladmin -uroot -p create daba-test

3)删除数据库

mysqladmin -uroot -p drop daba-test

3.3  mysqldump工具

mysqldump是一个数据库逻辑备份程序,可以使用它对一个或多个MySQL数据库进行备份或将数据库传输至其他MySQL服务器,执行mysqldump时需要账户拥有SELECT权限才可以备份数据库

mysqldump不是大数据备份的解决方案,mysqldump需要通过重建SQL语句来实现备份功能,对于数据量比较大的数据库备份与还原操作速度比较慢

对于mysqldump备份的数据文件,可以使用mysql命令工具还原数据

1)备份所有数据库

mysqldump -u root -p --all-database > all_database_sql

2)备份mysql数据库

mysqldump -u root -p --database mysql > mysql_database_sql

mysqldump mysql > mysql_database_sql

两者之间的差别在于不使--database选项,则备份输出信息中不会包含CREATE DATABASE或USE语句。不使--database选项备份的数据文件,在后期进行数据还原操作时,如果该数据库不存在,必须先创建改数据库

3)备份mysql数据库下的user表

mysqldump -u root -p mysql user > user_table

4)使用all_database_sql数据库备份文件还原数据库

mysql -u root -p < all_database_sql

5)使用mysql_database_sql数据库备份文件还原数据库

myslq -u root -p mysql < mysql_database_sql

6)使用user_table数据库备份文件还原数据表

mysql -u root -p mysql < user_table

4  SQL(结构化查询语言)

SQL(结构化查询语言)主要分为六部分:数据定义语言(DDL)、数据操作语言(DML)、数据查询语言(DQL)、数据控制语言(DCL)、事物处理语言(TPL)、指针控制语言(CCL)

4.1  数据定义语言(DDL)

用于数据库、表的创建与操作

1)  CREATE

  •  CREATE DATABASE 创建数据库

           CREATE DATABASE test;  创建test数据库

  •  CREATE TABLE  创建数据表

   CREATE TABLE tb (id INT NOT NULL AUTO_INCREMENT,name CHAR(20) NOT NULL,PRIMARY KEY (id));  创建tb表

2)  ALTER

  •  ALTER DATABASE 修改数据库属性

   ALTER DATABASE test DEFAULT CHARACTER SET=UTF8;  修改数据库默认的字符集

  •  ALTER TABLE  修改数据表结构,如:添加删除的列、创建删除的索引、修改数据类型等

     ALTER TABLE tb RENAME tb1;  重命名tb表为tb1

   ALTER TABLE tb1 ADD PRIMARY KEY (id);  设置id为主键

   ALTER TABLE tb1 DROP COLUMN name ; 删除name列

   ALTER TABLE tb ADD index(name);  添加索引

3)  DROP

  •  DROP TABLE 删除一个或多个数据表,所有的表数据以及表定义都将被删除

   DROP TABLE tb;

  •  DROP INDEX 删除特定数据表中的索引

   DROP INDEX name ON tb;  删除索引

  •  DROP DATABASE 删除数据库以及数据库中的所有数据表

   DROP DATABASE test;

4)  RENAME

  •  RENAME TABLE  用来对一个或多个数据表进行重命名

   RENAME TABLE tb TO temp;

   RENAME TABLE tb TO temp,tb1 TO temp1;

4.2  数据操作语言(DML)

用于添加,修改和删除表中的行

1)  INSERT  向数据表中插入一行新的数据

INSERT INTO tb (id,name) VALUES (2,"jack");

2)  UPDATE 更新数据表中现有的数据值

UPDATE tb SET name="xiaoming" WHERE id=2;

3)  LOAD DATA INFILE

用来快速从文本文件中读取数据到数据表中。

分隔符:文件默认使用Tab键为列的分隔符,行分隔符为换行符。可以使用FIELDS TERMINATED BY设置列分隔符,通过LINES STARTING BY设置行分隔符

注:LOAD DATA LOCAL INFILE  文件从客户端主机读取

       LOAD DATA INFILE文件必须位于服务器上, 且文件必须处于数据库目录或可被所有人读取的地方

  •  LOAD DATA INFILE ‘/var/lib/mysql/1.txt‘ into table tb;

技术分享图片

技术分享图片

  •  LOAD DATA INFILE ‘/var/lib/mysql/2.txt‘ INTO TABLE tb FIELDS TERMINATED BY ‘,‘;

 技术分享图片

技术分享图片

4)  DELETE

用来把满足条件的数据记录删除并返回删除的记录数量

DELETE FROM tb WHERE id=2;

4.3  数据查询语言(DQL)

用于查询数据表中的数据记录

  •  SELECT

   SELECT * FROM tb;  查询数据表中的所有的数据记录

   SELECT name FROM tb; 查询数据表中name记录

   SELECT COUNT(id) FROM tb; 统计id记录的总数

   SELECT * FROM tb WHERE id=1; 查询id为1的所有记录

4.4  数据控制语言(DCL)

用来设置或者更改数据库用户或角色权限的语句

1)  GRANT

  •  创建tomcat账户,仅可以通过本机连接MySQL,账号密码为pass,对test数据库中所有数据表拥有所有权限

   GRANT ALL ON test.* to ‘tomcat‘@‘localhost‘ IDENTIFIED BY ‘pass‘;

  •  创建tomcat账户,仅可以通过192.168.1.100连接MySQL,账号密码为pass,对所有数据库拥有查询权限

   GRANT SELECT ON *.* to ‘tomcat‘@‘192.168.1.100‘ IDENTIFIED BY ‘pass‘;

2)  REVOKE

撤销账户权限

  •  撤销tomcat对test数据库的所有权限

   REVOKE ALL ON test.* FROM [email protected]‘%‘;

  •  撤销tomcat对所有数据库的查询权限

   REVOKE SELECT ON *.* FROM [email protected]‘%‘;

4.5  事物处理语言(TPL)

能确保被DML语句影响的表的所有行及时得以更新, TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK

4.6  指针控制语言(CCL)

像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作

5  创建、修改与删除数据库账号密码

5.1  创建、修改数据库账号密码

1)  GRANT 创建账号并赋予权限

GRANT ALL ON test.* to ‘tomcat‘@‘localhost‘ IDENTIFIED BY ‘pass‘;

2)  直接修改数据库权限数据表mysql.user

修改root密码为newpwd,PASSWORD()的作用用来对密码加密存储,使用FLUSH PRIVILEGES更新该权限数据表

UPDATE mysql.user SET Password = PASSWORD(‘newpwd‘) WHERE User= ‘root‘;

FLUSH PRIVILEGES;

3)  通过mysqladmin设置账号密码(在shell中执行)

mysqladmin –u root –p password ‘centos‘

4)  SET PASSWORD命名设置密码

设置root从192.168.1.100主机连接MySQL服务器的账号密码

SET PASSWORD FOR ‘root‘@‘192.168.1.100‘ = PASSWORD(‘newpwd‘);

设置root从本机连接MySQL服务器的账号密码

SET PASSWORD FOR ‘root‘@‘localhost‘ = PASSWORD(‘newpwd‘)

5.2  删除数据库账号

DROP USER ‘tomcat‘@‘localhost‘;

6  MySQL数据库索引

MySQL索引可以用来快速地寻找某些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果MySQL没有索引,执行select时会从第一个记录开始扫描整个表的所有记录,直到找到符合要求的记录

1)常见索引类型包括:

  •  普通索引(normal):使用最广泛

   创建索引命令:ALTER TABLE tb ADD INDEX index_name(id);

   index_name为索引名称,自定义

  •  唯一索引(unique):不允许重复的索引,允许有空值

   创建索引命令:ALTER TABLE tb ADD UNIQUE(id);

  •  全文索引(full text):只能用于MyISAM表,主要用于大量的内容检索

   创建索引命令:ALTER TABLE tb ADD FULLTEXT(id);

  •  主键索引(primary key):又称特性的唯一索引,不允许有空值

   创建索引命令:ALTER TABLE tb ADD PRIMARY KEY(id);

  •  组合索引:为提高MySQL效率可建立组合索引

   创建索引命令:ALTER TABLE tb ADD INDEX index_name(id1,id2);

2)查看索引:

show index from tb;

show keys from tb;

3)删除数据表索引

    DROP INDEX index_name ON tb;

    ALTER TABLE tb DROP INDEX index_name;

    ALTER TABLE tb DROP PRIMARY KEY;

7  MySQL数据库慢查询

 MySQL慢查询日志指运行时间超过long_query_time值得SQL语句,慢查询主要用于跟踪异常的SQL语句,可以分析出当前程序里哪些SQL语句比较耗费资源

7.1  查看数据库是否开启慢查询

show variables like "%slow%";

show variables like "%long_query%";

技术分享图片

log_slow_queries   慢查询日志功能关闭开启状态

slow_launch_time   thread create时间,单位为秒,如果thread create的时间超过了这个值, 该变量slow_launch_time的值加1

slow_query_log     慢查询日志关闭开启状态

slow_query_log_file 慢查询日志文件

long_query_time    慢查询超时时间,默认为10s

log_queries-not-using-indexes 记录未添加索引的SQL语句

7.2  开启MySQL慢查询日志的方法

两种方法:

1)set global slow_query_log=on;

2)修改my.cnf配置文件

   log-slow-queries=/data/mysql/localhost.log

   long_query_time=2

   log-queries-not-using-indexes

7.3  慢查询日志分析命令mysqldumpslow

1)参数说明:

-s:排序方式 按锁的时间l、返回的记录数r、查询的时间t、记录的次数c,倒序加r,平均锁定时间al,平均返回记录数ar,平均查询时间at

-t:查询前多少条记录

-g:支持正则表达式,以及忽略大小写

2)例:查询按时间返回前2条日志信息,

mysqldumpslow -s t -t 2 /data/mysql/localhost.log

 

以上是关于MySQL数据库学习的主要内容,如果未能解决你的问题,请参考以下文章

MySQL数据库学习目录

MySQL超详细学习教程,2023年硬核学习路线

MySQL超详细学习教程,2023年硬核学习路线

MySQL超详细学习教程,2023年硬核学习路线

MySQL数据库学习导航

MySQL数据库学习导航