简单了解linux中MySQL的一些知识
本文主要给大家简单讲讲linux中MySQL的一些知识,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望linux中MySQL的一些知识这篇文章可以给大家带来一些实际帮助。
MySQL的相关概念介绍
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB应用方面,MySQL是最好的 RDBMS (Relational DatabaseManagement System,关系数据库管理系统) 应用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
所谓的"关系型"可以理解为"表格"的概念, 这里的关系概念可以理解成生活中人及事物之间的关系,是一种通用的概念。一个关系型数据库由一个或数个表格组成, 具体以学生这一实体为例。比如新学期开学,老师第一次上课,每一个学生都是陌生的脸孔,如何确认班上每一个学生,除了脸部识别之外,老师唯一确认一个学生依靠的是学生的学号,一个学号代表一个学生,学号没有重复,叫到一个学号每次只有一个学生答到,这样班级的每一个学生都可以被确定,所以id就是主键,唯一识别某一个具体的学生。但是这样在确认了学生之后还是不够的,每个学生都有自己的姓名、性别、年龄、联系方式,依靠这些信息虽然不能唯一识别一个具体的学生,但是却是每个学生都需要有的信息,这就是学生这一实体的属性,属性之间是互相不能依靠逻辑推出信息的,例如仅仅知道学生性别并不能根据性别而推测出学生的年龄,姓名,等其他属性的信息,如果出现除了主键之外依据某一属性可以推测出其他属性的信息的现象则叫数据冗余,需要合并或者删除属性,从而实现合理全面的数据存储。
如图所示的一个表格:
表头(header): 每一列的名称即属性;
列(row): 具有相同数据类型的数据的集合;
行(col): 每一行用来描述某个人/物的具体信息;
值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
键(key): 表中用来识别某个特定的人\物的方法, 键的值在当前列中具有唯一性。
MariaDB
从 MySQL 转向 MariaDB的代表厂家:谷歌(2013年9月)、RedHat(2013年6月)、*(2013年4月)
MySQL在 2008年被Sun以10亿美金所收购,MySQL创始人Michael Widenius则不满Sun开发团队脚步过慢,愤而离职成立开源数据库联盟,另外从现有 MySQL 程序代码中,开发出另一个延伸分支版本,也就是名为玛莉亚数据库的企业级开源数据库。
玛莉亚数据库如同 MySQL的影子版本,玛莉亚数据库是 MySQL的一个分支版本(branch),而不是衍生版本(folk),提供的功能可和 MySQL 完全兼容。
脚本实现centos 7.3及centos 6.9二进制安装mariadb
#!/bin/bash
#判断系统是否已经安装mariadb数据库软件,若安装则进行提醒,并退出该脚本。
rpm -q mariadb >> /dev/null&& echo `rpm -q mariadb` is installed && exit 0
###注意:rpm查询,只能查询以rpm机制安装的软件,以其他方式安装的软件可能查询不到。
#创建数据库程序的用户,并指定其工作目录与登录方式
useradd -d /app/mysqldb -r -m -s/sbin/nologin mysql
#切回root用户目录下
cd
#下载mariadb压缩包,并将其解压缩到指定目录/usr/local
wgetftp://172.17.0.1/pub/Sources/6.x86_64/mariadb/mariadb-5.5.57-linux-x86_64.tar.gz
tar -xf/root/mariadb-5.5.57-linux-x86_64.tar.gz -C /usr/local/
cd /usr/local
#创建软链接
ln -s mariadb-5.5.57-linux-x86_64mysql
cd /usr/local/mysql
mkdir /etc/mysql/
#拷贝配置文件样例
cp support-files/my-huge.cnf/etc/mysql/my.cnf
#使用sed直接对样例/etc/mysql/my.cnf进行编辑,使其符合自身需求
sed -i '/\[mysqld\]/a\datadir\\=\ \/app\/mysqldb\ninnodb_file_per_table\ \=\ on\nskip_name_resolve\ \=\ on'/etc/mysql/my.cnf
#初始化数据库
scripts/mysql_install_db--user=mysql --datadir=/app/mysqldb
#创建mariadb的服务程序,并设置在哪些运行级别下可以自行启动
cp support-files/mysql.server/etc/init.d/mysqld
chkconfig --add mysqld
#判断系统版本,以便创建不同的数据库日志文件
if [ `sed -r 's/.*([0-9]+)\..*/\1/' /etc/centos-release` -eq 7 ]; then
mkdir /var/log/mariadb/
chown mysql /var/log/mariadb/
systemctl start mysqld
else
touch /var/log/mysqld.log
chown mysql /var/log/mysqld.log
service mysqld start
fi
#设置环境变量
echo'PATH=$PATH:/usr/local/mysql/bin' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
#运行安全初始化脚本
echo -e"\ny\n123456\n123456\ny\nn\nn\ny" | mysql_secure_installation
#运行mysql服务
mysql -uroot -p
MySQL脚本的基本组成
与常规的脚本语言类似, MySQL 也具有一套对字符、单词以及特殊符号的使用规定, MySQL 通过执行 SQL 脚本来完成对数据库的操作, 该脚本由一条或多条MySQL语句(SQL语句 + 扩展语句)组成, 保存时脚本文件后缀名一般为 .sql。
标识符
标识符用来命名一些对象, 如数据库、表、列、变量等, 以便在脚本中的其他地方引用。MySQL标识符命名规则稍微有点繁琐, 这里我们使用万能命名规则: 标识符由字母、数字或下划线(_)组成, 且第一个字符必须是字母或下划线。
对于标识符是否区分大小写取决于当前的操作系统, Windows下是不敏感的, 但对于大多数 linux\unix 系统来说, 这些标识符大小写是敏感的。
关键字:
MySQL的关键字众多, 这里不一一列出, 在学习中学习。 需要注意的是,这些关键字有自己特定的含义, 尽量避免作为标识符。
语句:
MySQL语句是组成MySQL脚本的基本单位, 每条语句能完成特定的操作, 他是由 SQL 标准语句 + MySQL 扩展语句组成。
函数:
MySQL函数用来实现数据库操作的一些高级功能, 这些函数大致分为以下几类: 字符串函数、数学函数、日期时间函数、搜索函数、加密函数、信息函数。
MySQL中的数据类型
MySQL有三大类数据类型, 分别为数字、日期\时间、字符串, 这三大类中又更细致的划分了许多子类型:
数字类型
整数: tinyint、smallint、mediumint、int、bigint
浮点数: float、double、real、decimal
日期和时间: date、time、datetime、timestamp、year
字符串类型
字符串: char、varchar
文本: tinytext、text、mediumtext、longtext
二进制(可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob
(由于数据类型较多,限于文章篇幅有限,具体数据类型请自行查看专业书籍)
常用基本操作
1、显示数据库
show databases;
2、选择数据库
use 数据库名;
3、显示数据库中的表
show tables;
4、显示数据表的结构
describe 表名;
5、显示表中记录
SELECT * FROM 表名
6、建库
create databse 库名;
7、建表
create table 表名 (字段设定列表);
mysql>create table name(
-> id int auto_increment not null primary key ,
-> uname char(8),
-> gender char(2),
-> birthday date );
Query OK, 0 rows affected (0.03 sec)
mysql> show tables;
+------------------+
| Tables_in_userdb |
+------------------+
| name |
+------------------+
1 row in set (0.00 sec)
mysql> describe name;
+----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| uname | char(8) | YES | | NULL | |
| gender | char(2) | YES | | NULL | |
| birthday | date | YES | | NULL | |
+----------+---------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
注: auto_increment 自增
primary key 主键
8、增加记录
insert into name(uname,gender,birthday) values('张三','男','1971-10-01');
9、修改记录
update name setbirthday='1971-01-10' where uname='张三';
10、删除记录
delete from namewhere uname='张三';
11、删除表
drop table 表名
12、删除库
drop database 库名;
13、备份数据库
mysqldump -uroot -p --opt 数据库名>备份名; //进入到库目录
14、恢复
mysql -u root -p数据库名<备份名; //恢复时数据库必须存在,可以为空数据库
15、数据库授权
格式:grant select on 数据库.* to 用户名@登录主机identified by "密码"
例1、增加一个用户user001密码为123456,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL,然后键入以下命令:
mysql> grant select,insert,update,delete on *.* to user001@"%" Identified by "123456";
例2、增加一个用户user002密码为123456,让此用户只可以在localhost上登录,也可以设置指定IP,并可以对数据库test进行查询、插入、修改、删除的操作 (localhost指本地主机,即MySQL数据库所在的那台主机)
//这样用户即使用知道user_2的密码,他也无法从网上直接访问数据库,只能通过MYSQL主机来操作test库。
//首先用以root用户连入MySQL,然后键入以下命令:
mysql>grant select,insert,update,delete on test.* to user002@localhost identified by "123456";
注: 其次也可以采用修改表的方式,处理用户的登录方式:
数据库: Mysql
表: User
修改: User表中的Host列的值来现实登录入口
linux中MySQL的一些知识就先给大家讲到这里,对于其它相关问题大家想要了解的可以持续关注我们的行业资讯。我们的板块内容每天都会捕捉一些行业新闻及专业知识分享给大家的。