一、数据库介绍
MySQL之父Widenius先生离开了Sun之后,觉得依靠Sun/Oracle来发展MySQL,实在很不靠谱,于是决定另开分支,这个分支的名字叫做MariaDB。
- sql语句主要分为:
- DQL:数据查询语言,用于对数据进行查询,如select
- DML:数据库操作语言,对数据库进行增删改查,如:insert,update,delete
- TPL:事物处理语言,对事物进行处理,包括begin,transaction,commit,rollback
- DCL:数据控制语言,如grant,revoke #权限管理
- DDL:数据定义语言:进行数据库,表的管理等,如create,drop #
- CCL:指针控制语言,通过控制指针完成表的操作,如declare cursor
- sql是一门特殊的语言,专门用来操作关系型数据库
- 不区分大小写
5. 表:
特定类型数据的结构性列表
表是结构化的文件,用来存储特定类型的数据,表可能存储客户清单,产品目录,或者其他信息列表。
存储在表中的数据是一种类型的数据或一个列表,绝对不应该将顾客的列表信息和订单的列表信息存储到同一个数据库表中,
这样做会使随后的数据检索和访问变得困难,代替的解决方案是创建两个表,在每个表中存储其相应的列表信息。
数据库中每个表都有一个名字来标识它,
并且在一个数据库中表名是唯一的
[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数据类型可以分为数字,日期和时间以及字符串值。
使用数据类型的原则:够用就行,尽量使用范围小的,而不用大的
- 常用的数据类型
- 整数:int, bit
- 小数:decimal #decimal(5,2),五位小数取两位
- 字符串:varchar, char #varchar是动态
- 日期时间:date, time, datetime
- 枚举类型(enum) #
- 约束
- 主键primary key:物理上存储的顺序
- 非空not null:此字段不能为空
- 唯一unique:此字段不允许重复
- 默认default:当不填写此值时会使用默认值,如果填写则已填写为准
- 外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常