摘要:代表數據管理系統,是一種系統軟件,提供操作數據庫的環境,如,可以通過數據庫管理系統對數據進行增刪改查。命令服務啟動和停止連接和退出數據庫代表主機名,代表端口號,和分別代表當前服務的賬號和密碼。添加默認約束將表列的默認值設置為北京。
MySQL 是目前使用最廣泛的關系型數據庫,是在軟件開發中所必備的技能之一,這是關于 MySQL 的系列文章,將從 MySQL 的基本概念、基本使用、SQL 語句、函數、聚合函數、表連接以及表設計等多方面對 MySQL 進行總結,而本篇是數據庫基礎部分,大多都是一些概念性的內容和表的創建,數據庫博大精深,本系列文章內容較淺,適合于前端的同學們對 MySQL 的入門,當然這也是我的學習筆記,希望可以幫助大家。
MySQL 的特點:開源免費、性能高、安裝使用簡單。
MySQL 的作用:
存儲大量數據,方便檢索和訪問;
保持數據信息的一致、完整;
實現數據的共享和安全;
通過組合分析產生新的有用信息。
實體:只要是客觀存在,能夠被描述出來的都是實體,每一條數據都是一個實體。
DB:是數據庫的意思,就是存儲數據的倉庫,可以存放結構化的數據。
DBMS:代表數據管理系統,是一種系統軟件,提供操作數據庫的環境,如 Navicat for MySQL,可以通過數據庫管理系統對數據進行增、刪、改、查。
SQL:結構化查詢語言,專門用來和數據庫進行交流的語言,幾乎所有的 DBMS 都支持 SQL。
數據表:
表是數據庫中包含所有數據的數據庫對象,也是其他對象的基礎;
表定義是一個集合,數據在表中是按行和列的格式組織的,用來存放數據;
行被稱為記錄,用來存放一個實體,列稱為字段用來描述實體的某一個屬性。
在 MySQL 的默認安裝目錄中 my.ini 文件是專門用來配置的,常用配置項如下:
port:端口號;
basedir:安裝目錄;
datadir:數據存放目錄
charcter-set-server:字符集;
default-storage-engine:存儲引擎;
sql-mode:語法模式;
max-connections:最大連接數。
2、MySQL 命令MySQL 服務啟動和停止:
net start MySQL net stop MySQL
連接和退出數據庫:
mysql -h 127.0.0.1 -P 3306 -uroot -p123456 exit
-h 代表主機名,-p 代表端口號,-u 和 -p 分別代表當前 MySQL 服務的賬號和密碼。
查看當前 MySQL 中的數據庫:
show dbs; show database;
切換數據庫:
use dataname;
查看數據庫的表:
show tables; show tables from mysql;
查看當前所在的數據庫:
select database();
查詢表結構:
desc tablename;
數據完整性是指,數據庫種所有數據值均為正確狀態,如果數據存儲有不正確的的數據值,則該數據庫喪失數據完整性,為了實現數據完整性,需要檢驗數據庫表中每行每列的數據是否符合要求,在創建表時,應該保證以后輸入的數據都是正確的,錯誤的數據不允許輸入。
1、域(列)完整性域完整性是對數據表中字段屬性的約束,通常指數據的有效性,它包括字段的值域、字段的類型及字段的有效規則等約束,它是由確定關系結構時所定義的字段的屬性決定的,如關于年齡的字段,數據類型應為 int,關于普通的字符串值得類型應該為 varchar 等等,并在規定值類型時相應得規定值的長度,即所占的字節數。
數據類型圖如下:
數值類型整數型:
tinyint:存儲所占 1 字節,無符號可以存儲 0 ~ 255,有符號可以存儲 -128 ~ 127;
smallint:存儲所占 2 字節,無符號可以存儲 0 ~ 65535,有符號可以存儲 -32768 ~ 32767;
mediumint:存儲所占 3 字節,無符號可以存儲 0 ~ 16777215,有符號可以存儲 -8388608 ~ 8388607;
int:存儲所占 4 字節,無符號可以存儲 0 ~ 4294967295,有符號可以存儲 -2147483648 ~ 2147483647;
bigint:存儲所占 8 字節,無符號可以存儲 0 ~ 18446744073709551615,有符號可以存儲 -9223372036854775808 ~ 9223372036854775807。
上面的整數型用來規定字段存儲的數據必須為整數,從上到下需要占用的空間越來越多,能表示的數字也越來越大,定義字段時選擇滿足需求的數字范圍即可。
數值類型小數型:
float:單精度浮點型,存儲所占 4 字節,數值范圍為 -3.4E38 ~ 3.4E38,7 個有效位;
double:雙精度浮點型,存儲所占 8 字節,數值范圍為 -1.7E308~1.7E308,15 個有效位;
decimal:定點型,存儲所占 16 字節,28 個有效位,不存在精度損失,常用于銀行賬目計算。
數值存儲范圍越小,精度越高,范圍越大,精度越不準確,既要求精度,又固定小數點位數的數值存儲,建議使用 decimal,優點在于可以自定義小數點位數,精度高,特殊情況,數值范圍巨大,只能使用 float 類型,該類型一般不建議使用。
字符串類型:
set:存儲字符串對象,最多包含 64 個元素,并且可以取到集合中任意元素;
enum:存儲字符串對象,最多包含 65536 個元素,只能取到集合中一個元素;
blob:用于存儲二進制字符串,有子類型;
text:用于存儲大文本,有子類型;
char:定長,最大 255 字節,存儲空間未滿,會在數據右側填充空格;
varchar:不定長,最大 65536 字節,當長度小于 4 時,會自動轉換成 char。
上面類型中最常用的為 varchar 可以根據字段內容的自定義長度。
時間類型:
year:yyyy 格式表示的年份值;
timestamp:yyyymmddhhmmss 格式表示的時間戳;
time:hh:mm:ss 格式表示的時間值;
date:yyyy-mm-dd 格式表示的日期值;
datetime:yyyy-mm-dd hh:mm:ss 格式表示的日期和時間。
默認值:默認值是指如果某個字段沒有指定值的情況下,會為該字段指定一個預先設定的值。
非空約束:我們可以指定某個字段不能不輸入,必須提供一個非空的值,即不能為 null。
2、實體(行)完整性實體完整性是對關系中的記錄唯一性,也就是主鍵的約束,準確地說,實體完整性是指關系中的主屬性值不能為 null 且不能有相同值,定義表中的所有行唯一的標識,一般用主鍵。
主鍵:表中一列或者幾列組合的值能用來唯一標識表中的每一行,這樣的列或者列組合稱為表的主鍵,主鍵表的數據不能重復,如果兩列或者多列組合起來唯一標識表中的每一行,則該主鍵又稱為 “組合主鍵”。
主鍵的選擇標準:
最少性:盡量選擇單個鍵作為主鍵;
穩定性:由于主鍵是用來在兩個表之間建立關聯的,不能經常更新或者說一般不更新,所以最好選擇無意義的列作為主鍵,如各種 id 值。
3、引用完整性引用完整性意思是對關系型數據庫中建立關聯關系的數據表之間數據參照引用的約束,也就是對外鍵的約束,準確地說,是指關系中的外鍵必須是另一個關系的主鍵有效值,或者是 null,參考完整性,維護表間數據的有效性,完整性,通常通過建立外部鍵聯系另一張關聯表的主鍵實現。
外鍵:用于連接兩張表的字段稱為外鍵,屬于外鍵表,通常要關聯的主鍵表的字段作為外鍵,保證了引用完整性。
外鍵約束:外鍵表的外鍵必須引用主鍵表的主鍵,主表沒有記錄。
如果一個表的外鍵引用了一個表的主鍵會有以下限制:
在外鍵表里不能添加主鍵表里沒有的數據,外鍵表的數據與主鍵表的數據必須通過外鍵一一對應;
要想刪除主鍵表的數據必須刪除所有外鍵表的數據。
唯一約束:唯一約束是指某個字段值是唯一的,在所有的記錄中不能有重復的值,如某個人的身份證號,需將外鍵的索引類型設置為 Unique。
標識列:當表中沒有適合做主鍵的列時,此時創建作為主鍵的無意義列稱為標識列,標識列的值是自動生成的,不能輸入修改,且是自增的,可以設置每次的增量,具有 “斷號保留” 的特性,當某一個實體被刪除時,該標識列的值是永久保存的,其他新增實體會在這個標識列的基礎上繼續自增。
我們可以通過兩種方式創建表,可以使用 DDL(data defintion language)數據定義語言來創建,也可以使用 DBMS 數據管理系統來創建,使用 DBMS 還是很方便的,而且也是最常用的方式,但 DDL 創建方式我們不得不說,就是通過代碼的方式來實現表的創建和操作,因為這是最原始的方式,即使圖形化的操作會更方便,我們也應該了解。
1、SQL 規范SQL 語句的規范如下:
SQL 語句不區分大小寫,建議 SQL 關鍵字大寫,表名和列表小寫;
命令用分號結尾;
命令可以縮進和換行,一種類型的關鍵字放在一行;
可以寫單行和多行注釋 , # 和 -- 是單行注釋, /*/ 是多行注釋。
2、使用 DDL 操作表在 DBMS 中的查詢編輯器可以代替命令行實現命令的編寫,為了視覺效果,我們都使用 Navicat for MySQL 的查詢編輯器,操作界面如下圖。
(1) 創建表創建表 student,創建一個標識列 id 不為空,設為主鍵并自增,創建 name 列,varchar 類型,64 位,不為空,創建 age 列,int 類型,不為空,創建 city 列,varchar 類型,32 位,默認值為 “北京”。
CREATE TABLE `student` ( `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(64) NOT NULL, `age` INT NOT NULL, `city` VARCHAR(32) DEFAULT "北京" );(2) 操作表的列
給上面的表 student 增加 idcard 列,值為空,將 idcard 列類型大小修改為 32 位,添加 province 列,插入到 city 列前面,查詢表結構,刪除 idcard 列,刪除表 student。
ALTER TABLE `student` ADD COLUMN `idcard` VARCHAR(18) NULL; ALTER TABLE `student` MODIFY COLUMN `idcard` VARCHAR(32) NULL; ALTER TABLE `student` ADD COLUMN `province` VARCHAR(32) AFTER `age`; DESC `student`; ALTER TABLE `student` DROP COLUMN `idcard`; DROP TABLE `student`;(3) 添加主鍵約束
重新創建上面的 student 表,city 不設置默認值,不添加主鍵約束和標識列,再通過命令添加主鍵約束。
CREATE TABLE `student` ( `id` INT NOT NULL, `name` VARCHAR(64) NOT NULL, `age` INT NOT NULL, `city` VARCHAR(32) ); ALTER TABLE `student` ADD PRIMARY KEY(id);(4) 添加唯一約束
將上面我們 student 表中的 idcard 列再加回來,給 idcard 列添加唯一約束,外鍵名為 uq_idcard。
ALTER TABLE `student` ADD COLUMN `idcard` VARCHAR(18) NULL; ALTER TABLE `student` ADD UNIQUE INDEX uq_idcard(`idcard`);(5) 添加默認約束
將 student 表 city 列的默認值設置為 “北京”。
ALTER TABLE `student` MODIFY COLUMN `city` VARCHAR(64) DEFAULT "北京";(6) 添加外鍵約束
創建一個子表 score,添加 student_id 列,添加外鍵 fk_student_id,將 student_id 與 student 表的主鍵 id 相關聯,此時 student 為主表(主鍵表),score 為子表(外鍵表)。
CREATE TABLE `score` ( `student_id` INT ); ALTER TABLE `score` ADD CONSTRAINT `fk_student_id` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`);
注意:在項目中一般不會添加這個約束,因為在開發時會頻繁操作表和修改數據,會經常報錯,非常麻煩,不添加這個約束并不影響數據的檢索和修改。
(7) 刪除約束刪除 score 表與 student 表的外鍵約束,即刪除外鍵 fk_student_id。
ALTER TABLE `score` DROP FOREIGN KEY `fk_student_id`;3、使用 DDL 創建一個完整的表關系
完整的表關系圖如下:
DDL 命令如下:
-- 創建表 student CREATE TABLE `student` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) NOT NULL, `idcard` VARCHAR(18) DEFAULT NULL, `age` INT(11) DEFAULT NULL, `city` VARCHAR(50) DEFAULT "北京", PRIMARY KEY (`id`) ); -- 創建表 course CREATE TABLE `course` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(50) DEFAULT NULL, PRIMARY KEY (`id`) ); -- 創建表 score,并添加外鍵約束 CREATE TABLE `score` ( `student_id` INT(11) NOT NULL DEFAULT "0", `course_id` INT(11) NOT NULL DEFAULT "0", `grade` FLOAT DEFAULT NULL, PRIMARY KEY (`student_id`, `course_id`), KEY `fk_courseid` (`course_id`), CONSTRAINT `fk_courseid` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`), CONSTRAINT `fk_student_id` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在實際開發當中使用 DDL 對表的編輯并不多,因為命令繁瑣,在效率上,使用 DBMS 效率更高,但是 DDL 是學習 MySQL 數據庫的根本之一,應該會寫。
到此 MySQL 系列文章的第一篇就結束了,里面大部分內容都是關于 MySQL 數據庫的概念以及表的創建,非常枯燥,但又是初學 MySQL 所必須要懂的知識點,相信大家通過本節已經對 MySQL 有了一定的認識,那么下一篇將是重中之重,是在開發中經常使用的 DML 數據庫操作語言,也就是我們平時所說的 SQL 語句,在此期待我們的下一篇 《MySQL —— SQL 語句總結》。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/17792.html
摘要:在搭建集群之前,我們需要先修改的數據持久化配置為存儲。所以,如果啟動多個默認配置下的節點,數據存儲是存在一致性問題的。為了解決這個問題,采用了集中式存儲的方式來支持集群化部署,目前只要支持的存儲。 前情回顧: 《Spring Cloud Alibaba基礎教程:使用Nacos實現服務注冊與發現》 《Spring Cloud Alibaba基礎教程:支持的幾種服務消費方式》 《Spri...
摘要:數據庫數據庫入門教程系列工具掘金工具共同編輯,修正錯誤,這里點擊進去在這里持續更新由于軟件是基于模式的數據庫管理系統一個客戶機服務器,因此在日常各種工作中,可以通過各種客戶端軟件來與數據庫管理系統關聯。 MySQL入門教程系列-1.5 如何學習MySQL - 掘金 在這里持續更新 MySQL入門教程系列-1.5 如何學習MySQL 如何學習 MySQL 這是一個偽命題,每個人都有適合自...
閱讀 1890·2021-11-24 09:39
閱讀 2535·2021-10-14 09:43
閱讀 3318·2021-10-08 10:10
閱讀 2266·2021-09-22 15:54
閱讀 2339·2019-08-29 17:20
閱讀 1573·2019-08-28 18:14
閱讀 2374·2019-08-26 13:28
閱讀 1111·2019-08-26 12:16