MySQL表和列、增刪改查語句及數(shù)據(jù)類型約束示例詳解
一、數(shù)據(jù)庫、表和列的基本概念
1.1 數(shù)據(jù)庫的概念與用途
數(shù)據(jù)庫是存儲在計算機上的有組織的數(shù)據(jù)集合,核心目的是實現(xiàn)數(shù)據(jù)的高效存儲、管理、訪問與更新,其主要用途體現(xiàn)在:
數(shù)據(jù)存儲和管理:可存儲結構化(表格)與非結構化(文本、圖片、視頻)等多種類型的海量數(shù)據(jù),實現(xiàn)數(shù)據(jù)的有序組織;
數(shù)據(jù)訪問:支持查詢、過濾、排序等高效操作,讓用戶快速檢索所需數(shù)據(jù);
數(shù)據(jù)共享:允許多個用戶同時訪問,實現(xiàn)團隊間的數(shù)據(jù)協(xié)作與共享;
數(shù)據(jù)分析和挖掘:提供統(tǒng)計分析、數(shù)據(jù)挖掘等能力,助力用戶從數(shù)據(jù)中提取價值,為決策提供支撐。
1.2 MySQL的層級關系與使用步驟
MySQL中存在清晰的層級關系:MySQL數(shù)據(jù)庫服務器 → 數(shù)據(jù)庫(DB) → 表 → 列,且層級間均為一對多關系,一個服務器可創(chuàng)建多個數(shù)據(jù)庫,一個數(shù)據(jù)庫可包含多張表,一張表由多個列(字段)組成。
使用MySQL的標準步驟為:登錄MySQL → 創(chuàng)建數(shù)據(jù)庫 → 切換到指定數(shù)據(jù)庫 → 創(chuàng)建表 → 使用表,所有表的操作都需先確定所屬的數(shù)據(jù)庫,這是MySQL操作的基礎原則。
二、數(shù)據(jù)庫與表的基礎操作
2.1 數(shù)據(jù)庫的創(chuàng)建、查看與刪除
(1)創(chuàng)建數(shù)據(jù)庫
-- 基礎創(chuàng)建 CREATE DATABASE [IF NOT EXISTS] 數(shù)據(jù)庫名; -- 指定字符集(推薦) CREATE DATABASE [IF NOT EXISTS] 數(shù)據(jù)庫名 DEFAULT CHARSET utf8;
(2)查看數(shù)據(jù)庫
-- 查看所有數(shù)據(jù)庫 SHOW DATABASES; -- 查看指定數(shù)據(jù)庫的創(chuàng)建語句(含字符集等配置) SHOW CREATE DATABASE 數(shù)據(jù)庫名;
(3)刪除數(shù)據(jù)庫
-- IF EXISTS避免刪除不存在的數(shù)據(jù)庫時報錯 DROP DATABASE [IF EXISTS] 數(shù)據(jù)庫名;
2.2 數(shù)據(jù)庫的切換與當前庫查看
-- 切換到指定數(shù)據(jù)庫(后續(xù)表操作均基于此庫) USE 數(shù)據(jù)庫名; -- 查看當前正在使用的數(shù)據(jù)庫 SELECT database();
2.3 表的創(chuàng)建、修改與刪除
(1)表的創(chuàng)建
創(chuàng)建表使用CREATE TABLE語句,需指定表名、列名、數(shù)據(jù)類型及約束,IF NOT EXISTS可選,用于避免重復創(chuàng)建。核心語法及示例:
CREATE TABLE [IF NOT EXISTS] 表名( 列名1 數(shù)據(jù)類型 [約束], 列名2 數(shù)據(jù)類型 [約束], ... ); -- 學生表創(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) );
補充:可通過LOAD DATA加載本地數(shù)據(jù)到表中,示例:
LOAD DATA local INFILE 'students.txt' INTO TABLE students FIELDS TERMINATED BY ',' ;
(2)表的修改
表的修改通過ALTER TABLE語句實現(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避免刪除不存在的表時報錯 DROP TABLE [IF NOT EXISTS ] students;
三、數(shù)據(jù)類型和約束
3.1 常見數(shù)據(jù)類型
MySQL的數(shù)據(jù)類型豐富,可滿足不同業(yè)務的數(shù)據(jù)存儲需求,核心分為數(shù)值類型、字符串類型、日期時間類型、二進制類型、枚舉類型、集合類型六大類,重點常用類型如下:
(1)數(shù)值類型
適用于存儲數(shù)字類數(shù)據(jù),包含整數(shù)和浮點數(shù),不同類型的存儲大小、取值范圍不同,需根據(jù)業(yè)務場景選擇:
類型 | 大小 | 范圍(有符號) | 范圍(無符號) | 用途 |
|---|---|---|---|---|
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) | 單精度浮點數(shù)值 |
DOUBLE | 8 Bytes | (-1.7976931348623157E+308,-2.2250738585072014E-308)、0、(2.2250738585072014E-308,1.7976931348623157E+308) | 0、(2.2250738585072014E-308,1.7976931348623157E+308) | 雙精度浮點數(shù)值 |
DECIMAL(M,D) | M+2/D+2 | 依賴M和D的值 | 依賴M和D的值 | 高精度小數(shù)值(價格、金額等) |
(2)字符串類型
適用于存儲文本類數(shù)據(jù),TEXT系列適用于長文本存儲:
類型 | 大小 | 用途 |
|---|---|---|
CHAR | 0-255 bytes | 定長字符串(性別、狀態(tài)等短固定長度數(shù)據(jù)) |
VARCHAR | 0-65535 bytes | 變長字符串(姓名、郵箱等長度不固定數(shù)據(jù)) |
TINYTEXT | 0-255 bytes | 短文本字符串 |
TEXT | 0-65535 bytes | 長文本數(shù)據(jù)(備注、詳情等) |
MEDIUMTEXT | 0-16777215 bytes | 中等長度文本數(shù)據(jù) |
LONGTEXT | 0-4294967295 bytes | 極大文本數(shù)據(jù) |
補充:UTF-8編碼下一個漢字占3個字節(jié),GBK編碼下一個漢字占2個字節(jié),定義字符串長度時需考慮編碼規(guī)則。 |
(3)日期和時間類型
適用于存儲時間相關數(shù)據(jù),不同類型對應不同的時間存儲粒度:
類型 | 大小 | 范圍 | 格式 | 用途 |
|---|---|---|---|---|
DATE | 3 bytes | 1000-01-01/9999-12-31 | YYYY-MM-DD | 僅存儲日期(生日、創(chuàng)建日期等) |
TIME | 3 bytes | -838:59:59/838:59:59 | HH:MM:SS | 時間值或持續(xù)時間 |
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 | 混合日期和時間值 |
TIMESTAMP | 4 bytes | 1970-01-01 00:00:01 UTC/2038-01-19 03:14:07 UTC | YYYY-MM-DD hh:mm:ss | 時間戳(自動更新時間優(yōu)選) |
3.2 常用約束規(guī)則
約束是對表中列數(shù)據(jù)的強制校驗規(guī)則,用于保證數(shù)據(jù)的規(guī)范性、完整性和唯一性,核心約束類型及作用如下:
主鍵約束(PRIMARY KEY):唯一標識表中的每一行數(shù)據(jù),主鍵列默認非空且唯一,可使用單列或多列組合作為一個主鍵;
唯一約束(UNIQUE):保證列中的所有值唯一,允許包含空值,一個表可定義多個唯一約束;
外鍵約束(FOREIGN KEY):相同的屬性列,定義表與表之間的關聯(lián)關系,保證引用完整性(如訂單表的產品ID關聯(lián)產品表的產品ID);
非空約束(NOT NULL):確保列中不包含空值,插入/修改數(shù)據(jù)時必須為該列賦值;
默認值約束(DEFAULT):插入新行時,若未指定該列值,則自動使用默認值;
檢查約束(CHECK):確保列中的值滿足特定條件(如年齡≥18)。
3.3 特殊屬性:AUTO_INCREMENT
這是MySQL特有的屬性,僅適用于INT、BIGINT等整型列,通常與主鍵約束配合使用,實現(xiàn)列值的自動遞增,每次插入新行時,該列會自動生成唯一值,無需手動賦值,是創(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') - 作用:限制該字段只能存儲枚舉列表中指定的值(多選一),無法插入列表外的任何內容,強制數(shù)據(jù)規(guī)范性。
四、SQL語言基礎
4.1 SQL語言簡介
SQL的核心功能分為四大類:查詢、操縱、定義、控制關系型數(shù)據(jù)庫,對應的語言分類為DQL、DML、DDL、DCL,是MySQL操作的核心語法體系。
4.2 SQL語言四大分類
SQL按功能可分為四大類,各類別的核心作用、關鍵字及典型操作不同,是掌握SQL的基礎框架,具體如下:
分類 | 核心作用 | 核心關鍵字 | 典型操作 |
|---|---|---|---|
DDL(數(shù)據(jù)定義語言) | 定義/修改/刪除數(shù)據(jù)庫對象(表、索引、視圖等)的結構 | CREATE、ALTER、DROP、RENAME、TRUNCATE | 建庫、建表、修改表結構、刪表 |
DML(數(shù)據(jù)操作語言) | 增/刪/改數(shù)據(jù)庫表中的數(shù)據(jù)內容(不改變表結構) | INSERT、UPDATE、DELETE、MERGE | 新增記錄、修改數(shù)據(jù)、刪除記錄 |
DCL(數(shù)據(jù)控制語言) | 管理數(shù)據(jù)庫權限、控制事務 | GRANT、REVOKE、COMMIT、ROLLBACK | 授權、撤銷權限、提交/回滾事務 |
DQL(數(shù)據(jù)查詢語言) | 從數(shù)據(jù)庫中查詢/檢索數(shù)據(jù)(僅讀取,不修改數(shù)據(jù)) | SELECT、FROM、WHERE、GROUP BY、ORDER BY | 單表查詢、多表查詢、數(shù)據(jù)統(tǒng)計 |
- 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:指定查詢的篩選條件。
基礎示例:
-- 查詢學生表中所有男生的記錄 select * from student where sex='男';
高級查詢擴展:
模糊查詢(LIKE):
%代表任意字符,_代表單個字符
-- 查詢班級以“文科”開頭的學生 SELECT * FROM students WHERE clazz LIKE '文科%';
2.范圍查詢(IN/BETWEEN AND)
-- 查詢文科一班、二班、三班的學生
select * from students where clazz in ('文科一班','文科二班','文科三班');
-- 查詢年齡在22到24之間的學生
select * from students where age BETWEEN 22 AND 24;3.排序(ORDER BY):ASC升序(默認),DESC降序
-- 按年齡降序查詢學生 SELECT * FROM students ORDER BY age DESC;
4. 分組(GROUP BY)+ 聚合函數(shù):聚合函數(shù)包括COUNT(計數(shù))、SUM(求和)、AVG(平均值)等,用于分組統(tǒng)計
-- 按性別分組,統(tǒng)計每組學生數(shù)量 SELECT gender, COUNT(*) FROM students GROUP BY gender;
5.分組篩選(HAVING):對GROUP BY的統(tǒng)計結果進行篩選(區(qū)別于WHERE:WHERE篩選原始數(shù)據(jù),HAVING篩選分組結果)
-- 按班級分組,統(tǒng)計學生數(shù)大于20的班級 SELECT clazz, COUNT(*) FROM students GROUP BY clazz HAVING COUNT(*) > 20;
6.分頁查詢(LIMIT/OFFSET):限制查詢結果的行數(shù),實現(xiàn)分頁
-- 查詢前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ù)量、類型必須一一對應,非空約束的列必須賦值。
(2)UPDATE(修改數(shù)據(jù))
用于修改表中已有的記錄,核心語法:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE some_column = some_value;
關鍵注意:WHERE some_column = some_value:指定修改數(shù)據(jù)的篩選條件,僅修改滿足條件的記錄。條件支持多種寫法(如>、<、!=、AND、OR等)
(3)DELETE(刪除數(shù)據(jù))
用于刪除表中的記錄,核心語法:
DELETE FROM table_name WHERE some_column = some_value;
關鍵注意:① 必須加WHERE子句,否則刪除表中所有數(shù)據(jù);② DELETE是DML操作,刪除的數(shù)據(jù)可通過事務回滾恢復,與TRUNCATE(DDL操作,不可回滾)不同。
4.3.3 DCL:數(shù)據(jù)控制語言
權限管理
-- 授予用戶test對users表的查詢和插入權限 GRANT SELECT, INSERT ON users TO 'test'@'localhost'; -- 撤銷test用戶的插入權限 REVOKE INSERT ON users FROM 'test'@'localhost';
2.事務控制
-- 開啟事務(部分數(shù)據(jù)庫需顯式聲明) START TRANSACTION; -- 設置保存點 SAVEPOINT sp1; -- 回滾到保存點(僅撤銷刪除操作,修改操作保留) ROLLBACK TO sp1; -- 提交最終修改 COMMIT;
總結
到此這篇關于MySQL表和列、增刪改查語句及數(shù)據(jù)類型約束的文章就介紹到這了,更多相關MySQL表和列、增刪改查及數(shù)據(jù)類型約束內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MySQL使用innobackupex備份連接服務器失敗的解決方法
這篇文章主要為大家詳細介紹了MySQL使用innobackupex備份連接服務器失敗的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02
簡單了解MYSQL數(shù)據(jù)庫優(yōu)化階段
這篇文章主要介紹了簡單了解MYSQL數(shù)據(jù)庫優(yōu)化階段,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-04-04
mysql workbench 設置外鍵的方法實現(xiàn)
在MySQL Workbench中設置外鍵屬性是非常方便的,本文就來介紹一下mysql workbench 設置外鍵的方法實現(xiàn),具有一定能的參考價值,感興趣的可以了解一下2024-01-01

