MySQL數據庫管理與索引優化全攻略

一、表管理

1.建庫

語法:

create database if not exists 數據庫名;

命名規則:

僅可使用數字、字母、下劃線、不能純數字;區分字母大小寫;具有唯一性;不可使用MySQL命令或特殊字符。

相關命令:

show databases;   #查看庫
use 庫名;          #使用庫
select database();  #查看所在的庫
drop database if exists 庫名;   #刪除庫
2.建表

建表語法:

create table 庫名.表名(表頭名1 數據類型,表頭名2 數據類型...);

相關命令:

show tables;        #顯示已有的表
desc 庫名.表名;      #查看表頭
select * from 庫名.表名;   #查看表記錄
drop table 庫名.表名;       #刪除表
3.修改表

語法格式:

alter table 庫.表 操作命令;

修改表名

alter table 庫名.表名 rename 庫名.新表名;

刪除表頭

alter table 庫名.表名 drop 表頭名;

添加表頭

alter table 庫名.表名 add 表頭名 數據類型;     #默認添加在末尾
alter table 庫名.表名 add 表頭名 數據類型 first;  #添加在首位
alter table 庫名.表名 add 表頭名 數據類型 after 表頭名;   #添加在指定表頭名下方

修改表頭數據類型

alter table 庫名.表名 modify 表頭名 新數據類型;

修改表頭名

alter table 庫名.表名 change 表頭名 新表頭名 數據類型;
4.復制表

語法格式:

create table 庫名.表名 select 列名 from 庫名.表名 [where 條件]; #復制表結構及數據
create table 庫名.表名 like 庫名.表名; #僅復制表結構

二、數據類型

MySQL提供了豐富的數據類型,主要分為三大類:數值類型、枚舉類型、日期類型和字符串類型。

1.數值類型

整數類型:tinyint、smallint、mediumint、int、bigint。

示例:

create table users (id int ,age tinyint,views bigint
);

浮點數類型:float、double、decimal。

示例:

create table products(price decimal(6,2),weight float,ratio double
);
2.枚舉類型

enum類型,字段值僅能在范圍內選1個值;set類型,字段值能在范圍內選取1個或多個值。

示例:

create table 庫名.表名(字段名 enum(選項1,選項2,選項3...),字段名 set(選項1,選項2,選項3...)
);
3.日期時間類型

date僅日期、time僅時間、datetime日期時間、timestamp時間戳、year年份。

示例:

create table events (evnet_date date,start_time time,created_at timestamp,full_datetime datetime
);
4.字符串類型

char定長字符串、varchar變長字符串、tinytext短文本、text長文本內容、mediumtext中等長度文本、longtext超長文本。

示例:

create table articles (title varchar(50),content text,image mediumblob,hash char(32)
);

三、數據批量處理

1.數據導入

語法格式:

load data infile "/目錄名/文件名" info table 庫名.表名 fields terminated by "分隔符" lines terminated by "\n";
2.數據導出
select命令 into outfile "/目錄名/文件名" fields terminated by "分隔符" lines terminated by "\n";

四、表頭約束

表頭約束是數據庫管理系統中的關鍵機制,用于在列級別確保數據完整性和一致性,通過定義數據必須滿足的條件和規則來實現。

1.約束分類

not null:非空約束,確保該字段值不能為空。

default:默認值設置,當未指定該字段值時自動填充默認值。

unique:唯一約束,保證該字段值在整個表中具有唯一性,允許為空值。

primary key:主鍵約束,兼有唯一性和非空性,作為表的唯一標識。

foreign key:外鍵約束,用于建立表間關聯關系,確保從表字段值必須引用主表對應字段值。

2.基本約束

not null:不允許賦空值。

create table test.stu(name char(10) not null,class char(7) null
);

default:不給表頭賦值時,使用默認賦值。

create table test.stu(name char(10) not null,class char(10) null default "sql"
);

unique:表頭的值不允許重復

create table test.stu(name char(10) not null,class char(10) null default "sql",phone char(11),unique(phone)
); 
3.高級約束
(1)主鍵(primary key)

主鍵字段必須滿足非空且唯一的要求。每個表只能定義一個主鍵,但可以由多個字段組成復合主鍵。復合主鍵需要同時創建和刪除,在系統中會顯示為PRI標志。通常建議將主鍵字段設置為自增屬性,并選擇能夠唯一標識表中記錄的字段作為主鍵。

主鍵創建語法格式:

#格式一
create table 庫.表(
表頭名 數據類型 primary key ,
表頭名 數據類型 ,
..... );
#格式二
create table 庫.表(
表頭名 數據類型 ,
.....
primary key(字段名)
);

刪除主鍵語法格式:

alter table 庫名.表名 drop primary key;

添加主鍵語法格式:

alter table 庫名.表名 add primary key(表頭名);

復合主鍵語法格式:

create table 庫.表(
表頭名 數據類型 ,
.....
primary key(字段名列表)
);

與auto_increment連用

create table 庫.表(
表頭名 數據類型 primary key auto_increment,
表頭名 數據類型 ,
..... );
(2)外鍵(foreign key)

表存儲引擎必須使用InnoDB,各列的數據類型需保持一致,被參照的列必須是索引類型之一(如主鍵primary key)。

創建外鍵語法格式:

create table   庫.表(
表頭列表 , 
foreign key(表頭名)        #指定外鍵
references 庫.表(表頭名)   #指定參考的表頭名
on update  cascade         #同步更新
on  delete  cascade        #同步刪除
)engine=innodb;

刪除外鍵語法格式:

alter table 庫名.表名 drop FOREIGN KEY 外鍵名;

添加外鍵語法格式:

alter table db1.gz add foreign key(字段名) references 庫名.表名(字段名) on update cascade on delete cascade ;

五、MySQL索引

MySQL 索引是一種用于提升查詢效率的關鍵數據庫機制,其作用類似于書籍的目錄,能夠幫助數據庫快速檢索數據。在單個數據表中可以創建多個索引。索引可以應用于任何數據類型的字段,允許字段值重復或為NULL值。通常建議在WHERE子句查詢條件涉及的字段上創建索引,在MySQL中這些索引會被標記為MUL。

1.索引分類

普通索引:適用于任何數據類型的索引,無附加條件限制,僅用于提升查詢效率,允許重復值和NULL值。

唯一索引:通過unique參數創建的索引,要求索引值必須唯一,但允許存在NULL值。

全文索引:專為文本搜索設計的索引類型,支持自然語言搜索和布爾搜索功能。

單列索引:基于單個字段構建的索引結構。

多列索引:在表的多個列上創建的復合索引,查詢時可通過這些字段組合來提高檢索效率。

2.索引的優點

優化查詢性能,降低數據掃描量;提升連接效率,實現高效 JOIN 操作;確保數據完整性,維護唯一性約束。

3.索引缺點
  • 需要額外存儲空間,增加了存儲開銷
  • DML操作成本上升,導致寫入性能下降
  • 需定期維護,維護成本隨之增加
  • 索引選擇難度較大
4.普通索引

建表時創建索引:

create table 庫名.表名(
字段列表,
index(表頭名),
index(表頭名),
);

添加索引:

create index 索引名 on 庫名.表名(字段名);

刪除索引:

drop index 索引名 on 庫名.表名;

驗證查詢是否使用索引:

explain select 查詢語句;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94237.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94237.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94237.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于大模型構建 Java 混淆的方式方法(從入門到精通 · 含開源實踐)

1. 目標與威脅模型:你到底想防什么? 把“混淆”當作成本疊加器:讓逆向者付出更多時間與技能,而不影響用戶體驗與可維護性。可用 Collberg 等提出的四指標來權衡:有效性/韌性/隱蔽性/成本(potency/resilience/stealth/cost)。近年的研究也在重審這些評估方法,建議結合可…

RabbitMQ面試精講 Day 28:Docker與Kubernetes部署實踐

【RabbitMQ面試精講 Day 28】Docker與Kubernetes部署實踐 在微服務架構日益普及的今天,消息中間件RabbitMQ已成為解耦系統、異步通信的核心組件。隨著云原生技術的成熟,如何在Docker與Kubernetes(K8s)環境中高效、高可用地部署Ra…

神經網絡和深度學習介紹

目錄 1.深度學習的介紹 2.神經網絡的構造 ①神經元結構 ②神經網絡組成 ③權重核心性 3.神經網絡的本質 4.感知器 單層感知器的局限性: 5.多層感知器 多層感知器的優勢: 6.偏置 7.神經網絡的設計 8.損失函數 常用的損失函數: 9…

云原生俱樂部-k8s知識點歸納(8)

這一部分主要講一講CRD客戶資源定義、Gateway API、Priority Class優先類、HPA自動擴縮這四部分內容。還剩下Argo CD的內容了整個k8s,至于operator的話單獨有一本書,都是實戰內容。CRD客戶資源定義先來講一講這節內容的幾個核心術語,Custom R…

【機器學習】7.隨機森林之數學原理

隨機森林(Random Forest)的數學原理核心是“決策樹基學習器 Bootstrap抽樣 特征隨機選擇” 的集成框架,通過降低單棵決策樹的方差、提升模型泛化能力來工作。以下分步驟解析其數學推導與核心邏輯: 一、 基學習器:決策…

大模型微調面試題全解析:從概念到實戰

大模型微調面試題全解析&#xff1a;從概念到實戰 微調基礎概念 本文較長&#xff0c;建議點贊收藏&#xff0c;以免遺失。更多AI大模型開發 學習視頻/籽料/面試題 都在這>>Github<< >>gitee<< &#xff08;一&#xff09;什么是微調 微調&#xf…

Linux: network: arp: arp_accept

文章目錄 接收 linux 代碼 arp協議的處理 接收 arp_accept - BOOLEAN Define behavior for gratuitous ARP frames who’s IP is not already present in the ARP table: 0 - don’t create new entries in the ARP table 1 - create new entries in the ARP table Both repli…

SpringBoot 整合 Langchain4j RAG 技術深度使用解析

目錄 一、前言 二、Langchain4j RAG介紹 2.1 什么是LangChain4j 2.2 LangChain4j RAG技術介紹 2.2.1 RAG技術原理 2.2.2 LangChain4j中的RAG實現 2.2.3 LangChain4j RAG技術優勢 2.2.4 LangChain4j RAG技術應用場景 三、LangChain4j RAG 技術深度使用 3.1 文檔加載與解…

百度深度學習面試:batch_size的選擇問題

題目在深度學習中&#xff0c;為什么batch_size設置為1不好&#xff1f;為什么batch_size設為整個數據集的大小也不好&#xff1f;&#xff08;假設服務器顯存足夠&#xff09;解答這是一個非常核心的深度學習超參數問題。即使顯存足夠&#xff0c;選擇極端的 batch_size 也通常…

AWS Fargate 完全指南:在無服務器容器中釋放應用潛能

容器化技術帶來了應用交付的革命,但管理運行容器的底層服務器集群卻帶來了新的復雜性。如何在不犧牲容器靈活性的前提下,擺脫服務器的運維重負? AWS Fargate 應運而生。它是一款為容器打造的無服務器計算引擎,讓您能夠專注于構建應用程序,而無需管理服務器。本文將帶您深…

WSL Ubuntu數據遷移

將 WSL 中的 Ubuntu 遷移到其他磁盤可有效釋放 C 盤空間并優化系統性能。以下是詳細步驟及注意事項&#xff1a;&#x1f4cd; ??遷移步驟????備份 WSL 數據&#xff08;防止意外丟失&#xff09;??以管理員身份打開 PowerShell 或命令提示符。導出 Ubuntu 實例為壓縮包…

基于STM32的病房監測系統/環境監測系統/人體健康監測系統

基于STM32的病房監測系統/環境監測系統/人體健康監測系統 持續更新&#xff0c;歡迎關注!!! 基于STM32的病房監測系統/環境監測系統/人體健康監測系統 隨著科技的進步與人們健康意識的提升&#xff0c;環境與人體健康監測的需求日益增長。在醫療、居住和工作環境中&#xff0c…

【適合中小企業應用的Flask網站部署指南】【小白指南系列】如何在Windows Server服務器上部署Flask網站和SSL證書開啟HTTPS

【適合中小企業應用的Flask網站部署指南】【小白指南系列】如何在Windows Server服務器上部署Flask網站和SSL證書開啟HTTPS 前言&#xff1a; 上一篇文章已經配置好Redis數據庫和網站雛形建立了。現在完善了一個比較重大的功能和進度之后&#xff0c;我們嘗試初步將Flask項目網…

std::exchange詳解

一、基本概念與函數原型 std::exchange 是 C++14 引入的標準庫函數,定義于 <utility> 頭文件。其核心功能是原子性地替換對象的值并返回舊值,適用于資源管理、狀態機更新等場景。 函數原型: template <class T, class U = T> T exchange(T& obj,

kubernetes-dashboard使用http不登錄

安裝了k8s v1.28&#xff0c;想要安裝kubernetes-dashboard以便可視化管理平臺&#xff0c;網上很多資料都是版本比較低的&#xff0c;自己摸索了很久&#xff0c;終于搞定了。直接上配置文件&#xff0c;拿去kubectl apply -f k8s-dashb.yml就行了。 # Copyright 2017 The Kub…

道路車道線分割數據集左車道右車道中線labelme格式3494張4類別

數據集格式&#xff1a;labelme格式(不包含mask文件&#xff0c;僅僅包含jpg圖片和對應的json文件)圖片數量(jpg文件個數)&#xff1a;3494標注數量(json文件個數)&#xff1a;3494標注類別數&#xff1a;4標注類別名稱:["center_lane","right_lane","…

12.Shell腳本修煉手冊--函數的基礎認知與實戰演練(fock炸彈!!)

Shell 函數的知識與實踐 文章目錄Shell 函數的知識與實踐Shell 函數介紹Shell 函數的語法Shell 函數的執行1. 不帶參數的函數執行2. 帶參數的函數執行Shell 函數的基礎實踐示例 1&#xff1a;簡單的 hello 函數&#xff08;驗證 “先定義后調用”&#xff09;示例 2&#xff1a…

微信小程序設計的請求封裝方案(request.js)

以下是為微信小程序設計的請求封裝方案&#xff0c;包含代碼示例和最佳實踐建議&#xff1a; 基礎請求封裝&#xff08;request.js&#xff09; // 基礎配置 const BASE_URL https://api.yourdomain.com; const TIMEOUT 10000;// 請求封裝函數 const request (options) >…

【Linux系統】進程信號:信號的處理

上一篇文章在介紹完信號的產生和保存后&#xff0c;我們現在對信號有了一個基本的認識&#xff0c;信號由鍵盤、系統調用、硬件異常、軟件條件等方式產生&#xff0c;然后被保存在三張表中&#xff0c;再將信號遞達&#xff0c;操作系統有三種處理方式&#xff1a;默認處理、忽…

權限管理模塊

登錄相關權限管理模塊(基礎版)模塊設計與實現優化點&#xff1a;前后端用戶驗證實現方式常見的攻擊手段及防御手段權限管理模塊(基礎版) RBAC(Role-Base Access Control&#xff0c;基于角色的訪問控制)&#xff1a;是權限管理的常用方案。 核心&#xff1a;通過用戶 - 角色 -…