mysql資料庫總結。

来源:https://www.cnblogs.com/nmsghgnv/archive/2019/08/16/11362150.html
-Advertisement-
Play Games

mysql MySQL語法MySQL採用結構化查詢語言SQL (Structured Query Language)語言來操作資料庫SQL語句必須以 ; 結束SQL語句分類DDL(數據定義語言): create、drop、alter、truncateDQL(數據查詢語言): select、showD ...


mysql

MySQL語法
MySQL採用結構化查詢語言SQL (Structured Query Language)語言來操作資料庫
SQL語句必須以 ; 結束
SQL語句分類
DDL(數據定義語言): create、drop、alter、truncate
DQL(數據查詢語言): select、show
DML(數據操作語言): insert、update、delete
DCL (數據控制語言): grant、revoke、begin transaction、commit、roolback

MySQL存儲引擎
MySQL數據表類型由存儲引擎來決定,主要有6種類型:InnoDB 、BDB、MyISAM、ISAM、、Heap、Merge
InnoDB
支持事務
支持外鍵
不支持數據壓縮
寫速度較慢
MySQL5.5開始支持全文索引
占用更多的記憶體和磁碟空間來保留數據和索引

MyISAM
不支持事務
不支持外鍵
訪問速度快
支持全文索引


資料庫的備份還原
#方法一
mysqldump -h伺服器 -P埠 -u用戶名 -p密碼 資料庫名稱 > 備份文件路徑
source 備份文件路徑

#方法二
直接備份資料庫文件(註意:這種方法不適用於InnoDB存儲引擎的表,而對於MyISAM存儲引擎的表很方便。同時,還原時MySQL的版本最好相同)

#方法三
使用第三方工具 例如:Navicat for MySQL

命令行鏈接資料庫
mysql -u root -p

資料庫操作
#添加資料庫
create database [if not exists] 庫名 [[default] character set 編碼方式]

#查看資料庫
show databases 查看MySQL下有哪些資料庫
show create database 庫名 查看某個資料庫的詳細信息

#修改資料庫
alter database 庫名 [default] character set 編碼方式

#刪除資料庫
drop database [if exists] 庫名


數據表操作
#打開數據表所在的資料庫
use 庫名

#添加數據表
create table [if not exists] 表名(
欄位名 數據類型 [約束],
欄位名 數據類型 [約束],
......
欄位名 數據類型 [約束]
)[ENGINE=MyISAM DEFAULT CHARSET=utf8 collate utf8_general_ci] ;

#查看數據表
show tables 查看當前數據下有哪此數據表
show create talbe 表名 查看建表信息
desc 表名 查看表結構

#修改數據表
#增加欄位
alter table 表名 add [colum] 欄位名 數據類型 [約束]

#修改欄位名
alter table 表名 change 欄位名 新欄位名 數據類型 [約束]

#刪除欄位
alter table 表名 drop [colum] 欄位名

#更改表名
alter table 表名 rename [to] 新表名

#刪除數據表
drop table 表名

#清空數據表
truncate table 表名

 

資料庫的增刪改查
#插入記錄
#插入一條新的記錄
INSERT INTO 表名 [(欄位名1,欄位名2,…欄位名n)] VALUES(‘值1’,‘值2’,…,’值n’);
#插入多條記錄
INSERT INTO 表名 [(欄位名1,欄位名2,…欄位名n)]
VALUES(‘值1’,‘值2’,…,‘值n’),
(‘值1’,‘值2’,…,‘值n’),
......
(‘值1’,‘值2’,…,’值n’);

#刪除記錄
#根據條件刪除記錄
delete from 表名 [where 條件子句] [order by 欄位 asc|desc ] [limit 條數]
#在WHERE子句中,條件可以由一個或多個邏輯表達式組成,
#在WHERE子句中,可以通過邏輯操作符和比較操作符指定基本的表達式條件
#刪除全部記錄
truncate table 表名

#更新記錄
update 表名 set 欄位名=新值,欄位名=新值,....... [where 條件子句] [order by 欄位 asc|desc ] [limit 條數]

#查詢記錄
select 欄位1,欄位2,...... from 表名 [where 條件子句] [group by 欄位][haveing 條件子句][order by 欄位] [limit [起始值] 條數]

 

Alias 別名
#通過使用 SQL,可以為欄位名稱和表名稱指定別名
SELECT 欄位名 AS 別名 FROM 表名
SELECT * FROM 表名 AS 表別名

 

distinct 去重覆
#關鍵詞 DISTINCT 用於返回唯一不同的值
SELECT DISTINCT 欄位名稱 FROM 表名稱


聚合函數
avg() 平均值
count() 總記錄數,不包括null
max() 最大值
min() 最小值
sum() 求和


時期函數
now()
curdate()
curtime()
unix_timestamp()
from_unixtime()

 

 

數學函數
ABS()絕對值
ceil() 向上取整
floor 向下取整
round() 四捨五入
rand() 隨機數
mod() 取餘


字元串函數
concat() 連接字元串
replace() 替換
ucase() 大寫
lcase() 小寫
ltrim() 去左側空格
rtrim() 去右側空格
trim() 去兩邊空格

 

 


加密函數
password()
md5()


信息函數
database() 當前資料庫
user() 當前用戶
version 當前mysql版本
last_insert_id() 最後一條插入記錄的主鍵id


多表插入
#將查詢到的記錄插入到已存在的表中
insert 表名(欄位列表) select 語句
insert brand(brand_name) select brand_name from goods group by brand_name;

#創建新表並將查詢到的記錄插入到新表中
create 表名[(
欄位名 數據類型 [約束],
............
)] select 語句 ;

create table category(
cid smallint unsigned key auto_increment
)
select cate_name from goods group by cate_name;

 

多表查詢
select 欄位列表 from 表1 [[as] 別名] 連接類型 表2 [[as] 別名] on 連接條件 where ......

連接類型
內連接 inner join
外聯接
左外連接 left [outer] join
右外連接 right [outer] join

#內連接:顯示左表及右表中符合連接條件的記錄
#左外連接:顯示左表全部記錄及右表中符合連接條件的記錄
#右外連接:顯示右表全部記錄及左表中符合連接條件的記錄


類似於內連接的多表查詢
select 欄位列表 from 表1,表2,表3...... where 連接條件1 and 連接條件2 .......

select id,goods_name,cate_name,brand_name,price from goods as g,brand as b,category as c where g.brand_id=b.bid and g.cate_id=c.cid;


比較操作符

 

like模糊查詢通配符
% 通配0個或多個字元 %李%
_ 通配一個字元
[abcdef] 通配字元列中的任何單一字元
[^abcdef] 通配不在字元列中的任何單一字元


邏輯操作符

 

MySQL數據類型
整型

int(10) unsigned zerofill //最大10位數字的無符號整數

浮點型

 

float[(總位數,小數點後位數)] 最大精確到小數點後7位
double[(總位數,小數點後位數)] 最大精確到小數點後15位
註:超過限定長度將進行四捨五入計算

字元型

 

布爾型
TRUE FALSE
日期型

 

實際開發當中,存儲日期時,我們一般使用整型來存儲時間戳,這樣做便於我們進行日期的計算

註意事項
CHAR的長度範圍在0~255之間
VARCHAR類型的長度範圍0~65535
在使用CHAR和VARCHAR類型時,當我們傳入的實際的值的長度大於指定的長度,字元串會被截取至指定長度
在使用CHAR類型時,如果我們傳入的值的長度小於指定長度,實際長度會使用空格補至指定長度
在使用VARCHAR類型時,如果我們傳入的值的長度小於指定長度,實際長度即為傳入字元串的長度,不會使用空格填補
CHAR要比VARCHAR效率更高,但占用空間較大
BLOB和TEXT類型是可以存放任意大數據的數據類型
BLOB區分大小寫,TEXT不區分大小寫
ENUM和SET類型是特殊的的串類型,其列值必須從固定的串集中選擇
ENUM只能選擇其中一個值,SET可以選擇多個值

約束
約束保證數據的完整性和一致性
約束分為表級約束和列級約束
約束類型包括
非空約束 not null
主鍵約束 primary key
唯一約束 unique key
預設約束 default
外鍵約束 foreign key

非空約束
空約束,欄位值允許為null
非空約束,欄位值不允許為null,必須賦值
#增加非空約束
create table mebmer(
username varchar(30) not null
);

 

自增長約束
必須與主鍵組合使用
預設情況下,起始值為1,增量為1
更改AUTO_INCREMENT初始值:
ALTER TABLE 表名稱 AUTO_INCREMENT=1

create table mebmer(
id int unsigned primary key auto_increment
);


主鍵約束
[primary] key
主鍵約束
每張表只能存在一個主鍵
主鍵必須保證記錄的唯一性
主鍵自動為not null
主鍵不必與自增長約束同時存在

create table mebmer(
id int unsigned auto_increment,
primary key (id)
);

 

預設約束
default
預設約束,當插入記錄時,如果沒有明確為欄位賦值,則自動賦予預設值
create table mebmer(
sex enum('male','female') default 'male'
);


外鍵約束
foreign key
外鍵約束
數據表的存儲引擎只能為InnoDB
外鍵列和參照列必須具有相似的數據類型
參照列必須存在索引
create table group(
id tinyint unsigned primary key auto_increment,
group varchar(20) unique not null
);
create table mebmer(
gid tinyint unsigned not null,
constraint member_group_key foreign key (gid) references group (id)
);


增加約束
#除外鍵約束外的其它約束
alter table 表名 change 欄位名 新欄位名 數據類型 約束
ALTER TABLE 表名 ADD UNIQUE/PRIMARY KEY(欄位名稱)
#外鍵約束
alter table 表名 add [constraint [約束名]] foreign key (外鍵欄位名) references 被參照表 (被參照欄位名)


刪除約束
#刪除唯一約束
ALTER TABLE 表名 DROP INDEX 欄位名
#刪除主鍵約束
ALTER TABLE 表名 DROP PRIMARY KEY
如果主鍵列存在自增長約束,刪除主鍵約束前必須先刪自增長約束
#刪除外鍵約束
ALTER TABLE 表名 DROP FOREIGN KEY 約束名
#刪除預設值
ALTER TABLE 表名 ALTER 欄位名 DROP DEFAULT;

 

done。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 系統環境及架構 在master和slave上分別進行資料庫的安裝 創建資料庫文件存放路徑 配置mysql配置文件 #在mysqlMaster上配置mysql配置文件 在mysqlSlave上配置mysql配置文件 #若是不寫上這個欄位,在本機用 命令 進入mysql會報錯,提示預設路徑/var/li ...
  • [學習筆記] 2.4 DataInputStream的用法 馬 克-to-win:DataInputStream顧名思義:就是專門用來讀各種各樣的數據的,比如(int,char,long等),一定要註意 DataOutputStream 與DataInputStream配合使用,而且二者讀寫的順序要 ...
  • into用法: DECLARE a NUMBER; b number; c number;BEGIN SELECT MAX(SAL),MIN(SAL),AVG(SAL) INTO A,B,C FROM EMP; DBMS_OUTPUT.PUT_LINE('最高工資:'|| a); DBMS_OUTP ...
  • 有時候我們會通過mongo shell 運行一些腳本,去執行更新或運維需求。mongo shell 可執行的代碼可以實現比較複雜的功能,代碼也可以比較豐富。當執行報錯時,如果可以快速定位到錯誤點,對解決bug, 可以事半功倍。 我們先測試一下: Case 1 簡單的向集合中插入一筆數據 執行代碼: ...
  • 進去root許可權(su) 1.從https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-bin.tar.gz獲取鏡像地址選擇版本下載(此處使用清華開源的Apache-hive1.2.2版本) wget ...
  • 一.首先解釋一下可能會查詢的基礎問題: 1.1db2 “with ur”是什麼意思: 在DB2中,共有四種隔離級:RS,RR,CS,UR.以下對四種隔離級進行一些描述,同時附上個人做試驗的結果。隔離級是影響加鎖策略的重要環節,它直接影響加鎖的範圍及鎖的持續時間。兩個應用程式即使執行的相同的操作,也可 ...
  • 請使用0.9以後的版本: 示例代碼 1、只需要配置kafka的server groupid autocommit 序列化 autooffsetreset(其中 bootstrap.server group.id key.deserializer value.deserializer 必須指定); 2 ...
  • https://www.cnblogs.com/wanglg/p/3740129.html 來自此文 僅做備忘 感謝提供信息讓我處理好此問題 sqlserver mdf向上相容附加資料庫(無法打開資料庫 'xxxxx' 版本 611。請將該資料庫升級為最新版本。) 最近工作中有一個sqlserver ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...