广州37期_余秋杰 发表于 2021-12-15 22:15:54

mysql学习笔记1——2021.12.15

作业:
面试题:
了解mysql和Oracle的区别
了解Redis数据库的特点,包括哪些数据格式、记住几条Redis数据库命令,了解Redis雪崩机制。

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

mysql服务启动、关闭、重启、查询状态的操作
service mysqld start ===》启动mysql服务
service mysqld start ===》启动mysql服务
service mysqld stop ===》查看mysql的服务状态
service mysqld restart ===》重启mysql服务

登录mysql :
第一次登录(未设置密码):不需要输入密码
linux系统使用 mysql -uroot -p 登录
    data:,
退出mysql有三种方式:quit、exit、Ctrl +c


对sql进行设置密码登录
mysqladmin -uroot password '123456'

    data:,
设置密码之后进行登录
明文登录- mysql -uroot -p+密码登录
密文登录- mysql -uroot -penter 后输入密码
    data:,

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

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

    data:,
show databases;===展示所有数据库,查看当前数据库管理系统中所有的数据库

use +库名;==》进入某个库,才可以对库中的表进行操作
show tables; ==》查看当前库中所有的表。

create database 新的库名;===》创建数据库xxxx库;
select database();==》查询当前所使用的库

create tables 表名(字段名1 字段格式,字段名2 字段格式,…… );建表语句

create table test(id int(10) primary key auto_increment,#ID字段 属性为int(10)是primary key ,而且是anto_increment
name varchar(20)not null,
score float(20,2),
phone bigint(20) default 17633338888);

int(10) ==》数据宽度为10的整形,整数型,mysql保存数字的数据的一个长度
primary key ==》主键约束,一个表中只有一个主键,说明这个字段是这个表的主键,整列唯一的,不重复的,而且不能为空。
auto_increment ==》自增长约束,要结合着主键使用
cr
varchar(20)==》可变长字符串,对应的值是可以为任意的数据(字母,中文,特殊字符,空格,插入数据时要使用引号‘’,在引号‘’里面写入数据,后面的20表示字符长度,字母占一个字符参股,中文utf-8编码占3个字符,GBK编码占两个字符。
char==》定长字符串,也就是保存字符串。
varchar(可变长字符串)和char(定长字符串)的区别;
char固定占磁盘225个字符,varchar最大占2的16次方个字符。
char的查询性能会好些,但是不节约资源
varchar的性能差一点,但是节约资源,可以保存0~2的16次方个字符。

float(20,2)浮点型,保存小数,最大占4个字节,(20,2)表示宽度可以保存20,2表示小数点两位
double 浮点型,保存小数,最大占8个字节
bigint(20)大数字,整形,整数型,占8个字节。

data ==》保存日期 固定格式 yyyy-mm-dd

primary key
==》主键约束,一个表只有一个主键,说明这个字段是这个表的主键,整一列的数据是唯一的,不重复的,而且不能为空
auto_increment
==》自增长约束,要结合着主键使用
not null
==》非空约束,不能不填
default
==》默认值约束,如果不对该字段插入值,默认输入值。
常见约束:
primary key 主键约束
foreign key 外键约束
not null 非空约束
default 默认值约束
auto_increment 自增约束

    data:,



[*]查看表结构:desc +表名;==》查看表结构


    data:,

[*]修改表名:alter table test rename test1;


    data:,


[*] alter table test change sid sid int(10) auto_increment;

==》重新为sid添加字段约束auto_increment
    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;
丢掉表test里面的sex列

    data:,

alter table test add(sex varchar(6), age int(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 +表名;===》丢弃表,删除表
drop database +库名;==》丢弃库,删除库。

    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

alter table test change id id int(10);
先改掉字段的递增属性,再删约束
alter table test drop primary key;
删除约束
alter table test change id id 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:,

insert into test(name,time,score) values('xiaoxiao','2021/1/1',29.001);
==》使用第一种方式插入表信息,往test表里插入姓名,时间,价格的信息。

    data:,


    data:,


面试题:
1,了解MySQL和Oracle数据库的区别?

1、mysql和oracle宏观上的区别:
mysql、Oracle都属于甲骨文公司了,mysql开源免费的,而oracle则是收费的。mysql的安装卸载很简单,安装所用的空间差别也是很大的,mysql安装后差不多一两百兆,而oracle则有3G左右,且使用的时候oracle占用特别大的内存空间和其他机器性能。
2、数据库的层次结构:
mysql:默认用户是root,用户下可以创建好多数据库,每个数据库下还有好多表,一般情况下都是使用默认用户,不会创建多个用户;
oracle:创建一个数据库,数据库下有好多用户:sys、system(默认用户)、scott等,不同用户下有好多表,一般情况下只创建一个数据库用。
3、操作类型不同,数据库中表字段类型:
其中主键、单引号处理、分页处理、对事务提交,对事务的支持、事务隔离级别、并发性、逻辑备份、复制、性能诊断、保存数据的持久性、热备份、日期转换等操作命令都有不同。
其中char(2)这样定义,这个单位在oracle中2代表两个字节,mysql中代表两个字符。其中varchar在mysql中,必须给长度例如varchar(10)不然插入的时候出错。


2,了解Redis数据库的特点、包含哪些数据格式、记几条Redis数据库里面的命令、了解Redis的雪崩机制。

1、Redis是使用ANSI C语言开发的一个高性能Key-Value数据库,是当今速度最快的内存型非关系型(NoSQL)数据库,可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。

2、Redis数据库的类型:String 字符类型、Hash 散列类型、List 列表类型、 Set 集合类型。
String数据结构是简单的Key-value类型,value可以是String也可以是数字。
get:获取key对应的vlaue
set:为一个key设置value,可配合ex/px参数设置key的有效期
getset:为一个Key设置value,并返回该key的原value
key-value ,单点登录时采用这种数据结构存储用户信息,key为cookieId,value存放结构化对象。
hset:将Key对应的hash中的field设置为value。如果该hash不存在,会自动创建一个。
hget:返回指定hash中field字段的值。
hmset/hmget:同hset和hget,可以批量操作同一个key下的多个field。
hgetall:谨慎使用,为完整遍历,耗时!—以数组形式返回哈希表中,所有的字段和值。紧跟每个字段名(field name)之后是字段的值 (value),所以返 回值的长度是哈希表大小的两倍。

Redis缓存雪崩产生的原因
缓存雪崩通俗简单的理解就是:由于原有缓存失效(或者数据未加载到缓存中),新缓存未到期间(缓存正常从Redis中获取,如下图)所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机,造成系统的崩溃

页: [1]
查看完整版本: mysql学习笔记1——2021.12.15