广州37期_杨捷 发表于 2021-12-15 20:43:31

MySql----

mysql----
安装mysql:两个方法只要用一种
方法一:在线安装
(1)安装mysql的服务端:yum install mysql-server
(2)安装mysql的客户端:yum install mysql
方法二:离线安装,通过rpm命令执行,把3个跟mysql相关的rpm文件上传到Linux服务器的某个目录上,然后执行txt文件中的3条指令

安装完成可以使用:rpm -qa|grep mysql

面试题:
1,了解MySQL和Oracle数据库的区别?       
2,了解Redis数据库的特点,包含哪些数据格式、记几条Redis数据库里面的命令,了解Redis的雪崩机制

常见的数据库:MySQL(免费)、Oracle(收费)、sql server(如果公司是使用Linux系统就不会选择SQL server数据库)
Redis缓存数据库(非关系型数据库)

mysql服务的启动、关闭、重启、查询状态的操作:
service mtsqld start ==》启动mysql服务
service mtsqld status ==》查看mysql服务的状态
service mysqld restare==》停止mysqlsql
service mysqld restart ==》重启mysql的服务

登录mysql:
第一次登录(未设置密码):mysql -uroot -p不需要输入密码
    data:,

退出mysql有三种方式:quit、exit、Ctrl+c

设置mysql的登录密码:mysqladmin -uroot password ‘123456’
    data:,

设置密码后的登录:要输入密码
密文方式:mysql -uroot -p 加回车键输入密码,再回车键
明文方式:mysql -uroot -p12345
-u表示mysql的用户,-p表示密码

如果忘记密码,则可以在/etc/my.cnf文件中的第2行添加一下代码,必须要正确添加以下代码,然后重启mysql服务,可以跳过验证直接进入mysql
skip-grant-tables

sql语句----要进入mysql页面操作的指令
每一条sql语句都是以‘;’结束,在‘;’之前的字母都可以被mysql理解为同一条sql语句的内容
    data:,

show databases; ==》展示所有数据库,查看当前数据库管理系统中所有的数据库
use +库名;==》进入某个库,才可以对库中的表进行操作
show tables; ==》查看当前库中所有的表

    data:,

    data:,
creata database 新的库名; ==》创建 数据库 XX 库;

    data:,
select database(); ==》查询 当前所使用的库

create table 表明(字段名1 字段格式,字段名2 字段格式,......);==》
建表语句

create table test    #创建表 命名为test
(      #包含着表的基本信息,字段名(列名),字段属性
id int(10) primary key auto_increment,
#id字段 属性为int(10),是primary key,而且是auto_increment
name varchar(20) not null,
#name字段 属性为varchar(20),是not null约束,非空约束
score float(20,2),
#score字段,属性为float(20,2)
phone bigint(20) default 17633338888
#phone字段 属性为bigint(20) 是默认值约束,默认填入17633338888
);

    data:,

create table test(id int(10) primary key auto_increment,name varchar(20) not null,score float(20,2),phone bigint(20) default 17633338888);


数据类型:
int(10) ==》数据宽度为10的整型,整数型,mysql保存数字的数据的一个长度,占4个字节
varchar(20)==》可变长字符串,对应的值是可以为任意的数据(字母,中文、特殊字符,空格等等),插入数据时要使用引号'',在引号''里面写入数据,后面的20表示字符长度,一个字母占一个字符长度,中文utf-8编码占3个字符,GBK编码占2个字符
char==》定长字符串,也是保存字符串

varchar(可变长字符串)和char(定长字符串)的区别:
char固定占磁盘255个字符,varchar最大占2^16次方个字符
char的查询性能会好些,但是不节约资源
varcar的性能差一点,但是节约资源,可以保存0~65535个字符

float(20,2)==》浮点型,保存小数,最大占4个字节,(20,2)表示数据宽度可以保存20,2表示小数点后两位
double ==》浮点型,保存小数,最大占8个字节
bigint(20) ==》大数字,整型,整数型,占8个字节
date ==》保存日期 固定格式 YYYY-MM-DD


常见的约束:
primary key ==》主键约束,一个表中只有一个主键,说明这个字段是这个表的主键,整一列的数据是唯一的,不重复,而且不能为空
auto_increment ==》自增长约束,要结合着主键使用,只能作用于整型数据
not null==》非空约束 必填信息,不能不填
default   ==》默认值约束,如果不对该字段插入值,那么就直接插入默认值
    data:,


一个字节 0000 0000
4个字节 0000 0000 0000 0000 0000 0000 0000 0000
    1111 1111 1111 1111 1111 1111 1111 1111
int型最大保存的数字范围是-2^31~2^31 = ±2147483647(10位数,超过10位数就使用bigint)



desc +表名; ===》查看表结构
    data:,



表结构的操作:
alter table ==》修改表
alter table test rename test1;==》把test表重命名为test1

    data:,
alter table test1 rename test;==》把test1表重命名为test
alter table test change id sid sit(10);==》把id字段名修改为sid,并去掉自增长约束
alter table test change sid sid int(10) auto_increment;==》改变sid字段,增加自增长约束

    data:,

[*]alter table test add time date;

==》对test表增加time字段类型为date型。
    data:,

[*]alter table test add class int(10) first;

对test表增加class字段类型为int(10),first表示放在第一位
    data:,
alter table test add sex varchar(6)after class;
==》为表增加sex字段类型为varchar(6)放在class后面。
    data:,
alter table test drop sex;
    data:,
alter table test add(sex varchar(6), ageint(4));
==》对test表同时增加sex varchar(6), age int(4)两个字段。
    data:,
alter table test drop sex,drop age;
对test表同时删除sex字段和age字段
    data:,
alter table test modify class varchar(10)after name;
==》修改class字段的属性为varchar(10),并放在name后面

    data:,
modify 和change 都是可以修改表的定义,但是change需要写两次字段名,不是很方便,change的优点是可以修改字段名,modify则不行,只能修改字段属性。

drop table +表名;===》丢弃表,删除表
dropdatabase +库名;==》丢弃库,删除库。
    data:,


删除主键约束:
alter table test drop primary key;#直接删除会报错
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
1,首先要删除自增长约束
alter table test change sid sid int(10);
2,然后才可以删除主键约束
alter table test drop primary key;


添加主键和自增长约束:
alter table test change sid sid int(10) primary key auto_increment;
    data:,


对表中的数据进行操作---增删查改
增 insert into===》测试过程,经常要插入一些测试数据供我们测试去使用
    data:,

注意:插入数据时,如果字段类型为char、varchar、date型需要加单引号或双引号

插入数据的2种方法:
第一种:
insert into 表名(字段1,字段2,字段3...) values(值1,值2,值3....);===>要求,值和字段要一一对应着

第二种:假设表的字段特别多,就不建议使用这种方法
insert into 表名 values(值1,值2,值3....); ===》要求:对表结构要熟悉,因为不写字段名时,插入的值要一一对应着表结构中字段的默认顺序,而且需要对表中所有的字段进行插入值
    data:,

    data:,

    data:,
查 select ==》测试过程,我们经常要检查数据库中有没有对应的数据
select * from 表名;===》查询 所有字段 的值 来自于 某个表;

面试题-作业:
1,了解MySQL和Oracle数据库的区别?
(1)Oracle是大型数据库,而MySQL是中小型数据库。但是MySQL是开源的,但是Oracle是收费的,而且比较贵。
(2)Oracle的内存占有量非常大,而mysql非常小
(3)MySQL支持主键自增长,指定主键为auto increment,插入时会自动增长。Oracle主键一般使用序列。
(4)MySQL字符串可以使用双引号包起来,而Oracle只可以单引号

2,了解Redis数据库的特点、包含哪些数据格式、记几条Redis数据库里面的命令、了解Redis的雪崩机制
特点:
(1)内存数据库,速度快,也支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
(2)Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
(3)Redis支持数据的备份,即master-slave模式的数据备份。
(4)支持事务
数据格式:
(1)string 字符串(可以为整形、浮点型和字符串,统称为元素)
(2) list 列表(实现队列,元素不唯一,先入先出原则)
(3)set 集合(各不相同的元素)
(4)hash hash散列值(hash的key必须是唯一的)
(5)sort set 有序集合

雪崩机制:
雪崩就是指缓存中大批量热点数据过期后系统涌入大量查询请求,因为大部分数据在Redis层已经失效,请求渗透到数据库层,大批量请求犹如洪水一般涌入,引起数据库压力造成查询堵塞甚至宕机。

解决办法:
(1)将缓存失效时间分散开,比如每个key的过期时间是随机,防止同一时间大量数据过期现象发生,这样不会出现同一时间全部请求都落在数据库层,如果缓存数据库是分布式部署,将热点数据均匀分布在不同Redis和数据库中,有效分担压力,别一个人扛。
(2)简单粗暴,让Redis数据永不过期(如果业务准许,比如不用更新的名单类)。当然,如果业务数据准许的情况下可以,比如中奖名单用户,每期用户开奖后,名单不可能会变了,无需更新。



页: [1]
查看完整版本: MySql----