zoukankan      html  css  js  c++  java
  • mariadb(一)基础

    一、数据库介绍

    1.什么是数据库?
    简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据
    更简单的理解形象,数据库和我们生活追踪存放杂物的储物间仓库性质一样,区别只是存放的东西不通,杂物间存放实体的物件,而数据库里存储的是数据,这样我们就对数据库有一个初步了解了。
    数据库诞生于1950年,随着信息技术的发展和人类社会的不断进步,特别是2000年后,数据库不在仅仅是存储和管理数据了,而转变成用户所需要的各种数据管理的方式,数据库有很多种类和功能,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
    2.数据库的种类
    层次式数据库,网络式数据库和关系型数据库,常见的数据库模型主要是两种,即关系型数据库(mysql,oracle,db2)和非关系型数据库(mongodb,redias)
    3.数据库的来源

    MySQL之父Widenius先生离开了Sun之后,觉得依靠Sun/Oracle来发展MySQL,实在很不靠谱,于是决定另开分支,这个分支的名字叫做MariaDB

    MariaDB跟MySQL在绝大多数方面是兼容的,对于开发者来说,几乎感觉不到任何不同。目前MariaDB是发展最快的MySQL分支版本,新版本发布速度已经超过了Oracle官方的MySQL版本。
    在Oracle控制下的MySQL开发,有两个主要问题:1. MySQL核心开发团队是封闭的,完全没有Oracle之外的成员参加。很多高手即使有心做贡献,也没办法做到。2. MySQL新版本的发布速度,在Oracle收购Sun之后大为减缓。Widenius有一个ppt,用数据比较了收购之前和之后新版本的发布速度。有很多bugfix和新的feature,都没有及时加入到发布版本之中。
    4.RDBMS(数据库管理工具)
    • sql语句主要分为:
      • DQL:数据查询语言,用于对数据进行查询,如select
      • DML:数据库操作语言,对数据库进行增删改查,如:insert,update,delete
      • TPL:事物处理语言,对事物进行处理,包括begin,transaction,commit,rollback
      • DCL:数据控制语言,如grant,revoke                     #权限管理
      • DDL:数据定义语言:进行数据库,表的管理等,如create,drop                   #
      • CCL:指针控制语言,通过控制指针完成表的操作,如declare cursor
    • sql是一门特殊的语言,专门用来操作关系型数据库
    • 不区分大小写

    5. 表:

    特定类型数据的结构性列表

    表是结构化的文件,用来存储特定类型的数据,表可能存储客户清单,产品目录,或者其他信息列表。
    存储在表中的数据是一种类型的数据或一个列表,绝对不应该将顾客的列表信息和订单的列表信息存储到同一个数据库表中,
    这样做会使随后的数据检索和访问变得困难,代替的解决方案是创建两个表,在每个表中存储其相应的列表信息。
    数据库中每个表都有一个名字来标识它,
    并且在一个数据库中表名是唯一的

     
    二、mariadb的基础命令
    1)安装包写入yum源:
    [mariadb]
    name = MariaDB
    baseurl = http://mirrors.ustc.edu.cn/mariadb/yum/10.3/centos7-amd64/
    gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
    gpgcheck=1

    yum -y install mariadb-server 下载并安装10.3版本的服务端

    2)重启并自启mariadb

    systemctl restart mariadb  && systemctl enable mariadb

    3)进行简单配置:

    mysql_secure_installation

    Enter current password for root (enter for none):<–初次运行直接回车
    
    设置密码
    
    Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车
    New password: <– 设置root用户的密码
    Re-enter new password: <– 再输入一次你设置的密码
    
    其他配置
    
    Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车
    
    Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,
    
    Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车
    
    Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车
    
    初始化MariaDB完成,接下来测试登录

    4)mysql -uroot -ppassword             (root:用户名   password:密码)

    成功则进入mariadb界面。

    *如果忘记密码怎么办?

    vim /etc/my.cnf.d/server.cnf
    将skip-grant-tables 添加到【server】下或者其他模块下。保存退出
    mysql -uroot -p   或 mysql -uroot 
    **库
    create database 库名; #自定义库名 use 库名; #进入指定库 show create database mysql; #查看字符集 mysql
    | CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET latin1 */ | alter database mysql default character set=utf8; #将字符类型从拉丁文改为utf-8
    show create database mysql;       #再次执行查看发现字符类型已经更改
    drop database 库名; #删除库
    show databases; #默认和创建的数据库全部显示
    **表
    create table schools;        #创建shcool(表结构) 注意table不能加s,组成部分为(字段,数据类型,以及约束)
    create table students (id int unsigned not null auto_increment primary key, name varchar(20), 
    age tinyint unsigned default 0,high decimal(5,2),gender enum('man','women','secreate'));

    MariaDB [mysql]> desc students;
    +--------+--------------------------------+------+-----+---------+----------------+
    | Field | Type | Null | Key | Default | Extra |        
    +--------+--------------------------------+------+-----+---------+----------------+
    | id | int(10) unsigned | NO | PRI | NULL | auto_increment |     
    | name | varchar(20) | YES | | NULL | |
    | age | tinyint(3) unsigned | YES | | 0 | |
    | high | decimal(5,2) | YES | | NULL | |
    | gender | enum('man','women','secreate') | YES | | NULL | |
    +--------+--------------------------------+------+-----+---------+----------------+

    desc school;             #查看表的结构(数据类型、结构等)

    show create table 表名;   查看表的信息,和结构不同。注意后面没有 from 数据库 这一选项。

    drop table  school;   删除表(如果是在自己创建的用户下,得要有drop得权限)

    drop 字段名;          删除字段

    show tables  from 库名;              #查看库下的所有表(不指定则显示当前库的表)

    select * from 数据库.表名;         #查看表的所有字段(注意表的字段内容如果为空则不会显示创建的字段)   *可以根据自己需要查看不同字段

    **用户

    select user();             #查看当前用户,()不能少

    create user mama@'localhost' identified by '123';  #创建用户mama并设置密码和只允许在这台主机上登陆

    grant all on *.* to mama@'%' identified by '123';   #授予mama所有数据库下的所有表的所有权限,并且允许第三方登陆。/all指代所有权限,*.*前面的*代表所有数据库,后面的*代表所有表,'%'表示允许第三方登陆

    例:

    grant select,delete on mysql.user to mama@'localhost' identified by '123';        #授予mama用户在mysql数据库的user表上的删除和查看的权限,并且只能当前主机登陆。

    show grants for mama;    #查看mama的权限

    如果出现报错:

    #The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement
    MariaDB [zz]> show grants for mama;Ctrl-C -- exit!

    #这是因为设置了免密登陆,注释skip-grant-tables并且重启则可以查看了。或者登陆root用户去查看mama的权限。

    +--------------------------------------------------------------------------------------------------------------+
    | Grants for mama@% |
    +--------------------------------------------------------------------------------------------------------------+
    | GRANT SELECT, DELETE ON *.* TO 'mama'@'%' IDENTIFIED BY PASSWORD '*E6CC90B878B948C35E92B003C792C46C58C4AF40' |

    revoke select on *.* from mama;           #s收回mama用户的select权限

    drop user 用户名;                         #删除用户名,或者

    Delete FROM user Where User='test' and Host='localhost';

    如果报错:Access denied for user 'mama'@'localhost' (using password: YES),则是因为在mama用户下无法查看和收回、授权给自己,只能通过root办到。

    #如果需要重新设置密码?

    vim /etc/my.cnf.d/server.cnf

    将skip-grant-tables 添加到【mysql】模块下。保存退出,重启

    免密进入mysql数据库,然后

    mysql> use mysql;
    mysql> update user set password=password("你的新密码") where user="root";   #密码和用户自己根据需求设置
    mysql> flush privileges;
    mysql> quit

    ****有时候会出现重置密码也无法登陆的情况,并且不用密码却可以登陆,这是因为数据库里存在空用户。这样解决:

    select * from mysql.user where user='';
    查询如果有,然后通过
    use mysql;
    delete from user where user = '';
    删除了多余的空白账户, 然后,通过
    flush privileges;­
    重载一次权限表,最后用
    service mysqld restart
    重启mysql服务,问题得到解决,至此mark一下!
    Tip:
    1、一定要记住重启mysql服务,否则不会生效,自己就是因为没有重启msyql导致一直得不到解决!
    2、msyql的用户表在mysql数据库中的user表中,主要字段有host,user,password等,作为mysql用的管理的主要表。

    注意:表结构数据库结构的修改都用alter。

    三、mariadb数据类型

    MariaDB数据类型可以分为数字,日期和时间以及字符串值。

    使用数据类型的原则:够用就行,尽量使用范围小的,而不用大的

    • 常用的数据类型
    1. 整数:int, bit
    2. 小数:decimal                                     #decimal(5,2),五位小数取两位
    3. 字符串:varchar, char  #varchar是动态                       
    4. 日期时间:date, time, datetime
    5. 枚举类型(enum)          #
    • 约束
    1. 主键primary key:物理上存储的顺序
    2. 非空not null:此字段不能为空
    3. 唯一unique:此字段不允许重复
    4. 默认default:当不填写此值时会使用默认值,如果填写则已填写为准
    5. 外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常
     
  • 相关阅读:
    STL逆序迭代器(reverse_iterator)
    STL容器之vector容器API(二)
    STL容器之vector容器巧用swap收缩空间
    STL容器之vector容器API(一)
    STL容器vector概念和注意事项(每次扩充都会重新开辟空间,释放原空间,即首元素地址会变一次)
    STL容器之string内存重定义
    STL容器之string与c_style类型转换
    STL容器之string插入和删除
    STL容器之string字串
    STL容器之string比较
  • 原文地址:https://www.cnblogs.com/zzzynx/p/10840645.html
Copyright © 2011-2022 走看看