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

數據庫設計的三大範式

  • 第一範式:
    • 列原子性,保證每一列不可拆分
  • 第二範式:
    • 前提:滿足第一範式
    • 每張表只描述一件事情
  • 第三範式:
    • 前提:滿足第一、第二範式
    • 數據表中的每一列數據都和主鍵直接相關,而不能直接相關
  • 規範性和性能的衝突
    • 阿里規約:關聯查詢的表不得超過三張。
    • 考慮商業化的需求和目標,性能更加重要。
    • 在規範性能的情況下,適當考慮規範性。
    • 會有故意增加冗餘的字段(從多表查詢變爲單表查詢)
    • 會故意增加一些計算列(從大數據量降低爲小數據量的查詢)

常用函數

  • 字符串函數(不常用)
    在這裏插入圖片描述
  • 數值函數
    在這裏插入圖片描述
  • 日期和時間函數
    在這裏插入圖片描述
    在這裏插入圖片描述在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章