Database 01 / Mysql acquaintance operation and basic commands

Database 01 / Mysql acquaintance operation and basic commands

1. Introduction Database

1.1 Related Concepts

#1.相关概念:
#数据库服务器:
#   一台机器,安装了数据库管理软件
#数据库管理系统:
#   软件
#库:
#   相当于文件夹
#表:
#   相当于文件
#记录:
#   表里边的内容
#2.分类:
#   关系型:每个字段之间的关系紧密,通过任何一个字段都可以查到该组数据
#   非关系型:只能通过key,去获取value

1.2 Database

#数据库:数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。
#所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合

1.3 database management system (DBMS)

1.DBMS:数据库管理系统(英语:Database Management System,简称DBMS)是为管理数据库而设计的电脑软件系统,一般具有存储、截取、安全保障、备份等基础功能。
2.RDBMS:关系型数据库,关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
#    1.MySQL
#      MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
#    2.oracle数据库
#    Oracle前身叫SDL、由Larry Ellison和两个变成任意在1977创办,他们开发了主机的拳头产品,在市场上大量销售。Oracle公司是最早开发关系型数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率数一数二 。Oracle公司是目前全球最大的数据库软件公司,也是近年业务增长极为迅速的软件提供与服务商 
#   主要应用范围:传统大企业、大公司、政府、金融、证券等。 
#   版本升级:oracle8i,oracle9i,oracle10g,oracle11g,oracle12c
#    3.MariaDB数据库
#    MAriaDB数据库管理系统是MySQL数据库的一个分支,主要由开元社区维护,采用GPL授权许可。开发这个MariaDB的原因之一是:甲骨文公司收购了MySQL后,有MySQL闭源的潜在风险,因此MySQL开元社区采用分支的方式来避开这个风险。MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM的存储引擎,它使用了Percona的XtraDB(InnoDB的变体)这个版本还包括了PrimeBase XT (PBXT)和Federated X存储引擎。
#    4.SQL Server数据库
#    Microsoft SQL Server是微软公司开发的大型关系数据库系统。SQL Server的功能比较全面,效率高,可以作为中型企业或单位的数据库平台。SQL Server可以与Winodws操作系统紧密集成,不论是应用程序开发速度还是系统事务处理运行速度,都得到较大的提升,对于在Windows平台上开发的各种企业级信息管理系统来说,不论是C/S(客户机/服务器)架构还是B/S(浏览器/服务器)架构。SQL Server都是一个很好的选择。SQL Server的缺点是只能在Windows系统下运行
#    5.Access数据库
#    Access是入门级小型桌面数据库,性能安全性都很一般,可供个人管理或小型企业只用Access不是数据库语言,只是一个数据库程序
3.NoSQL:非关系型数据库也被成为NoSQL数据库,NOSQL的本意是“Not Olnly SQL” 
指的是非关系型数据库,而不是“No SQL”的意思,因此,NoSQL的产生并不是要彻底地否定关系型数据库,而是作为传统关系型数据库的一个有效补充。NOSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。
#常见的非关系型数据库:
#   1.memcached(key-value):Memcaced是一个开源的、高性能的、具有分布式内存对象的缓存系统。通过它可以减轻数据库负载,加速动态的web应用
#    2.MongoDB:MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系数据库的。
#    3.Cassandra:Apache Cassndra是一套开源分布式Key-Value存储系统。它最初由Facebook开发,用于存储特别大的数据。Facebook目前在使用此系统。

管理数据的工具有很多种,不止mysql一个。关于分类其实可以从各个纬度来进行划分,但是我们最常使用的分类还是根据他们存取数据的特点来划分的,主要分为关系型和非关系型。
可以简单的理解为,关系型数据库需要有表结构,非关系型数据库是key-value存储的,没有表结构
关系型:如sqllite,db2,oracle,access,sql server,MySQL,注意:sql语句通用
非关系型:mongodb,redis,memcache

1.4 Structured Query Language (SQL)

SQL : 结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统
#  SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:
#  1、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
#  2、DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
#  3、DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
***不同数据库系统之间的SQL不能完全相互通用。

The basic operation of 2.mysql

2.1 Operating folder / Library (CRUD)

1.查看数据库
#show databases;
2.查看其中的一个库
#show create database db1;
3.创建数据库
#create database db1;
4.创建数据库并制定编码
#create database db1 charset utf8;
5.使用数据库
#use db1;
6.修改数据库
#alter database db1 charset utf8;
7.删除数据库
#drop database db1;
8.查看当前所在的库
#select database();

2.2 Operation file / table (CRUD)

1.创建表
#create table stu(id int,name char(16));
注:char(16)5.6版本以前是字节,5.6版本以后是字符
2.查看当下库的所有表
#show tables;
3.查看刚刚创建的那一张表
#show create table stu;
4.查看一张表的基本信息
#desc stu;
5.修改表的数据类型
#alter table class modify class_name char(16);
6.修改表的字段名和数据类型
#alter table class change class_name name char(18);
7.删除表
#drop table class;

Content / 2.3 operating record file (CRUD)

1.新增一条记录
#insert into stu values(1,'大狗'),(2,'二狗');
#insert into stu(id,name) values(1,'大狗'),(2,'二狗');
2.查记录
#select * from stu;
3.条件查询
#select * from stu where id = 1;
4.修改记录
#update stu set name = 'alisa' where id = 3;
5.删除记录
#delete from stu where name='二狗';
6.将一个表的内容查出来放到另一个表中
#insert into class2 select * from class;
7.查当前的时间
#select now();

3. Some common set of problems

3.1 Permanent modification of a method of encoding a string

1.在mysql安装目录下创建一个my.ini(my.cnf)文件,写入下面的配置,然后重启服务端
2.我们配置的用户名和密码,就叫做user和password,不能是username什么的,这个记住啦。
强调:配置文件中的注释可以有中文,但是配置项中不能出现中文
[client]
#设置mysql客户端默认字符集
default-character-set=utf8 

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8 
user = 'root'
password = '123'

[mysqld]
#设置3306端口
port = 3306 
# 设置mysql的安装目录
basedir=E:\mysql-5.6.45-winx64 
# 设置mysql数据库的数据的存放目录
datadir=E:\mysql-5.6.45-winx64\data 
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

3.2. Check character set encoding command

show variables like "%char%";
不乱码的思想:系统的编码、客户端、服务端、库、表、列,这几项的编码都要统一才不会出现乱码的情况。

3.3MySQL client complete instructions when connecting server

mysql -h 127.0.0.1 -p 3306 -u root -p

3.4 If the root password forgotten how to do

1 关闭正在运行的MySQL服务
#net stop mysql(这个mysql是你添加的mysqld到系统服务时的服务名)
2. 打开DOS窗口,转到mysql\bin目录。
#   1.d:(回车)
#    2.cd mysql-5.6.45-winx64(回车) 
#    3.cd bin(回车)
3. 输入mysqld --skip-grant-tables 回车。
#skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证,因为之所以mysql启动之后,客户端连接的时候需要登陆认证,输入密码什么的,是因为mysql服务端启动的时候,加载了自己内部的一些权限相关信息的授权表、权限认证表什么的,这样就要求客户端必须有认证,如果启动的时没有加载这些表和设置,那么我们客户端再进行登陆的时候,就不需要认证了
#   注意:如果我们直接使用的上面这个指令,也即是mysqld --skip-grant-tables,也就是直接通过mysqld启动的mysql服务的话,我们就不能通过net stop mysql的方式来关闭mysql服务了。但是可以通过别的方式来关闭,我在安装mysql的那篇博客里面写到了,杀进程的方式,知道你肯定忘记了,再给你写一下(win10):tasklist |findstr mysqld找到这个mysqld服务的端口号,然后taskkill /F /PID 端口号来杀死这个mysql服务的进行,以后就可以使用net start/stop mysql的方式来启动和关闭了。
4 重新启动一个窗口,连接mysql服务端
5 修改mysql库里面的user表里面的root用户记录的密码:
    update user set password = password('666') where user='root';
6. 刷新权限(必须步骤):flush privileges; 凡是涉及到密码修改或者后面我们会学到的权限修改,修改完之后全部要再执行一下这一句
5 关掉mysqld服务端,指令:
    tasklist|findstr mysqld
    taskkill /F /PID 进程号
6 正常启动服务端(net start mysql)

Three ways 3.5root user password settings, and modify the password

方法1: 用SET PASSWORD命令 
#    首先登录MySQL,使用mysql自带的那个客户端连接上mysql。 
#    格式:mysql> set password for 用户名@localhost = password('新密码'); 
#    例子:mysql> set password for root@localhost = password('123'); 
    
方法2:用mysqladmin  (因为我们将bin已经添加到环境变量了,这个mysqladmin也在bin目录下,所以可以直接使用这个mysqladmin功能,使用它来修改密码
#关于mysqladmin的介绍:是一个执行管理操作的客户端程序。它可以用来检查服务器的配置和当前状态、创建和删除数据库、修改用户密码等等的功能,虽然mysqladmin的很多功能通过使用MySQL自带的mysql客户端可以搞定,但是有时候使用mysqladmin操作会比较简单。
#    格式:mysqladmin -u用户名 -p旧密码 password 新密码 
#    例子:mysqladmin -uroot -p123456 password 123  
    
方法3:用UPDATE直接编辑那个自动的mysql库中的user表 
#首先登录MySQL,连接上mysql服务端。 
#mysql> use mysql;   use mysql的意思是切换到mysql这个库,这个库是所有的用户表和权限相关的表都在这个库里面,我们进入到这个库才能修改这个库里面的表。
#mysql> update user set password=password('123') where user='root' and host='localhost';   其中password=password('123') 前面的password是变量,后面的password是mysql提供的给密码加密用的,我们最好不要明文的存密码,对吧,其中user是一个表,存着所有的mysql用户的信息。

mysql> flush privileges;  刷新权限,让其生效,否则不生效,修改不成功。(最好每次修改完都刷新一下权限)

3.6 storage engine

默认存储引擎 Innodb
查看存储引擎:show engines;
#1.后缀名为.frm的文件:这个文件主要是用来描述数据表结构(id,name字段等)和字段长度等信息
#2.后缀名为.ibd的文件:这个文件主要储存的是采用独立表储存模式时储存数据库的数据信息和索引信息;
#3.后缀名为.MYD(MYData)的文件:从名字可以看出,这个是存储数据库数据信息的文件,主要是存储采用独立表储存模式时存储的数据信息;
#4.后缀名为.MYI的文件:这个文件主要储存的是数据库的索引信息;
#5.ibdata1文件:主要作用也是储存数据信息和索引信息,这个文件在mysql安装目录的data文件夹下。
从上面可以看出,.ibd储存的是数据信息和索引信息,ibdata1文件也是存储数据信息和索引信息,.MYD和.MYI也是分别储存数据信息和索引信息,那他们之间有什么区别呢? 
#    主要区别是再于数据库的存储引擎不一样,如果储存引擎采用的是MyISAM,则生成的数据文件为表名.frm、表名.MYD、表名的MYI;而储存引擎如果是innoDB,开启了innodb_file_per_table=1,也就是采用独立储存的模式,生成的文件是表名.frm、表名.ibd,如果采用共存储模式的,数据信息和索引信息都存储在ibdata1中; 
#    在进行数据恢复的时候,如果用的是MYISAM数据引擎,那么数据很好恢复,只要将相应.frm, .MYD, .MYI文件拷贝过去即可。但是如果是innodb的话,则每一个数据表都是一个单独的文件,只将相应的.frm和.ibd文件拷贝过去是不够的,必须在你的ibd文件的tablespace id和ibdata1文件中的元信息的tablespace id一致才可以。
#msyql人家设定的规则就是这样存储表的,使用人家的系统,就要理解人家的规则。

3.7 Other Precautions

1.注意还有一个问题,看下图:当你写sql语句的时候,可能会出现下面这种情况,由于少写了一个引号,导致怎么也结束不了,输入\c可以退出

4. Advantage Database

#1.程序稳定性 :这样任意一台服务所在的机器崩溃了都不会影响数据和另外的服务。
#2.数据一致性 :所有的数据都存储在一起,所有的程序操作的数据都是统一的,就不会出现数据不一致的现象
#3.并发 :数据库可以良好的支持并发,所有的程序操作数据库都是通过网络,而数据库本身支持并发的网络操作,不需要我们自己写socket
#4.效率 :使用数据库对数据进行增删改查的效率要高出我们自己处理文件很多

Guess you like

Origin www.cnblogs.com/liubing8/p/11432534.html