MySQL数据库简介与基本操作

MySQL数据库简介与基本操作,第1张

MySQL数据库简介基本操作 目录
  • 一、MySQL简介
    • 1、数据库管理软件分类
    • 2、MySQL
  • 二、存储引擎(也称作表类型)
    • 1、常用存储引擎及适用场景
    • 2、存储引擎在mysql中的使用
      • 1、 在建表时指定存储引擎
      • 2 、在配置文件中指定存储引擎
  • 三、MySQL表操作
    • 1、查看表结构
      • 2、自动增长列
      • 四 、MySQL支持的数据类型
        • 1、ENUM和SET类型
          • 2、set/enum示例
          • 五、MySQL表查询
            • 1、限制查询的记录数(limit)
              • 2、使用正则表达式查询
              • 六、数据备份(命令行)
                • 1、 数据库的逻辑备份
                  • 2、 数据恢复
                  • 七、事务和锁(SQL)
                    • 八、执行计划Explain

                      一、MySQL简介

                      1、数据库管理软件分类

                      主要分为关系型和非关系型。

                      可以简单的理解为,关系型数据库需要有表结构,非关系型数据库是key-value存储的,没有表结构。

                      关系型:如sqllite,db2,oracle,access,sql server,MySQL,注意:sql语句通用。

                      非关系型:mongodb,redis,memcache

                      2、MySQL

                      MySQL是一个关系型数据库管理系统 ,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。

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

                      MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

                      MySQL为我们提供开源的安装在各个操作系统上的安装包,包括mac,linux,windows。

                      二、存储引擎(也称作表类型)

                      MySQL中的数据用各种不同的技术存储在文件(或者内存)中。每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。

                      MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。

                      1、常用存储引擎及适用场景
                      • InnoDB:用于事务处理应用程序,支持外键和行级锁。如果应用对事物的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包括很多更新和删除操作,那么InnoDB存储引擎是比较合适的。 
                        InnoDB除了有效的降低由删除和更新导致的锁定,还可以确保事务的完整提交和回滚,对于类似计费系统或者财务系统等对数据准确要求性比较高的系统都是合适的选择。
                      • MyISAM:如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不高,那么可以选择这个存储引擎。
                      • Memory:将所有的数据保存在内存中,在需要快速定位记录和其他类似数据的环境下,可以提供极快的访问。 
                        Memory的缺陷是对表的大小有限制,虽然数据库因为异常终止的话数据可以正常恢复,但是一旦数据库关闭,存储在内存中的数据都会丢失。

                      mysql支持的存储引擎包括InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、 NDB、FEDERATED、MRG_MYISAM、ARCHIVE、PERFORMANCE_SCHEMA。 
                      其中NDB和InnoDB提供事务安全表,其他存储引擎都是非事务安全表。

                      2、存储引擎在mysql中的使用
                      # 查看当前的默认存储引擎:
                      mysql> show variables like "default_storage_engine";
                      
                      # 查询当前数据库支持的存储引擎
                      mysql> show engines \G;

                      1、 在建表时指定存储引擎
                      mysql> create table ai(id bigint(12),name varchar(200)) ENGINE=MyISAM; 
                      mysql> create table country(id int(4),cname varchar(50)) ENGINE=InnoDB;
                      
                      # 也可以使用alter table语句,修改一个已经存在的表的存储引擎。
                      mysql> alter table ai engine = innodb;

                      2 、在配置文件中指定存储引擎
                      # my.ini文件
                      [mysqld]
                      default-storage-engine=INNODB

                      三、MySQL表操作

                      1、查看表结构

                      查看表结构有两种方式:

                      • desc[tablename]和describe [tablename]:这两种方法和效果相同,可以查看当前的表结构。
                      • show create table [tablename]:除了可以看到表定义之外,还可以看到engine(存储引擎)和charset(字符集)等信息。(\G选项的含义是是的记录能够竖向排列,以便更好的显示内容较长的记录。)

                      举例:

                      mysql> desc staff_info;
                      +-------+-----------------------+------+-----+---------+-------+
                      | Field | Type                  | Null | Key | Default | Extra |
                      +-------+-----------------------+------+-----+---------+-------+
                      | id    | int(11)               | YES  |     | NULL    |       |
                      | name  | varchar(50)           | YES  |     | NULL    |       |
                      | age   | int(3)                | YES  |     | NULL    |       |
                      | sex   | enum('male','female') | YES  |     | NULL    |       |
                      | phone | bigint(11)            | YES  |     | NULL    |       |
                      | job   | varchar(11)           | YES  |     | NULL    |       |
                      +-------+-----------------------+------+-----+---------+-------+
                      rows in set (0.00 sec)
                      
                      mysql> show create table staff_info\G;
                      *************************** 1. row ***************************
                             Table: staff_info
                      Create Table: CREATE TABLE `staff_info` (
                        `id` int(11) DEFAULT NULL,
                        `name` varchar(50) DEFAULT NULL,
                        `age` int(3) DEFAULT NULL,
                        `sex` enum('male','female') DEFAULT NULL,
                        `phone` bigint(11) DEFAULT NULL,
                        `job` varchar(11) DEFAULT NULL
                      ) ENGINE=InnoDB DEFAULT CHARSET=utf8
                      row in set (0.01 sec)
                      
                      ERROR: 
                      No query specified

                      2、自动增长列

                      约束字段为自动增长,被约束的字段必须同时被key主键约束

                      --不指定id,则自动增长
                      create table student(id int primary key auto_increment,name varchar(20),sex enum('male','female') default 'male');
                      
                      mysql> desc student;
                      +-------+-----------------------+------+-----+---------+----------------+
                      | Field | Type                  | Null | Key | Default | Extra          |
                      +-------+-----------------------+------+-----+---------+----------------+
                      | id    | int(11)               | NO   | PRI | NULL    | 
                      auto_increment  |
                      | name  | varchar(20)           | YES  |     | NULL    |                |
                      | sex   | enum('male','female') | YES  |     | male    |                |
                      +-------+-----------------------+------+-----+---------+----------------+
                      mysql> insert into student(name) values ('nick'),('tank') ;
                      
                      mysql> select * from student;
                      +----+------+------+
                      | id | name | sex  |
                      +----+------+------+
                      |  1 | nick | male |
                      |  2 | tank | male |
                      +----+------+------+
                      
                      
                      --也可以指定id
                      mysql> insert into student values(4,'asb','female');
                      Query OK, 1 row affected (0.00 sec)
                      
                      mysql> insert into student values(7,'wsb','female');
                      Query OK, 1 row affected (0.00 sec)
                      
                      mysql> select * from student;
                      +----+------+--------+
                      | id | name | sex    |
                      +----+------+--------+
                      |  1 | nick | male   |
                      |  2 | tank | male   |
                      |  4 | asb  | female |
                      |  7 | wsb  | female |
                      +----+------+--------+
                      
                      
                      --对于自增的字段,在用delete删除后,再插入值,该字段仍按照删除前的位置继续增长
                      mysql> delete from student;
                      Query OK, 4 rows affected (0.00 sec)
                      
                      mysql> select * from student;
                      Empty set (0.00 sec)
                      
                      mysql> insert into student(name) values('ysb');
                      mysql> select * from student;
                      +----+------+------+
                      | id | name | sex  |
                      +----+------+------+
                      |  8 | ysb  | male |
                      +----+------+------+
                      
                      --应该用truncate清空表,比起delete一条一条地删除记录,truncate是直接清空表,在删除大表时用它
                      mysql> truncate student;
                      Query OK, 0 rows affected (0.01 sec)
                      
                      mysql> insert into student(name) values('nick');
                      Query OK, 1 row affected (0.01 sec)
                      
                      mysql> select * from student;
                      +----+------+------+
                      | id | name | sex  |
                      +----+------+------+
                      |  1 | nick | male |
                      +----+------+------+
                      row in set (0.00 sec)
                      
                      --在创建完表后,修改自增字段的起始值
                      mysql> create table student(id int primary key auto_increment, name varchar(20),sex enum('male','female') default 'male');
                      mysql> alter table student auto_increment=3 ;
                      mysql> show create table student;
                      .......
                      ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
                      
                      --也可以创建表时指定auto_increment的初始值,注意初始值的设置为表选项,应该放到括号外
                      mysql> create table student(id int primary key auto_increment, name varchar(20),sex enum('male','female') default 'male' 
                                                 )auto_increment=3 ;

                      四 、MySQL支持的数据类型

                      1、ENUM和SET类型
                      • ENUM中文名称叫枚举类型,它的值范围需要在创建表时通过枚举方式显示。 
                        ENUM只允许从值集合中选取单个值,而不能一次取多个值。用途:单选:选择性别

                      ENUM: 
                      对1-255个成员的枚举需要1个字节存储; 
                      对于255-65535个成员,需要2个字节存储; 
                      最多允许65535个成员。

                      • SET和ENUM非常相似,也是一个字符串对象,里面可以包含0-64个成员。根据成员的不同,存储上也有所不同。 
                        set类型可以允许值集合中任意选择1或多个元素进行组合。对超出范围的内容将不允许注入,而对重复的值将进行自动去重。用途:多选:兴趣爱好性别

                      SET: 
                      1-8个成员的集合,占1个字节 
                      9-16个成员的集合,占2个字节 
                      17-24个成员的集合,占3个字节 
                      25-32个成员的集合,占4个字节 
                      33-64个成员的集合,占8个字节

                      2、set/enum示例
                      mysql> create table t10 (name char(20),gender enum('female','male') );
                      Query OK, 0 rows affected (0.01 sec)
                      
                      -- 选择enum('female','male')中的一项作为gender的值,可以正常插入
                      mysql> insert into t10 values ('nick','male');
                      Query OK, 1 row affected (0.00 sec)
                      
                      -- 不能同时插入'male,female'两个值,也不能插入不属于'male,female'的值
                      mysql> insert into t10 values ('nick','male,female');
                      ERROR 1265 (01000): Data truncated for column 'gender' at row 1
                      
                      mysql> create table t11 (name char(20),hobby set('抽烟','喝酒','烫头','翻车') );
                      Query OK, 0 rows affected (0.01 sec)
                      
                      -- 可以任意选择set('抽烟','喝酒','烫头','翻车')中的项,并自带去重功能
                      mysql> insert into t11 values ('tank','烫头,喝酒,烫头');
                      Query OK, 1 row affected (0.01 sec)
                      
                      mysql> select * from t11;
                      +------+---------------+
                      | name | hobby        |
                      +------+---------------+
                      | tank | 喝酒,烫头     |
                      +------+---------------+
                      row in set (0.00 sec)
                      
                      -- 不能选择不属于set('抽烟','喝酒','烫头','翻车')中的项,
                      mysql> insert into t11 values ('jason','烫头,翻车,看妹子');
                      ERROR 1265 (01000): Data truncated for column 'hobby' at row 1

                      五、MySQL表查询

                      1、限制查询的记录数(limit)

                      示例:

                      SELECT * FROM employee ORDER BY salary DESC 
                          LIMIT 3;    --默认初始位置为0 
                      
                      SELECT * FROM employee ORDER BY salary DESC
                          LIMIT 0 , 5 ; --从第0开始,即先出第一条,然后包含这一条在内往后查5条
                      
                      SELECT * FROM employee ORDER BY salary DESC
                          LIMIT 5 , 5 ; --从第5开始,即先出第6条,然后包含这一条在内往后查5条

                      2、使用正则表达式查询

                      小结:对字符串匹配的方式

                      • WHERE emp_name = 'nick';
                      • WHERE emp_name LIKE 'sea%';
                      • WHERE emp_name REGEXP 'on$';
                      SELECT * FROM employee WHERE emp_name REGEXP '^jas';
                      SELECT * FROM employee WHERE emp_name REGEXP 'on$';
                      SELECT * FROM employee WHERE emp_name REGEXP 'm{2}';

                      六、数据备份(命令行)

                      1、 数据库的逻辑备份
                      --语法:
                      mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
                      
                      --示例:
                      --单库备份
                      mysqldump -uroot –p123  mysql > c:\db1.sql
                      mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql
                      
                      --多库备份
                      mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql
                      
                      --备份所有库
                      mysqldump -uroot -p123 --all-databases > all.sql

                      2、 数据恢复
                      --方法一:
                      [root@nick backup]-- mysql -uroot -p123 < /backup/all.sql
                      
                      --方法二:
                      mysql> use db1;
                      mysql> SET SQL_LOG_BIN=0;   --关闭二进制日志,只对当前session生效
                      mysql> source /root/db1.sql

                      七、事务和锁(SQL)
                      begin;  -- 开启事务
                         select * from emp where id = 1 for update;  -- 查询id值,for update添加行锁;
                          update emp set salary=10000 where id = 1; -- 完成更新
                      commit; -- 提交事务

                      八、执行计划Explain

                      执行计划:让mysql预估执行操作(一般正确)

                      Explain语法:

                      explain select … from … [where …]

                      Explain命令在解决数据库性能上是第一推荐使用命令,大部分的性能问题可以通过此命令来简单的解决,Explain可以用来查看SQL语句的执行效果,可以帮助选择更好的索引和优化查询语句,写出更好的优化语句。

                      具体用法和字段含义可以参考官网explain-output ,这里需要强调rows是核心指标,绝大部分rows小的语句执行一定很快(rows:显示MySQL认为它执行查询时必须检查的行数。)。所以优化语句基本上都是在优化rows。

                      例如:

                      explain select * from news;

                      输出:

                      +--+-----------+-----+----+-------------+---+-------+---+----+-----+ 
                      |id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra| 
                      +--+-----------+-----+----+-------------+---+-------+---+----+----—+

                      到此这篇关于MySQL数据库简介与基本操作的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

                      欢迎分享,转载请注明来源:内存溢出

                      原文地址:https://outofmemory.cn/sjk/2996793.html

                      (0)
                      打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
                      上一篇 2022-09-26
                      下一篇2022-09-26

                      随机推荐

                      • 感情寄托是什么意思

                        感情寄托的意思是:感情寄托的意思是将自己情绪和情感寄于某人或某物上。感情寄托通俗点解释就是我把我的感情交付在了一个人的身上,这时会觉得自己是无比的爱着对方,以至于自己无法自拔,失去对方一点点都无比痛苦

                      • 人情冷暖是什么意思

                        人情冷暖的意思是:指在别人得势时就奉承巴结,失势时就不理不睬。人情,指社会上的人情世故;冷,冷淡;暖,亲热。泛指人情的变化。唐代,白居易《迁叟》诗&ldquo;冷暖俗情谙世路,是非闲论任交亲。&rdq

                        2022-12-08
                        000
                      • 百合直播929干嘛的

                        百合直播能观看直播的手机软件,用户可以在线的观看直播,还能自己进行直播。【多麦互动】多人直播更精彩。【高清画质】高清画面全屏看。【视频秒开】跟延迟说拜拜。【一键开播】轻松开播很简单。【智能美颜】人人都

                        2022-12-08
                        000
                      • 这就是街舞囍是第几期

                        街舞《囍》是在《这!就是街舞》第三季第三期,节目于2020年8月1日播出。本期节目中,选手自由组合,按照抽签顺序,依次接受队长考核。而杨文韬和CiCi张灿作为夫妻档出场表演,他们的双人舞《囍》刚中带柔

                        2022-12-08
                        000
                      • 为什么烘干机总是让清理线屑

                        衣服上的毛绒、线头。只有在衣服干燥状态下才可能抖落。烘干过程中衣服逐渐干燥,毛绒随着衣物在烘干机内的滚动而掉落,同时烘干机内有热风流动,毛绒自然被热风吹到出风口处的滤网上集聚了。为什么烘干机总是让清理

                        2022-12-08
                        000
                      • blended是什么酒

                        blended是调和威士忌酒。混合威士忌由三分之一的纯麦威士忌和三分之二的谷物威士忌调配而成,这些调配的基酒可能会来自于多个不同的酒厂。当调和威士忌的原料中含有至少51%的纯黑麦威士忌、纯麦芽威士忌或

                        2022-12-08
                        000
                      • 温州炸串为什么叫泡泡

                        泡泡,乍一听还以为是个儿童玩乐的店。其实“泡泡”是温州特有的一种小吃,对炸物的一种统称。估计大多数温州人童年的记忆,都是有泡泡的味道的吧。温州市,简称“温”或“瓯”,是浙江省地级市,是国务院批复确定的

                        2022-12-08
                        000
                      • 公务员考什么

                        国家公务员考试科目——公共科目国家公务员考试公共科目笔试的内容包括行测(即:行政职业能力测验)、申论两科。报考综合管理类和行政执法类职位的考生均参加《行政职业能力测验》和《申论》两科考试,其中《行政职

                        2022-12-08
                        000
                      • 四川公务员申论c类考什么

                        考察能力: 贯彻执行能力,群众工作能力,应用写作能力,材料特点:倾向基层工作实际,解决群众实际民生工作和问题为主 对话型材料偏多,题型设置:概括归纳,综合分析类题 ,解决问题类, 应用文写作。趋势探析

                        2022-12-08
                        000

                      发表评论

                      登录后才能评论

                      评论列表(0条)

                        保存