數據庫10:MySQL的數據類型與約束和屬性設置,數據模式

一.數據類型

整數類型(integer types)

數據類型字節有符號范圍無符號范圍說明
tinyint1-128 ~ 1270 ~ 255非常小的整數
smallint2-32,768 ~ 32,7670 ~ 65,535小整數
mediumint3-8,388,608 ~ 8,388,6070 ~ 16,777,215中等整數
int4-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,295常用整數
bigint8±9.2 × 101?0 ~ 18,446,744,073,709,551,615大整數

浮點類型(floating point types)

數據類型字節精度說明說明
float(m,d)4約 7 位有效數字單精度浮點,非精確計算
double(m,d)8約 15~16 位有效數字雙精度浮點,非精確計算
decimal(m,d)可變精確小數,m=總位數,d=小數精確計算,適合貨幣金額

字符串類型(string types)

數據類型存儲大小最大長度說明
char(n)固定 n 字節0 ~ 255字符固定長度,適合狀態等字段
varchar(n)可變 + 1~2 字節理論上最大65535字符可變長度,常用文本字段
tinytext最多 255 字節很短的文本
text最多 64kb中等長度文本,不能索引全部
mediumtext最多 16mb較長文本
longtext最多 4gb超長文本
blob同上(binary)存儲二進制數據(圖片等)

1.char(n)若存入字符數小于n,則以空格補于其后,查詢之時再將空格去掉。所以char類型存儲的字符串末尾不能有空格,varchar不限于此

2.char(n)固定長度,char(4)不管存入幾個字符,都將占用4個字節,varchar是存入的實際字符數+1個字節(n<=255)或2個字節(n>255),所以varchar(4)存入三個字符將占用4個字節

3.char類型的字符串檢索速度要比varchar類型的快

日期時間類型(date and time types)

數據類型格式范圍說明
date'yyyy-mm-dd'1000-01-01 ~ 9999-12-31僅日期
time'hh:mm:ss'-838:59:59 ~ 838:59:59僅時間
datetime'yyyy-mm-dd hh:mm:ss'1000-01-01 ~ 9999-12-31日期 + 時間
timestamp同上1970-01-01 ~ 2038-01-19(utc)自動時區轉換
year'yyyy'1901 ~ 2155表示年份字段

若定義一個字段為timestamp,這個字段里的時間數據會隨其他字段修改的時候自動刷新,所以這個數據類型的字段可以存放這條記錄最后被修改的時間

特殊類型(enum, set)

數據類型說明
enum('a','b',...)枚舉值,只能選擇一個
set('a','b',...)集合值,可以選擇多個,最多 64 項

說明補充:

  • 所有整數類型可加 unsigned 表示無符號。

  • decimal 是精確存儲,float/double 是近似計算,避免用于金額。

  • char 定長,varchar 變長,text 不支持全文索引默認值。

  • timestamp 會受當前時區影響,datetime 不會。

二.約束和屬性設置(約束用戶輸入的信息)

表結構設計應同時考慮:數據類型 + 約束 + 屬性

約束(用于限制表中數據的合法性,保證數據的一致性和完整性)

簡寫全稱關鍵字作用說明
PKprimary keyprimary key主鍵約束,唯一且非空。表中只能有一個。自動建立唯一索引,常用于 id 字段
UKunique keyunique唯一約束,字段值必須唯一但可為 null。可以有多個字段設置唯一約束
NNnot nullnot null非空約束,字段值不能為 null
FKforeign keyforeign key外鍵約束,強制當前字段值必須引用另一個表的主鍵,保證參照完整性,協調多個表

屬性(字段屬性,用于控制字段的行為或輔助信息,它們與約束協同定義字段語義與邏輯)

屬性作用說明示例語法
default設置字段默認值,當插入數據時未指定該字段則使用此值age int default 18
auto_increment自動增長,字段值會自動遞增,常用于主鍵id int primary key auto_increment
comment字段注釋,僅供開發者查看,不影響數據或邏輯username varchar(50) comment '用戶名'
unsigned無符號整數,表示該字段不能為負數,適用于數值類型price int unsigned

外鍵:也稱外鍵約束,外面的鍵,對數據進行約束,一張表的一個字段指向另一個表的主鍵,那么該字段就稱為外鍵

外鍵所在的表稱之為子表(附表);外鍵所指向的主鍵所在的表稱之為父表(主表)

設置外鍵

實現將一個表的字段與另一個表的主鍵進行關聯

添加外鍵

1.在創建表的時候就增加外鍵:在表字段之后使用foreign key

語法格式:foreign key(外鍵字段) references 主表(主鍵);

創建外鍵關聯的父表

create table class(

id int primary key auto_increment,

name varchar(10) not null comment "班級姓名,不能為空",

room varchar(10) comment '教室:允許為空'

) charset utf8;

創建子表使用外鍵

create table student(

id int primary key auto_increment,

number char(10) not null unique comment "學號:不能重復0",

name varchar(10) not null comment "姓名",

c_id int,

foreign key(c_id) references class(id)

) charset utf8;

--增加外鍵:c_id是外鍵字段,class是引用表(父表),id是引用字段(主鍵)

查看數據表student的結構信息

desc student;

describe student;

PRI稱為主鍵索引,MUL稱為輔助索引

顯示創建表student的完整 SQL 語句,包括字段定義、主鍵、外鍵、默認值、注釋、索引、字符集、存儲引擎等信息。

show create table student;

自動生成了外鍵名

2.再創建表之后增加外鍵:指定外鍵名字

創建外鍵語法格式

alter table 表名 add constraint 外鍵名 foreign key(外鍵字段) references 父表(主鍵字段)

創建沒有外鍵信息的表

create table t_foreign(

id int primary key auto_increment,

c_id int

)charset utf8;

此時表中(t_foreign)沒有創建外鍵

在沒有外鍵的表中添加外鍵

alter table t_foreign add constraint class_foreign foreign key(c_id) references class(id);

此時有了外鍵信息

外鍵增加條件:外鍵字段必須與引用表(父表主鍵)的數據類型嚴格保持一致

刪除外鍵

刪除外鍵語法格式:alter table 表名 drop foreign key 外鍵名;

刪除表(t_foreign)中的外鍵信息

alter table t_foreign drop foreign key class_foreign;

刪除外鍵之后僅是把約束刪掉了,但索引不會被刪除

查看外鍵是否被刪除

show create table t_foreign;

可以看到沒有創建外鍵的信息了,外鍵的約束確實被刪除了

查看外鍵

desc t_foreign;

show create table t_foreign;

外鍵作用說明

約束1:外鍵對子表的數據寫操作學術(增加和更新)

如果子表中插入的數據所對應的外鍵在父表中不存在,創建不能成功

因此一旦建立外鍵關系,一定先添加父表,然后操作子表

約束2:外鍵對父表的數據約束

當父表操作一個記錄,但是該記錄被子表所引用的時候,那么父表的操作將會被限制(更新:主鍵和刪除)

無法刪除父表(class)中id=1的字段,因為已被子表引用。但當刪除子表的引用后,父表可以成功刪除

數據模式

SQL_mode(SQL模式):保證數據錄入合理性

例如:日期不能出現0000-00-00信息,月份只能是1-12,日期只能是1-31,一旦違反常識便會報錯

例如:在進行數據運算時(select 1+1;),除法運算的除數不能為0

例如:當定義數據類型為char(10),不能超過字符長度,超過長度就報錯

例如:設置only_full_group_by(5.7以后的特性),禁止進行分組查詢時,出現聚合信息1對多的顯示輸出

獲取SQLmode設置的默認信息:

select @@sql_mode;

常見 SQL_MODE 模式解釋

模式名含義
STRICT_TRANS_TABLES嚴格模式:插入無效數據(如超長字符串、非法數值)時報錯(針對事務表)
STRICT_ALL_TABLES嚴格模式:所有表(包括非事務表)都嚴格校驗
ONLY_FULL_GROUP_BY使用 GROUP BY 時必須顯示分組的字段,避免不確定聚合行為
NO_ZERO_IN_DATE禁止日期中出現 “00” 月或日(如 2025-00-01
NO_ZERO_DATE不允許將 0000-00-00 作為合法日期插入
ERROR_FOR_DIVISION_BY_ZERO遇到除以零時報錯,而不是返回 NULL
NO_ENGINE_SUBSTITUTION如果指定的存儲引擎不可用則報錯(否則用默認引擎替代)
ANSI_QUOTES" 識別為標識符(列名/表名),而不是字符串引號

注意:在數據遷移時(低版本遷移到高版本),需要關閉SQL_mode

臨時關閉SQLmode(設置SQLmode為空)

set global sql_mode='';

退出數據庫后然后重新進入

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

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

相關文章

uniapp項目中node_modules\sass\sass.dart.js的體積過大怎么處理

用Node-Sass替代&#xff08;如果適用&#xff09;&#xff1a;雖然Dart Sass是Sass的主要實現之一&#xff0c;但有時它可能會比Node-Sass占用更多的空間。如果你不需要Dart Sass特有的功能&#xff0c;可以考慮切換到Node-Sass&#xff08;注意Node-Sass已停止維護&#xff0…

界面組件DevExpress WPF中文教程:Grid - 如何獲取節點?

DevExpress WPF擁有120個控件和庫&#xff0c;將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序&#xff0c;這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件…

Kalibr解毒填坑(一):相機標定失敗

文章目錄 ??簡介?? 解毒踩坑?? 主點錯誤??簡介 相機內參標定通常涉及確定焦距(fx, fy)、主點(cx, cy)、畸變系數(徑向和切向)等參數。Kalibr是一個開源的標定工具,支持多相機、IMU和聯合標定,適用于復雜的傳感器系統。 但kalibar標定相機內參受到數據和配置影…

Swift 的基礎設計哲學是 “通過模塊化組合實現安全與效率的平衡“,就像用標準化工業零件建造摩天大樓

一、基礎模塊&#xff1a;地基與鋼結構&#xff08;Basic Types & Collections&#xff09; 比喻&#xff1a;積木與工具箱&#xff0c;決定建筑的穩定性和容量。場景&#xff1a;搭建程序的基礎結構&#xff0c;如變量、數據類型、運算符。包含&#xff1a;基本語法、運算…

【RK3568+PG2L50H開發板實驗例程】Linux部分/FPGA dma_memcpy_demo 讀寫案例

本原創文章由深圳市小眼睛科技有限公司創作&#xff0c;版權歸本公司所有&#xff0c;如需轉載&#xff0c;需授權并注明出處&#xff08;www.meyesemi.com) 1.案例簡介 案例功能描述&#xff1a;ARM端利用 PCIe總線對 FPGA的 DRAM執行讀寫操作。應用程序通過 ioctl函數觸發 …

7.3實驗部分

一、HDFS基礎操作 以root用戶登錄&#xff0c;創建如下HDFS目錄&#xff1a; /dw/yourname/input hadoop fs -mkdir -p /dw/zhanggengchen/input /dw/yourname/output hadoop fs -mkdir -p /dw/zhanggengchen/output 輸出結果&#xff1a; [rootmaster hadoop-mapreduce]# ha…

[nett5: AddressedEnvelope]-源碼解析

AddressedEnvelope AddressedEnvelope<M, A> 表示一個帶有發送者和接收者地址的消息封裝&#xff0c;常用于處理如 UDP 數據報這類含地址信息的通信場景。 public interface AddressedEnvelope<M, A extends SocketAddress> {// 實際的消息內容M content();// 消…

基于 Drone CI 實現前端自動化打包并集成 Spug 自動發布流程

前言&#xff1a;代碼自動化部署目前使用的是Spug開源運維平臺&#xff0c;通過docker直接部署該平臺后&#xff0c;在前端自動化打包&#xff08;npm run build&#xff09;會遇見Node的版本問題&#xff0c;因為Spug容器使用的是Centos7&#xff0c;所以Node版本只支持V16&am…

【基礎】Golang語言開發環境搭建(Linux主機)

目錄 1. 下載并安裝Go語言2. 配置環境變量3. 驗證安裝4. 配置Go模塊5. 安裝常用開發工具6. 配置IDE&#xff08;可選&#xff09;7. 第一個Go程序 在Linux主機上搭建Golang開發環境&#xff0c;你可以按照以下步驟進行操作&#xff1a; 1. 下載并安裝Go語言 首先從官網下載Go…

MySQL安全加固:使用mysql_secure_installation

在安裝MySQL后&#xff0c;為了確保服務器的安全性&#xff0c;建議使用mysql_secure_installation工具對MySQL進行安全加固。這個工具可以幫助我們完成一些關鍵的安全配置&#xff0c;包括設置強密碼、移除匿名用戶、限制root用戶的遠程登錄以及清理默認的測試數據庫等。以下是…

設計模式之中介者模式 (Mediator Pattern) -聊天室-控制室

中介者模式用于減少多個對象之間的直接通信&#xff0c;而是通過一個中介對象來協調它們之間的交互。下面我用一個聊天室的例子來演示這個模式。 舉個栗子&#xff1a;聊天室系統 在這個系統中&#xff0c;用戶不直接相互發送消息&#xff0c;而是通過聊天室&#xff08;中介者…

SpringSecurity01

目錄 一、權限控制 二、相關框架 1、shiro 2、springsecurity 三、springsecurity使用流程 1、搭建環境實現默認用戶名和密碼登錄 2、使用數據庫表中定義好的用戶名和密碼訪問實現等值密碼匹配 1&#xff09;sql文件 2)搭建jdbc或者mybatis或者mybatis-plus環境 3&am…

解決git clone報錯:fatal unable to access xxx. Could not resolve host github.com

作者&#xff1a;唐叔在學習 專欄&#xff1a;問題百寶箱 文章目錄 問題描述問題診斷網絡連通性測試 解決方案1. 獲取GitHub最新IP地址2. 修改系統hosts文件 驗證解決方案常見問題解答總結 問題描述 當使用git clone命令克隆GitHub倉庫時&#xff0c;可能會遇到如下錯誤&#…

魔術方法__call__

__call__ 是一個特殊方法&#xff08;也稱為魔術方法&#xff09;&#xff0c;用于使一個類的實例能夠像函數一樣被調用。當定義了這個方法后&#xff0c;實例對象可以后接括號&#xff08;即 ()&#xff09;來觸發調用&#xff0c;這會讓實例表現得像函數一樣。 ?使實例可調…

PHP中的異常處理與錯誤日志記錄

在PHP編程實踐中&#xff0c;異常處理是一項至關重要的技能&#xff0c;它能夠幫助開發者識別和響應程序執行過程中發生的非預期事件。與此同時&#xff0c;錯誤日志記錄是確保應用程序可靠性和穩定性的關鍵組成部分。本文將詳細介紹如何在PHP中實現這兩個方面的技術。 首先&a…

JS去除空格(數組內字符串)

1.JS中去除空格 去除這個數組中每個對象內部參數&#xff08;也就是屬性值&#xff09;的空格&#xff0c;可以通過遍歷數組&#xff0c;再遍歷每個對象的屬性&#xff0c;使用 trim() 方法來去除字符串首尾的空格。以下是具體實現代碼&#xff1a; let data [{ designHours:…

【Spring篇01】:Bean的線程安全問題總結

文章目錄 1. 核心問題&#xff1a;Spring 框架中的 Bean 是線程安全的嗎&#xff1f;2. 最佳實踐與解決方案禁止方案&#xff1a;濫用prototype作用域推薦方案&#xff08;按優先級排序&#xff09; 3. 生產環境中的典型案例Case 1&#xff1a;訂單服務統計Case 2&#xff1a;用…

本地項目上傳git

將您本地的項目代碼上傳到一個私有的、別人看不見的 GitHub 倉庫&#xff0c;是進行云端協作&#xff08;如使用 Google Colab&#xff09;、版本控制和代碼備份的最佳實踐。這是一個非常重要的技能。 整個過程可以分為三個部分&#xff1a; 準備工作&#xff1a;在您的電腦上…

【.NET Framework 窗體應用程序項目結構介紹】

在使用 Visual Studio (VS) 開發 .NET Framework 窗體應用程序&#xff08;Windows Forms App&#xff09; 時&#xff0c;項目結構通常包含以下核心文件夾和文件。以下是詳細介紹&#xff1a; 1. 項目根目錄下的主要文件 (1) .csproj 文件 作用&#xff1a;C# 項目文件&…

【SpringAI】4.多模態提問

SpringAI多模態提問 概述 SpringAI支持多模態輸入&#xff0c;允許AI模型同時處理文本和圖像內容。這對于需要視覺理解的AI應用場景非常有用&#xff0c;如圖像描述、視覺問答、圖像分析等。 核心概念 1. Media類 SpringAI使用Media類來表示多模態內容&#xff0c;支持圖…