泱泱大国,物阜民丰——仓库MySQL之旅
码神学习第十六天
1、MySQL的命令英文全称:
答:desc + 表名:显示数据表的结构(descend,降序)
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数据类型:
答:2.1 整型
整型有五种类型:
tinyint(1个字节)、smallint(2个字节)、mediumint(3个字节)、int(4个字节)、bigint(5个字节),取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0-256)。
2.2 浮点型(float和double)
float(m, d)(8位精度,4个字节)和double(m, d)(16位精度,8个字节),m为总个数,d为小数位。如float(5, 3),插入一个数123.4567,实际数据库里存储的是123.457,但总个数还是以实际为准,为6位。
2.3 字符串(char,varchar,_text)
char(固定长度,最多255个字符)、varchar(可变长度,最多65535个字符)、tinytext(可变长度,最多255个字符)、text(可变长度,最多216- 1个字符)、mediumtext(可变长度,最多224- 1个字符)、longtext(可变长度,最多232 - 1个字符)
2.4 二进制数据(_Blob)
①BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
②BLOB存储的数据只能整体读出。
③TEXT可以指定字符集,_BLO不用指定字符集。
主要用于存放音频或者视频数据
2.5 日期时间类型:
date:日期 '2008-12-2'
time :时间 '12:25:36'
datetime :日期 + 时间 '2008-12-2 22:06:44'
timestamp:自动存储记录修改时间
2.6 数据类型属性的常用关键字及其含义:
①null 数据列可以保存空值
②not null 数据列不允许包含空值
③default 默认值
④primary key 主键
⑤auto_increment 自动递增,适用于整数类型
⑥unsigned 无符号类型
⑦character set + name 指定一个字符集
5、如果忘记了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服务,新密码就生效了。
5、MySQL索引:
答:以下演示均来自建立的一个叫goods数据库中的表warehouse,里面有四列数据,goods_id,goods_number,goods_date,goods_price。
①查看表中数据:
select * from + 表名
②创建索引
A)create index index_name on table_name(column_list)
B)alter table + table_name add index + index_name(column_list)
③删除索引
A)drop index index_name on table_name
B)alter table + table_name drop index + index_name
④查看索引
show index from table_name
6、MySQL的聚合函数:
①count(column_name):返回指定列中非NULL值得个数
②avg(column_name):返回指定列的平均值
③min(column_name):返回指定列的最小值
④max(column_name):返回指定列的最大值
⑤sum(column_name):返回指定列的所有值之和
⑥group_concat(column_name):返回由属于一组的列值连接组合而成的结果,可以把列级数据转成行级(PS:concat,合并的意思)
7、MySQL的字符串函数:
答:(1)ASCII(char)返回字符的ASCII码值
(2)BIT_LENGTH(str)返回字符串的比特长度
(3)CONCAT(s1,s2...,sn)将s1,s2...,sn连接成字符串
(4)CONCAT_WS(sep,s1,s2...,sn)将s1,s2...,sn连接成字符串,并用sep字符间隔
(5)INSERT(str,x,y,instr)将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果
(6)FIND_IN_SET(str,list)分析逗号分隔的list列表,如果发现str,返回str在list中的位置
(7)LCASE(str)或LOWER(str)返回将字符串str中所有字符改变为小写后的结果
(8)UCASE(str)或UPPER(str)返回将字符串str中所有字符转变为大写后的结果
(9)LEFT(str,x)返回字符串str中最左边的x个字符
(12)POSITION(substr in str)返回子串substr在字符串str中第一次出现的位置
(13)QUOTE(str)用反斜杠转义str中的单引号
(14)REPEAT(str,count)返回字符串str重复x次的结果
(16)RIGHT(str,x)返回字符串str中最右边的x个字符
(17)STRCMP(s1,s2)比较字符串s1和s2
(18)TRIM(str)去除字符串首部和尾部的所有空格
8、存储过程函数:
答:①创建存储过程:
②查看存储过程:
③调用存储过程:
④删除存储过程:
作业:
要求:
1、在linux上安装最新版的mysql数据库,创建普通用户dbuser
2、创建班级的数据库,并把数据库授权给mysql使用,dbuser用户只能在本地网络192.168.13.0网段内连接数据库;
①创建班级数据库classes
②给dbuser用户进行授权
③更新用户配置
④dbuser用户只能在本地网络192.168.13.0网段内连接数据库;
3、根据班级的人员结构,设计创建部门表,兴趣表(人员名字,电话,邮箱,爱好,人员ID,姓别,年龄,学校,及兴趣与部门关联表,并把数据录入数据库。
①设置部门表department,有列name,phone,email,hobby,id,sex,age,插入五条数据
②设置兴趣表,有列hobby,salary
③插入四条语句。
④输出兴趣与部门关联表。
Select name,phone,email,hobby,id,sex,age,salary from department left join people on department.hobby=people.hobby2;
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;