11、MySQL

【收藏】写给程序员的 MySQL 高频面试题!

【收藏】写给程序员的 MySQL 高频面试题!

MySQL介绍及配置

  • SQL:structured query language 结构化查询语言。

  • MySQL:数据库管理系统(DBMS) RDBMS 软件 在指定系统上安装的一个软件(服务)。

  • 主要管理数据获取存储等功能。包含数据库。

  • 数据库管理系统有n个数据库—> 每个数据库有n张表—>每张表里面有n个字段(类型 约束)以及n行记录

  • 配置情况

    • 在path: 配置mysql的 bin目录的路径;
    • 核心配置文件为my.ini,更改默认编码格式为utf8:
    66default-character-set=utf8
    第100行 character-set-server=utf8 
    
    • 可以愉快地使用了。
  • SQL的分类:

    1. DDL 数据定义语言 create alter
    2. DML 数据操作语言 insert delete update
    3. DQL 数据查询语言 select
    4. DCL 数据控制语言 grant begin commit flush

MySQL如何选用合适的数据类型

MySQL如何选用合适的数据类型char和varchar
MySQL中int(M)和tinyint(M)数值类型中M值的意义
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

DDL

1.创建数据库
create database 数据库名称;
2.查看创建数据库的基本信息
show create database 数据库名称;
java     | CREATE DATABASE `java` /*!40100 DEFAULT CHARACTER SET latin1 */

3. 创建表
语法:  tb_  t_ 
  create table 表名(
   字段1 字段类型 [约束],
   字段2 字段类型 [约束],
   字段3 字段类型 [约束],
      .....
   字段n 字段类型 [约束],
  );
 
 创建用户信息表 (一张表里面必不可少的3个字段:  id  createtime updatetime)
 create table tb_userinfo(
     id int(4) unsigned,
     name varchar(20),
     gender tinyint(1),
     salary decimal(10,3),
     birthday date,
     createtime datetime,
     updatetime datetime
 );

表  vs  类  (ORM  对象关系映射)
表名===类名
表字段==类属性
表字段类型==类属性的数据类型 

3. 删除表
   drop table 表名;
 
4. 操作表结构   alter
   新增表字段: alter table 表名 add 新的字段名称 类型 [约束];
   alter table tb_userinfo add age tinyint(2) unsigned;
   alter table tb_userinfo add age1 tinyint(2) unsigned after gender;
   删除指定字段:  alter table 表名 drop 字段名称;
   alter table tb_userinfo drop age;
   修改字段名称: alter table 表名 change age1 age 指定数据类型;
   alter table tb_userinfo change age1 age  tinyint(2) unsigned;
   alter table tb_userinfo change age1 age  int(2) unsigned;  
   
   mysql>  alter table tb_userinfo modify  age tinyint(2) unsigned; 只能修改类型
   
   修改表名:
     alter table 表名 rename 新的名称;
     rename table tb_user to tb_userinfo;

DML

 - insert
  1.对所有的字段赋值
  insert into 表名 values (数据1,....数据n);

 - 指定部分字段(推荐)
  insert into 表名 (字段1...字段n) values (数据1,....数据n);
  
  修改指定数据库编码:
  mysql> ALTER database 数据库名 character set utf8; 

 - delete
   删除指定表里面的一条或者多行记录
   delete from 表名; == > 清空表数据
   根据条件删除记录: where
   delete from 表名 [where 字段名 = 数据  and(or) 字段名 = 数据]; >=0行记录会受影响
   
 - update
   修改指定表里面的>=1行记录
   update 表名  set 字段名1 = 新的数据1 ,字段名2 = 新的数据2 [where 字段名 = 数据  and(or) 字段名 = 数据];// >=0行记录会受影响

约束

  • 空约束:null
  • 非空约束:not null
  • 默认约束:default
  • 唯一性约束:unique
  • 主键约束:primary key(行级约束:值唯一且不能为null)
  • 外键约束:foreign key(表级约束)
    • 在开发中,表里面不允许出现外键。一切表与表的关联关系,在代码层面上进行解决。

DQL

-- 查询语句  select  * 通配符(表的所有列)
select * from 表名;

select 字段名称1,字段名称2  from 表1,2
[where 条件1 and/or 条件2
 group by 字段名(对结果分组)
 having 条件1(分组后筛选行的操作)
 order by 字段1 asc, 字段2 desc(排序)
 limit ?,?(限定,多用于分页)
]
  • 条件查询
    在这里插入图片描述
  • 字段控制查询
    在这里插入图片描述
  • 聚合函数
    在这里插入图片描述
  • 分组查询
    在这里插入图片描述
  • 关联查询
    在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

数据备份

1. 物理内存复制data目录  my.ini(96行) datadir=C:/ProgramData/MySQL/MySQL Server 5.7/Data
2. 利用客户端(navicat)的工具功能 转储-->结构+数据
3. 使用命令行: 
   备份: mysqldump -hip -uroot -proot java_1 > d:\\java_1.sql
   mysqldump -hlocalhost -uroot -proot java_1 > d:\\java_1.sql
   导入:
      source sql文件路径

如何设计一个项目的数据库

  • 糟糕的数据库设计
    • 数据冗余
    • 自带外键,数据插入删除麻烦(屏蔽使用物理外键)
    • 程序的性能差
  • 数据库设计步骤(个人博客):
  • 分析需求,标识实体
    • 用户表(用户登录注销,个人信息,写博客,创建分类)
      在这里插入图片描述
    • 分类表(文章分类)
      在这里插入图片描述
    • 文章表(文章的信息)
      在这里插入图片描述
    • 评论表
      在这里插入图片描述
    • 友链表(友情链接信息)
      在这里插入图片描述
    • 自定义表(系统信息,博客标题等)
  • 标识实体之间的关系
    • 写博客:user——>blog
    • 创建分类:user——>category
    • 关注:user——>user
    • 评论:user——>user——>blog

数据库设计的三大范式

  • 第一范式:
    • 列原子性,保证每一列不可拆分
  • 第二范式:
    • 前提:满足第一范式
    • 每张表只描述一件事情
  • 第三范式:
    • 前提:满足第一、第二范式
    • 数据表中的每一列数据都和主键直接相关,而不能直接相关
  • 规范性和性能的冲突
    • 阿里规约:关联查询的表不得超过三张。
    • 考虑商业化的需求和目标,性能更加重要。
    • 在规范性能的情况下,适当考虑规范性。
    • 会有故意增加冗余的字段(从多表查询变为单表查询)
    • 会故意增加一些计算列(从大数据量降低为小数据量的查询)

常用函数

  • 字符串函数(不常用)
    在这里插入图片描述
  • 数值函数
    在这里插入图片描述
  • 日期和时间函数
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值