MySQL表和列、增刪改查語句及數(shù)據(jù)類型約束示例詳解
一、數(shù)據(jù)庫(kù)、表和列的基本概念
1.1 數(shù)據(jù)庫(kù)的概念與用途
數(shù)據(jù)庫(kù)是存儲(chǔ)在計(jì)算機(jī)上的有組織的數(shù)據(jù)集合,核心目的是實(shí)現(xiàn)數(shù)據(jù)的高效存儲(chǔ)、管理、訪問與更新,其主要用途體現(xiàn)在:
數(shù)據(jù)存儲(chǔ)和管理:可存儲(chǔ)結(jié)構(gòu)化(表格)與非結(jié)構(gòu)化(文本、圖片、視頻)等多種類型的海量數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)的有序組織;
數(shù)據(jù)訪問:支持查詢、過濾、排序等高效操作,讓用戶快速檢索所需數(shù)據(jù);
數(shù)據(jù)共享:允許多個(gè)用戶同時(shí)訪問,實(shí)現(xiàn)團(tuán)隊(duì)間的數(shù)據(jù)協(xié)作與共享;
數(shù)據(jù)分析和挖掘:提供統(tǒng)計(jì)分析、數(shù)據(jù)挖掘等能力,助力用戶從數(shù)據(jù)中提取價(jià)值,為決策提供支撐。
1.2 MySQL的層級(jí)關(guān)系與使用步驟
MySQL中存在清晰的層級(jí)關(guān)系:MySQL數(shù)據(jù)庫(kù)服務(wù)器 → 數(shù)據(jù)庫(kù)(DB) → 表 → 列,且層級(jí)間均為一對(duì)多關(guān)系,一個(gè)服務(wù)器可創(chuàng)建多個(gè)數(shù)據(jù)庫(kù),一個(gè)數(shù)據(jù)庫(kù)可包含多張表,一張表由多個(gè)列(字段)組成。
使用MySQL的標(biāo)準(zhǔn)步驟為:登錄MySQL → 創(chuàng)建數(shù)據(jù)庫(kù) → 切換到指定數(shù)據(jù)庫(kù) → 創(chuàng)建表 → 使用表,所有表的操作都需先確定所屬的數(shù)據(jù)庫(kù),這是MySQL操作的基礎(chǔ)原則。
二、數(shù)據(jù)庫(kù)與表的基礎(chǔ)操作
2.1 數(shù)據(jù)庫(kù)的創(chuàng)建、查看與刪除
(1)創(chuàng)建數(shù)據(jù)庫(kù)
-- 基礎(chǔ)創(chuàng)建 CREATE DATABASE [IF NOT EXISTS] 數(shù)據(jù)庫(kù)名; -- 指定字符集(推薦) CREATE DATABASE [IF NOT EXISTS] 數(shù)據(jù)庫(kù)名 DEFAULT CHARSET utf8;
(2)查看數(shù)據(jù)庫(kù)
-- 查看所有數(shù)據(jù)庫(kù) SHOW DATABASES; -- 查看指定數(shù)據(jù)庫(kù)的創(chuàng)建語句(含字符集等配置) SHOW CREATE DATABASE 數(shù)據(jù)庫(kù)名;
(3)刪除數(shù)據(jù)庫(kù)
-- IF EXISTS避免刪除不存在的數(shù)據(jù)庫(kù)時(shí)報(bào)錯(cuò) DROP DATABASE [IF EXISTS] 數(shù)據(jù)庫(kù)名;
2.2 數(shù)據(jù)庫(kù)的切換與當(dāng)前庫(kù)查看
-- 切換到指定數(shù)據(jù)庫(kù)(后續(xù)表操作均基于此庫(kù)) USE 數(shù)據(jù)庫(kù)名; -- 查看當(dāng)前正在使用的數(shù)據(jù)庫(kù) SELECT database();
2.3 表的創(chuàng)建、修改與刪除
(1)表的創(chuàng)建
創(chuàng)建表使用CREATE TABLE語句,需指定表名、列名、數(shù)據(jù)類型及約束,IF NOT EXISTS可選,用于避免重復(fù)創(chuàng)建。核心語法及示例:
CREATE TABLE [IF NOT EXISTS] 表名( 列名1 數(shù)據(jù)類型 [約束], 列名2 數(shù)據(jù)類型 [約束], ... ); -- 學(xué)生表創(chuàng)建示例 CREATE TABLE [IF NOT EXISTS] students( id VARCHAR(255) PRIMARY KEY, name VARCHAR(255) NOT NULL, age INT, gender VARCHAR(255), clazz VARCHAR(255) );
補(bǔ)充:可通過LOAD DATA加載本地?cái)?shù)據(jù)到表中,示例:
LOAD DATA local INFILE 'students.txt' INTO TABLE students FIELDS TERMINATED BY ',' ;
(2)表的修改
表的修改通過ALTER TABLE語句實(shí)現(xiàn),支持追加列、修改列屬性、重命名列/表、修改字符集、刪除列等操作,核心用法:
-- 增加列 alter table students add length float; -- 修改列類型/屬性 alter table students modify length int not null; -- 修改表名 rename table students to student; -- 修改列名 alter table student change id sid varchar(255); -- 修改表的字符集 alter table student character set utf8; -- 刪除列 alter table students drop length;
(3)表的刪除
-- IF NOT EXISTS避免刪除不存在的表時(shí)報(bào)錯(cuò) DROP TABLE [IF NOT EXISTS ] students;
三、數(shù)據(jù)類型和約束
3.1 常見數(shù)據(jù)類型
MySQL的數(shù)據(jù)類型豐富,可滿足不同業(yè)務(wù)的數(shù)據(jù)存儲(chǔ)需求,核心分為數(shù)值類型、字符串類型、日期時(shí)間類型、二進(jìn)制類型、枚舉類型、集合類型六大類,重點(diǎn)常用類型如下:
(1)數(shù)值類型
適用于存儲(chǔ)數(shù)字類數(shù)據(jù),包含整數(shù)和浮點(diǎn)數(shù),不同類型的存儲(chǔ)大小、取值范圍不同,需根據(jù)業(yè)務(wù)場(chǎng)景選擇:
類型 | 大小 | 范圍(有符號(hào)) | 范圍(無符號(hào)) | 用途 |
|---|---|---|---|---|
TINYINT | 1 Bytes | (-128,127) | (0,255) | 小整數(shù)值 |
SMALLINT | 2 Bytes | (-32768,32767) | (0,65535) | 大整數(shù)值 |
MEDIUMINT | 3 Bytes | (-8388608,8388607) | (0,16777215) | 大整數(shù)值 |
INT/INTEGER | 4 Bytes | (-2147483648,2147483647) | (0,4294967295) | 常用整數(shù)值(ID、年齡等) |
BIGINT | 8 Bytes | (-9223372036854775808,9223372036854775807) | (0,18446744073709551615) | 極大整數(shù)值 |
FLOAT | 4 Bytes | (-3.402823466E+38,-1.175494351E-38)、0、(1.175494351E-38,3.402823466351E+38) | 0、(1.175494351E-38,3.402823466E+38) | 單精度浮點(diǎn)數(shù)值 |
DOUBLE | 8 Bytes | (-1.7976931348623157E+308,-2.2250738585072014E-308)、0、(2.2250738585072014E-308,1.7976931348623157E+308) | 0、(2.2250738585072014E-308,1.7976931348623157E+308) | 雙精度浮點(diǎn)數(shù)值 |
DECIMAL(M,D) | M+2/D+2 | 依賴M和D的值 | 依賴M和D的值 | 高精度小數(shù)值(價(jià)格、金額等) |
(2)字符串類型
適用于存儲(chǔ)文本類數(shù)據(jù),TEXT系列適用于長(zhǎng)文本存儲(chǔ):
類型 | 大小 | 用途 |
|---|---|---|
CHAR | 0-255 bytes | 定長(zhǎng)字符串(性別、狀態(tài)等短固定長(zhǎng)度數(shù)據(jù)) |
VARCHAR | 0-65535 bytes | 變長(zhǎng)字符串(姓名、郵箱等長(zhǎng)度不固定數(shù)據(jù)) |
TINYTEXT | 0-255 bytes | 短文本字符串 |
TEXT | 0-65535 bytes | 長(zhǎng)文本數(shù)據(jù)(備注、詳情等) |
MEDIUMTEXT | 0-16777215 bytes | 中等長(zhǎng)度文本數(shù)據(jù) |
LONGTEXT | 0-4294967295 bytes | 極大文本數(shù)據(jù) |
補(bǔ)充:UTF-8編碼下一個(gè)漢字占3個(gè)字節(jié),GBK編碼下一個(gè)漢字占2個(gè)字節(jié),定義字符串長(zhǎng)度時(shí)需考慮編碼規(guī)則。 |
(3)日期和時(shí)間類型
適用于存儲(chǔ)時(shí)間相關(guān)數(shù)據(jù),不同類型對(duì)應(yīng)不同的時(shí)間存儲(chǔ)粒度:
類型 | 大小 | 范圍 | 格式 | 用途 |
|---|---|---|---|---|
DATE | 3 bytes | 1000-01-01/9999-12-31 | YYYY-MM-DD | 僅存儲(chǔ)日期(生日、創(chuàng)建日期等) |
TIME | 3 bytes | -838:59:59/838:59:59 | HH:MM:SS | 時(shí)間值或持續(xù)時(shí)間 |
YEAR | 1 byte | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 bytes | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD hh:mm:ss | 混合日期和時(shí)間值 |
TIMESTAMP | 4 bytes | 1970-01-01 00:00:01 UTC/2038-01-19 03:14:07 UTC | YYYY-MM-DD hh:mm:ss | 時(shí)間戳(自動(dòng)更新時(shí)間優(yōu)選) |
3.2 常用約束規(guī)則
約束是對(duì)表中列數(shù)據(jù)的強(qiáng)制校驗(yàn)規(guī)則,用于保證數(shù)據(jù)的規(guī)范性、完整性和唯一性,核心約束類型及作用如下:
主鍵約束(PRIMARY KEY):唯一標(biāo)識(shí)表中的每一行數(shù)據(jù),主鍵列默認(rèn)非空且唯一,可使用單列或多列組合作為一個(gè)主鍵;
唯一約束(UNIQUE):保證列中的所有值唯一,允許包含空值,一個(gè)表可定義多個(gè)唯一約束;
外鍵約束(FOREIGN KEY):相同的屬性列,定義表與表之間的關(guān)聯(lián)關(guān)系,保證引用完整性(如訂單表的產(chǎn)品ID關(guān)聯(lián)產(chǎn)品表的產(chǎn)品ID);
非空約束(NOT NULL):確保列中不包含空值,插入/修改數(shù)據(jù)時(shí)必須為該列賦值;
默認(rèn)值約束(DEFAULT):插入新行時(shí),若未指定該列值,則自動(dòng)使用默認(rèn)值;
檢查約束(CHECK):確保列中的值滿足特定條件(如年齡≥18)。
3.3 特殊屬性:AUTO_INCREMENT
這是MySQL特有的屬性,僅適用于INT、BIGINT等整型列,通常與主鍵約束配合使用,實(shí)現(xiàn)列值的自動(dòng)遞增,每次插入新行時(shí),該列會(huì)自動(dòng)生成唯一值,無需手動(dòng)賦值,是創(chuàng)建自增ID的核心屬性,示例:
CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT );
3.4 數(shù)據(jù)類型+約束綜合建表示例
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
password VARCHAR(100) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
age INT CHECK(age >= 18),
address TEXT,
role ENUM('admin', 'user') DEFAULT 'user'
);枚舉類型(ENUM)
- 語法格式:
字段名 ENUM('值1', '值2', ..., '值n') - 作用:限制該字段只能存儲(chǔ)枚舉列表中指定的值(多選一),無法插入列表外的任何內(nèi)容,強(qiáng)制數(shù)據(jù)規(guī)范性。
四、SQL語言基礎(chǔ)
4.1 SQL語言簡(jiǎn)介
SQL的核心功能分為四大類:查詢、操縱、定義、控制關(guān)系型數(shù)據(jù)庫(kù),對(duì)應(yīng)的語言分類為DQL、DML、DDL、DCL,是MySQL操作的核心語法體系。
4.2 SQL語言四大分類
SQL按功能可分為四大類,各類別的核心作用、關(guān)鍵字及典型操作不同,是掌握SQL的基礎(chǔ)框架,具體如下:
分類 | 核心作用 | 核心關(guān)鍵字 | 典型操作 |
|---|---|---|---|
DDL(數(shù)據(jù)定義語言) | 定義/修改/刪除數(shù)據(jù)庫(kù)對(duì)象(表、索引、視圖等)的結(jié)構(gòu) | CREATE、ALTER、DROP、RENAME、TRUNCATE | 建庫(kù)、建表、修改表結(jié)構(gòu)、刪表 |
DML(數(shù)據(jù)操作語言) | 增/刪/改數(shù)據(jù)庫(kù)表中的數(shù)據(jù)內(nèi)容(不改變表結(jié)構(gòu)) | INSERT、UPDATE、DELETE、MERGE | 新增記錄、修改數(shù)據(jù)、刪除記錄 |
DCL(數(shù)據(jù)控制語言) | 管理數(shù)據(jù)庫(kù)權(quán)限、控制事務(wù) | GRANT、REVOKE、COMMIT、ROLLBACK | 授權(quán)、撤銷權(quán)限、提交/回滾事務(wù) |
DQL(數(shù)據(jù)查詢語言) | 從數(shù)據(jù)庫(kù)中查詢/檢索數(shù)據(jù)(僅讀取,不修改數(shù)據(jù)) | SELECT、FROM、WHERE、GROUP BY、ORDER BY | 單表查詢、多表查詢、數(shù)據(jù)統(tǒng)計(jì) |
- TRUNCATE 操作不可回滾,drop可回滾
4.3 核心SQL語句詳解
4.3.1 DQL:數(shù)據(jù)查詢語言(SELECT)
SELECT是最常用的SQL語句,用于從表中檢索數(shù)據(jù),核心語法為:
SELECT column1, column2, ... FROM table_name WHERE condition;
column1, column2:指定要查詢的列,*代表查詢所有列;FROM table_name:指定要查詢的表;WHERE condition:指定查詢的篩選條件。
基礎(chǔ)示例:
-- 查詢學(xué)生表中所有男生的記錄 select * from student where sex='男';
高級(jí)查詢擴(kuò)展:
模糊查詢(LIKE):
%代表任意字符,_代表單個(gè)字符
-- 查詢班級(jí)以“文科”開頭的學(xué)生 SELECT * FROM students WHERE clazz LIKE '文科%';
2.范圍查詢(IN/BETWEEN AND)
-- 查詢文科一班、二班、三班的學(xué)生
select * from students where clazz in ('文科一班','文科二班','文科三班');
-- 查詢年齡在22到24之間的學(xué)生
select * from students where age BETWEEN 22 AND 24;3.排序(ORDER BY):ASC升序(默認(rèn)),DESC降序
-- 按年齡降序查詢學(xué)生 SELECT * FROM students ORDER BY age DESC;
4. 分組(GROUP BY)+ 聚合函數(shù):聚合函數(shù)包括COUNT(計(jì)數(shù))、SUM(求和)、AVG(平均值)等,用于分組統(tǒng)計(jì)
-- 按性別分組,統(tǒng)計(jì)每組學(xué)生數(shù)量 SELECT gender, COUNT(*) FROM students GROUP BY gender;
5.分組篩選(HAVING):對(duì)GROUP BY的統(tǒng)計(jì)結(jié)果進(jìn)行篩選(區(qū)別于WHERE:WHERE篩選原始數(shù)據(jù),HAVING篩選分組結(jié)果)
-- 按班級(jí)分組,統(tǒng)計(jì)學(xué)生數(shù)大于20的班級(jí) SELECT clazz, COUNT(*) FROM students GROUP BY clazz HAVING COUNT(*) > 20;
6.分頁(yè)查詢(LIMIT/OFFSET):限制查詢結(jié)果的行數(shù),實(shí)現(xiàn)分頁(yè)
-- 查詢前10條記錄 SELECT * FROM students LIMIT 10; -- 從第5條開始,查詢10條記錄(OFFSET為偏移量,從0開始) SELECT * FROM students LIMIT 10 OFFSET 4;
4.3.2 DML:數(shù)據(jù)操作語言
(1)INSERT(新增數(shù)據(jù))
用于向表中插入新的記錄,核心語法:
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
注意:列名與值的數(shù)量、類型必須一一對(duì)應(yīng),非空約束的列必須賦值。
(2)UPDATE(修改數(shù)據(jù))
用于修改表中已有的記錄,核心語法:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE some_column = some_value;
關(guān)鍵注意:WHERE some_column = some_value:指定修改數(shù)據(jù)的篩選條件,僅修改滿足條件的記錄。條件支持多種寫法(如>、<、!=、AND、OR等)
(3)DELETE(刪除數(shù)據(jù))
用于刪除表中的記錄,核心語法:
DELETE FROM table_name WHERE some_column = some_value;
關(guān)鍵注意:① 必須加WHERE子句,否則刪除表中所有數(shù)據(jù);② DELETE是DML操作,刪除的數(shù)據(jù)可通過事務(wù)回滾恢復(fù),與TRUNCATE(DDL操作,不可回滾)不同。
4.3.3 DCL:數(shù)據(jù)控制語言
權(quán)限管理
-- 授予用戶test對(duì)users表的查詢和插入權(quán)限 GRANT SELECT, INSERT ON users TO 'test'@'localhost'; -- 撤銷test用戶的插入權(quán)限 REVOKE INSERT ON users FROM 'test'@'localhost';
2.事務(wù)控制
-- 開啟事務(wù)(部分?jǐn)?shù)據(jù)庫(kù)需顯式聲明) START TRANSACTION; -- 設(shè)置保存點(diǎn) SAVEPOINT sp1; -- 回滾到保存點(diǎn)(僅撤銷刪除操作,修改操作保留) ROLLBACK TO sp1; -- 提交最終修改 COMMIT;
總結(jié)
到此這篇關(guān)于MySQL表和列、增刪改查語句及數(shù)據(jù)類型約束的文章就介紹到這了,更多相關(guān)MySQL表和列、增刪改查及數(shù)據(jù)類型約束內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL?優(yōu)化?index?merge引起的死鎖分析
這篇文章主要介紹了MySQL?優(yōu)化?index?merge引起的死鎖分析,MySQL通過優(yōu)化索引合并是遇到的死鎖問題,下面具體分析需要的小伙伴可以參考一下2022-04-04
詳細(xì)深入聊一聊Mysql中的int(1)和int(11)
mysql數(shù)據(jù)庫(kù)作為當(dāng)前常用的關(guān)系型數(shù)據(jù)庫(kù),肯定會(huì)遇到設(shè)計(jì)表的需求,下面對(duì)設(shè)計(jì)表時(shí)int類型的設(shè)置進(jìn)行分析,下面這篇文章主要給大家介紹了關(guān)于Mysql中int(1)和int(11)的相關(guān)資料,需要的朋友可以參考下2022-08-08
MySQL性能優(yōu)化神器Explain的基本使用分析
這篇文章主要給大家介紹了關(guān)于MySQL性能優(yōu)化神器Explain的基本使用分析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
sql語句 update字段null不能用is null問題
這篇文章主要介紹了sql語句 update字段null不能用is null問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
mysql中modify ,change ,rename to的作用和使用場(chǎng)景
在MySQL中,MODIFY、CHANGE 和 RENAME TO都是 ALTER TABLE 語句的一部分,用于修改表的結(jié)構(gòu),但它們的作用和使用場(chǎng)景有所不同,下面給大家介紹mysql中modify ,change ,rename to的作用和使用場(chǎng)景,感興趣的朋友一起看看吧2025-08-08
mysql 8.0.15 下載安裝詳細(xì)教程 新手必備!
這篇文章主要為大家詳細(xì)介紹了mysql 8.0.15 下載安裝詳細(xì)教程,純新手教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03
mysql 5.7.21 winx64免安裝版配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了mysql 5.7.21 winx64免安裝版配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02

