在Linux下学习MySQL
目录:
1、升降序排序命令英文全称:
2、MySQL在Linux上的Yum安装过程:
3、为什么需要格式化磁盘?
4、MySQL数据类型:
5、 数据类型属性的常用关键字及其含义:
6、忘记密码处理
7、MySQL索引:
8、MySQL的聚合函数:
9、MySQL的字符串函数:
10、存储过程函数:
11、练习
1、升降序排序命令英文全称:
答:(1)desc + 表名:显示数据表的结构(description)
(2)desc(descend,降序)
(3)asc(ascend,升序)
2、MySQL在Linux上的Yum安装过程:
答:①首先将本地的MySQL的rpm文件上传到虚拟机上;
alt + p进入文件传输 → lpwd查看外部主机目录 → lcd E:\\ 进入到外部主机的E盘 → lls 查看外部主机当前目录下的文件和文件夹 → put mysql57-community-release-el7-8.noarch.rpm 和 put mysql-community-server-5.7.13-1.el7.x86_64.rpm则将两个文件导入到Linux虚拟机中
②rpm -ivh解压文件(install-verbose-hash,安装显示安装进度);
#rpm -ivh mysql57-community-release-el7-8.noarch.rpm
③进入到yum源的配置文件夹中,要用yum,必须放在/etc/yum.repos.d的文件夹下,才能生效,yum配置文件必须.repo结尾;
#cd /etc/yum.repos.d/
④查看此文件夹下的列表
#ls
⑤因为可能存在配置文件之间的相互影响,所以备份一下CentOS.repo文件
#mv CentOS.repo CentOS.repo.bak
⑥清除Yum仓库的缓存
#yum clean all
⑦查看Yum仓库的情况
#yum repolist
⑧安装文件
#yum install mysql-community-server-5.7.13-1.el7.x86_64.rpm
安装成功!
3、为什么需要格式化磁盘?
答:因为各种操作系统都必须按照一定的方式来管理磁盘,而只有格式化才能使磁盘的结构能被操作系统认识。
格式化会把磁盘上已有的信息全部破坏。
格式化命令可以检查磁盘是否有缺陷,上面有多少空间可用;它还会建立一个目录表,用于存放将来写到该磁盘上的文件的有关信息。因此,在打算使用一个新磁盘之前,必须首先对它进行格式化。
对磁盘进行格式化时可以完成很多功能:在磁盘上确定接收信息的磁道和扇区,记录专用信息,如磁道标志(每个磁道一个)、扇区标志(每个扇区一个)和保证所记录的信息是准确的CRC位(循环冗余校验)。
4、MySQL数据类型:
答:(1)整型有五种类型:
tinyint(1个字节)、
smallint(2个字节)、
mediumint(3个字节)、
int(4个字节)、
bigint(5个字节),
取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0-256)。
(2) 浮点型(float和double):
float(m, d)(8位精度,4个字节)、:
double(m, d)(16位精度,8个字节),
m为总个数,d为小数位。如float(5, 3),插入一个数123.4567,实际数据库里存储的是123.457,但总个数还是以实际为准,为6位。
(3)字符串(char,varchar,_text)
char(固定长度,最多255个字符)、
varchar(可变长度,最多65535个字符)、
tinytext(可变长度,最多255个字符)、
text(可变长度,最多216- 1个字符)、
mediumtext(可变长度,最多224- 1个字符)、
longtext(可变长度,最多232 - 1个字符)
(4)二进制数据(_Blob)
①BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
②BLOB存储的数据只能整体读出。
③TEXT可以指定字符集,_BLO不用指定字符集。
主要用于存放音频或者视频数据
(5)日期时间类型:
date:日期 '2008-12-2'
time :时间 '12:25:36'
datetime :日期 + 时间 '2008-12-2 22:06:44'
timestamp:时间戳,自动存储记录修改时间
5、 数据类型属性的常用关键字及其含义:
答:①null :数据列可以保存空值
②not null :数据列不允许包含空值
③default :默认值
④primary key :主键
⑤auto_increment :自动递增,适用于整数类型
⑥unsigned :无符号类型
⑦character set + name :指定一个字符集
6、如果忘记了MySQL的密码的话,可以有下面的方法解决:
答:①修改MySQL的配置文件(默认为/etc/my.cnf),然后用vi my.cnf在[mysqld]下添加一行skip-grant-tables。
②保存配置文件后,重启MySQL服务service mysqld restart.
③再次在命令行输入mysql -uroot -p,到输入密码时直接回车,就会进入MySQL数据库了就会进入MySQL数据库了,然后用flush privileges,刷新一下权限,这个时候用ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';来改密码,再用FLUSH PRIVILEGES;刷新下。
④密码修改完毕后,再按照步骤1中的流程,删掉配置文件中的那行,并且重启MySQL服务,新密码就生效了。
7、MySQL索引:
答:以下演示均来自建立的一个叫goods数据库中的表warehouse,里面有四列数据,goods_id,goods_number,goods_date,goods_price。
①查看表中数据:
select * from + 表名
图7.1 查看表中数据
②创建索引
A)create index index_name on table_name(column_list)
图7.2 创建索引
B)alter table + table_name add index + index_name(column_list)
图7.3 添加索引
③删除索引
A)drop index index_name on table_name
图7.4 删除索引
B)alter table + table_name drop index + index_name
图7.5 删除索引2
④查看索引
show index from table_name
图7.6 查看索引
8、MySQL的聚合函数:
①count(column_name):返回指定列中非NULL值的个数
图8.1 count函数示例
②avg(column_name):返回指定列的平均值
图8.2 avg函数示例
③min(column_name):返回指定列的最小值
④max(column_name):返回指定列的最大值
⑤sum(column_name):返回指定列的所有值之和
⑥group_concat(column_name):返回由属于一组的列值连接组合而成的结果,可以把列级数据转成行级(PS:concat,合并的意思)
图8.3 group_concat函数示例
9、MySQL的字符串函数:
答:(1)ASCII(char)返回字符的ASCII码值
图9.1 ascii函数示例
(2)BIT_LENGTH(str)返回字符串的比特长度
图9.7 lower函数示例
(8)UCASE(str)或UPPER(str)返回将字符串str中所有字符转变为大写后的结果
图9.18 trim函数示例
10、存储过程函数:
答:①创建存储过程:
图10.1 创建存储过程
②查看存储过程:
图10.2 查看存储过程
③调用存储过程:
图10.3 调用存储过程
④删除存储过程:
图10.4 删除存储过程
11、练习:
(1)在linux上安装最新版的mysql数据库,创建普通用户dbuser
图11.1 创建用户
(2)创建班级的数据库,并把数据库授权给mysql使用,dbuser用户只能在本地网络192.168.13.0网段内连接数据库;
①创建班级数据库classes
图11.2 创建数据库
②给dbuser用户进行授权
图11.3 授权
③更新用户配置
图11.4 更新配置
④dbuser用户只能在本地网络192.168.13.0网段内连接数据库;
图11.5 授权范围
(3)根据班级的人员结构,设计创建部门表,兴趣表(人员名字,电话,邮箱,爱好,人员ID,姓别,年龄,学校,及兴趣与部门关联表,并把数据录入数据库。
①设置部门表department,有列name,phone,email,hobby,id,sex,age,插入五条数据
图11.6 创建部门表
②设置兴趣表,有列hobby,salary
图11.7 创建兴趣表
③插入四条语句。
图11.8 插入语句
④输出兴趣与部门关联表。
Select name,phone,email,hobby,id,sex,age,salary from department left join people on department.hobby=people.hobby2;
图11.9 查找
(4)通过编写一个函数,能通过人员ID得到平均年龄。
BEGIN
DECLARE V_RESULT VARCHAR(20);
DECLARE V_HOBBYNUM INT;
DECLARE V_AVG INT;
DECLARE V_NUM INT;
SELECT COUNT(*) INTO V_NUM FROM people WHERE HOBBY = V_HOBBY;
IF V_NUM=0 THEN
SET V_RESULT='NO HOBBY EXIST!';
ELSE
SELECT COUNT(*) INTO V_HOBBYNUM FROM department WHERE ID=(SELECT ID FROM people WHERE HOBBY=V_HOBBY);
IF V_HOBBYNUM=0 THEN
SET V_RESULT='NO HOBBY PEOPLE';
ELSE
SELECT AVG(AGE) INTO V_AVG FROM department WHERE ID=(SELECT ID FROM people WHERE HOBBY=V_HOBBY);
SELECT CAST(V_AVG AS CHAR) INTO V_RESULT;
END IF;
END IF;
RETURN V_RESULT;
END;