MySQL常见的一些问题汇总

首先询问自己几个问题

1.访问MySsqld的两条路:是否是同时开启的?

答案:两条路为文件Socket和网络Socket,这两条路是同时开启的,这里一般本机使用MySQL是直接调用文件Socket 这里是要保证 ,而其他机器连接数据库时使用网络Socket进行调用

2.mysql启动不了,如何去解决?

1.检查配置文件,是否有错误
其实配置文件就是存储的给程序传输的变量,如果变量错误,很有可能程序启动不了

2.看日志
日志可以告诉你是什么原因报错

3.如何判断mysql服务是否启动?

1.看进程

ps -aux    

2.看端口号

netstat  -anpult
lsof   -i:3306

3.如何知道安装的MySQL的版本? 多少种?

1.直接 mysql -V  查看 
2.登录mysql后可以看到
3. 使用select Version sql语句查看
4. show variables like "version" 直接查询mysql的变量

4.其他电脑的用户连接到本机的mysql里,不能连接过来?

1.网络是否畅通
2.检查服务器上mysqld进程是否启动,是否启动相应的端口,默认是3306
3.检查防火墙是否开启
4.是否给连接的用户授权

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Hpx123#' 
设置指定用户名为root,密码为Hpx123#,可访问所有数据库*
ALL可以更改 例如只给与查询选线就写一个select

5.你知道的MySQL客户端工具?

1.mysql直接命令行连接:mysql -h IP -root  -p'password'  -P port
2.SQLyog
3.navicat
4.workbench
等

7.密码遗忘了怎么办

  • 如果是root用户

1.停止mysql进程

service mysqld stop

2.修改配置文件
在mysql配置文件**/etc/my.cnf添加一条叫做skip-grant-tables**的语句,这个语句的意思就是跳过认证表,当你登录mysql表时你会访问到user表hosts等一些表,然后与里面的数据进行比对,当你的里面的数据与之匹配之后,才登陆成功,这里就是跳过这些表进行登录
在这里插入图片描述
3.第3步:启动MySQL进程

service mysqld start
直接输入mysql -uroot  -p 发现能访问成功了

这里其实我遇到一些问题做出的总结:

1.my.cnf配置文件里尽量不要出现中文
2.当你修改配置文件的时候记得要给与权限,我当时就是因为权限小了,这样导致第三方用户mysql读的权限都没有(这里注意一下登录的时候是第三方用户mysql读的,并不合适你本机root用户读的

4.刷新权限

flush privileges

这里的意思就是,因为你是跳过了认证表登录的,此时你需要刷新下权限,来让认证表重新生效

5.重新设置密码

alter user root@localhost  identified by 'new_pass'

6.改回配置选项,这里就已经修改密码成功了

  • 其他用户
    这里就直接用alter语句进行修改就可以了
alter user 需要修改的用户  identified by 'new_pass'

8.建好的数据库中有什么文件,文件存放的什么内容

数据库存放在 /var/lib/mysql 文件夹里在这里插入图片描述
打开hpx库
在这里插入图片描述

db.opt  database  option 数据库的选项 存放的是库所使用的字符集和字符集对应的排序规则

lh.frm 是表结构文件,里面是记录这个表里有哪些字段,已经字段的类型 frame   架构、结构,表结构其实就是这个表里有几列,每列的数据类型

.ibd 是真正存放表里的数据和索引的文件  --》因为是使用innodb存储引擎存放和读取数据的

这里提一下存储引擎
存储引擎:是MySQL里的一个专门负责数据的读取和保存的软件。 storage engine
1.myisam --》读写速度快,容易丢失数据
user.frm 是表结构文件
user.MYD 是存储数据 data
user.MYI 是存放索引 index
索引:是用来查询数据的数据–》描述其他数据的数据–》加速查询
select 的时候,查找出东西快些,
不然后就要全表扫描
全表扫描:就是一行一行的将表里的数据都看一遍。
书: 目录+内容
目录的作用:方便我们去查询内容,查询的时候快

2.innodb --》默认的存储引擎、、–》速度稍微慢,不丢失数据,非常稳定

#9.SQL语句介绍 DDL、DML、DCL、DQL含义
SQL即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;
数据库软件:
MySQL、oracle 、SQL server等这些数据库软件里的SQL语句都是一模一样的呢?
答案:不是都一样,有点个别的差异

DDL:数据定义语言,里面包含create、drop语句
语法格式

create database sc; 建库
create table t1(id int); 建表
desc t1;  查看表结构
drop database sc;   删库
drop table lh;   删表

DCL:数据控制语言revoke grant语句

grant 权限操作分类 on 数据库作用范围 to 某个用户  赋予权限
revoke all on *.* from ‘用户’@’%’ 去除当前用户所有权限   收回权限

DML语句:数据操作语言 这里包括 insert into 、delete、update、select

insert into student(id,name,grade,address)  values(3,'hh',89,'guangdong'); 这里就是给student表的每一个字段赋值
delete  

delete from student where id = 4;  删除student表中id=4的字段

update student set id = 3 where name = 'ph';  更新student 名字为ph的字段的id 

select *  from  table    查询table 中所有数据

DQL:数据查询语言 select
这里其实已经归并到了DML中了

9.如何知道当前在那个库里?

select database();语句可以查看当前在那个库

10.MySQL里有哪些数据类型?

MySQL支持几种类别的SQL数据类型:数字类型,日期和时间类型,字符串(字符和字节)类型,空间类型和 JSON数据类型
这里提一下主键
主键: 作为主键的列(字段),不能出现重复的数据,防止数据的重复 primary key
可以唯一确定这一行
主键是一个角色,从表里的字段去选
主键可以是一个字段,也可以是多个字段组成
联合主键:多个字段组成,至少2个
创造方法

create table test 
( 
   name varchar(19), 
   id number, 
   value varchar(10), 
   primary key (name,id) 
) 
这就表示name 、id都是主键 如果只有一个主键 直接加在后面就好了

10.1数字类型

这里是数据类型大概占用的大小图,我们使用数据类型的时候,应该尽量选用合适的数据类型,这样可以节省磁盘空间以及提高查询效率
在这里插入图片描述

10.2 日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。
在这里插入图片描述

例如这里创建了一个时间的字段

create table sanchuang(name varchar(20),birth date);  #建表

insert into  sanchuang(name,birth)  values('hpx','1999-09-09');  #插入数据
 

注意这里时间一定要用引号,因为时间也是字符串,并不是整形
在这里插入图片描述
timestamp -->时间戳,意思是距离1970-1-1 0:0:0 为起点 ,时间戳的存在是为了统一时间,因为全世界每个时区的时间都会不一样,然后这里就在这里就采用了一个全世界都统一的时间格式来存储,最大可存储道2038.1.19 11:14:07, 那这里就有一个问题,这里如果超过这个时间了怎么办,其实这里其实是因为时间戳是只占4个字节,那么就是只能存储2的32次方的时间,那么mysql如果将其改为8个字节的话那么就可能存储更多的时间了

10.3 字符类型

char和varchar有什么区别?

char 固定长度的字符串类型 character 字符 --》在存储的时候,不够固定长度,就在前面填充空格,达到固定长度’feng’ 但是我的表结构里的长度是30,在存储feng字符串的时候,会在前面填充26个空格来达到30个字符的长度

varchar 可变长的字符串类型 variable character
‘feng’ 我的表结构里的长度是30,但是只是存储feng这4个字符,不填充空格
char比varchar在长度没有达到规定的时候,更加消除磁盘空间些。如果达到了规定长度,varchar要比char多一个字节的存储空间

长度方面:
char 最大长度255 varchar最大长度是65,535

检索的方式不同
一个长度CHAR列被固定在创建表声明的长度。长度可以是0到255之间的任何值。CHAR 存储值时,将在它们的右边填充空格以达到指定的长度。当CHAR被检索到的值,拖尾的空格被删除

一个英文字母占1个字节1个汉字,如果是utf8编码,占3个字节

length(name)统计字符串的存储的字节数
char_length(name) 统计的是字符的个数

10.4 枚举类型

格式

CREATE TABLE shirts (
    name VARCHAR(40),
    size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);
INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),
  ('polo shirt','small');

当你创建一个表时,字段数据你只需要这几个的时候,你就可以使用枚举类型,枚举类型规定你这个字段只能插入我给定的类型

10.5 集合类型

格式

CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));
INSERT INTO myset (col) VALUES   ('a,d,c,b,f,b');

查看插入的数据时
在这里插入图片描述
集合类型:插入数据的时候,发现你插入的重复数据b在这里就会自动去重,而且插入的时候未设置f,那么也不会插入进去

约束条件

create  table  city_name(id int unsigned auto_increment primary key,name varchar(20) not null); 

unsigned  无符号
auto_increment  自动增长
primary key  主键
not null 不为空
SET @@auto_increment_offset = 10,  -- 起始值
      @@auto_increment_increment=10;  
      可以更改变量让自增长变成10

set 是mysql里设置变量的命令,@@ 开头的变量是内置的变量,@ 开头的是自定义的变量

2种设置主键方法:

create table stu3(id int  comment '编号',name varchar(20) not null comment '姓名',primary key(id));

create table stu2(id int primary key comment '编号',name varchar(20) not null comment '姓名');
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值