成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

MySQL —— 數(shù)據(jù)庫基礎(chǔ)

Martin91 / 2218人閱讀

摘要:代表數(shù)據(jù)管理系統(tǒng),是一種系統(tǒng)軟件,提供操作數(shù)據(jù)庫的環(huán)境,如,可以通過數(shù)據(jù)庫管理系統(tǒng)對數(shù)據(jù)進(jìn)行增刪改查。命令服務(wù)啟動(dòng)和停止連接和退出數(shù)據(jù)庫代表主機(jī)名,代表端口號,和分別代表當(dāng)前服務(wù)的賬號和密碼。添加默認(rèn)約束將表列的默認(rèn)值設(shè)置為北京。


閱讀原文


前言

MySQL 是目前使用最廣泛的關(guān)系型數(shù)據(jù)庫,是在軟件開發(fā)中所必備的技能之一,這是關(guān)于 MySQL 的系列文章,將從 MySQL 的基本概念、基本使用、SQL 語句、函數(shù)、聚合函數(shù)、表連接以及表設(shè)計(jì)等多方面對 MySQL 進(jìn)行總結(jié),而本篇是數(shù)據(jù)庫基礎(chǔ)部分,大多都是一些概念性的內(nèi)容和表的創(chuàng)建,數(shù)據(jù)庫博大精深,本系列文章內(nèi)容較淺,適合于前端的同學(xué)們對 MySQL 的入門,當(dāng)然這也是我的學(xué)習(xí)筆記,希望可以幫助大家。


MySQL 的基本概念

MySQL 的特點(diǎn):開源免費(fèi)、性能高、安裝使用簡單。

MySQL 的作用:

存儲大量數(shù)據(jù),方便檢索和訪問;

保持?jǐn)?shù)據(jù)信息的一致、完整;

實(shí)現(xiàn)數(shù)據(jù)的共享和安全;

通過組合分析產(chǎn)生新的有用信息。

實(shí)體:只要是客觀存在,能夠被描述出來的都是實(shí)體,每一條數(shù)據(jù)都是一個(gè)實(shí)體。

DB:是數(shù)據(jù)庫的意思,就是存儲數(shù)據(jù)的倉庫,可以存放結(jié)構(gòu)化的數(shù)據(jù)。

DBMS:代表數(shù)據(jù)管理系統(tǒng),是一種系統(tǒng)軟件,提供操作數(shù)據(jù)庫的環(huán)境,如 Navicat for MySQL,可以通過數(shù)據(jù)庫管理系統(tǒng)對數(shù)據(jù)進(jìn)行增、刪、改、查。

SQL:結(jié)構(gòu)化查詢語言,專門用來和數(shù)據(jù)庫進(jìn)行交流的語言,幾乎所有的 DBMS 都支持 SQL。

數(shù)據(jù)表:

表是數(shù)據(jù)庫中包含所有數(shù)據(jù)的數(shù)據(jù)庫對象,也是其他對象的基礎(chǔ);

表定義是一個(gè)集合,數(shù)據(jù)在表中是按行和列的格式組織的,用來存放數(shù)據(jù);

行被稱為記錄,用來存放一個(gè)實(shí)體,列稱為字段用來描述實(shí)體的某一個(gè)屬性。


MySQL 的配置和命令 1、MySQL 配置

在 MySQL 的默認(rèn)安裝目錄中 my.ini 文件是專門用來配置的,常用配置項(xiàng)如下:

port:端口號;

basedir:安裝目錄;

datadir:數(shù)據(jù)存放目錄

charcter-set-server:字符集;

default-storage-engine:存儲引擎;

sql-mode:語法模式;

max-connections:最大連接數(shù)。

2、MySQL 命令

MySQL 服務(wù)啟動(dòng)和停止:

net start MySQL
net stop MySQL

連接和退出數(shù)據(jù)庫:

mysql -h 127.0.0.1 -P 3306 -uroot -p123456
exit

-h 代表主機(jī)名,-p 代表端口號,-u-p 分別代表當(dāng)前 MySQL 服務(wù)的賬號和密碼。

查看當(dāng)前 MySQL 中的數(shù)據(jù)庫:

show dbs;
show database;

切換數(shù)據(jù)庫:

use dataname;

查看數(shù)據(jù)庫的表:

show tables;
show tables from mysql;

查看當(dāng)前所在的數(shù)據(jù)庫:

select database();

查詢表結(jié)構(gòu):

desc tablename;


數(shù)據(jù)完整性

數(shù)據(jù)完整性是指,數(shù)據(jù)庫種所有數(shù)據(jù)值均為正確狀態(tài),如果數(shù)據(jù)存儲有不正確的的數(shù)據(jù)值,則該數(shù)據(jù)庫喪失數(shù)據(jù)完整性,為了實(shí)現(xiàn)數(shù)據(jù)完整性,需要檢驗(yàn)數(shù)據(jù)庫表中每行每列的數(shù)據(jù)是否符合要求,在創(chuàng)建表時(shí),應(yīng)該保證以后輸入的數(shù)據(jù)都是正確的,錯(cuò)誤的數(shù)據(jù)不允許輸入。

1、域(列)完整性

域完整性是對數(shù)據(jù)表中字段屬性的約束,通常指數(shù)據(jù)的有效性,它包括字段的值域、字段的類型及字段的有效規(guī)則等約束,它是由確定關(guān)系結(jié)構(gòu)時(shí)所定義的字段的屬性決定的,如關(guān)于年齡的字段,數(shù)據(jù)類型應(yīng)為 int,關(guān)于普通的字符串值得類型應(yīng)該為 varchar 等等,并在規(guī)定值類型時(shí)相應(yīng)得規(guī)定值的長度,即所占的字節(jié)數(shù)。

數(shù)據(jù)類型圖如下:

數(shù)值類型整數(shù)型:

tinyint:存儲所占 1 字節(jié),無符號可以存儲 0 ~ 255,有符號可以存儲 -128 ~ 127;

smallint:存儲所占 2 字節(jié),無符號可以存儲 0 ~ 65535,有符號可以存儲 -32768 ~ 32767;

mediumint:存儲所占 3 字節(jié),無符號可以存儲 0 ~ 16777215,有符號可以存儲 -8388608 ~ 8388607;

int:存儲所占 4 字節(jié),無符號可以存儲 0 ~ 4294967295,有符號可以存儲 -2147483648 ~ 2147483647

bigint:存儲所占 8 字節(jié),無符號可以存儲 0 ~ 18446744073709551615,有符號可以存儲 -9223372036854775808 ~ 9223372036854775807。

上面的整數(shù)型用來規(guī)定字段存儲的數(shù)據(jù)必須為整數(shù),從上到下需要占用的空間越來越多,能表示的數(shù)字也越來越大,定義字段時(shí)選擇滿足需求的數(shù)字范圍即可。

數(shù)值類型小數(shù)型:

float:單精度浮點(diǎn)型,存儲所占 4 字節(jié),數(shù)值范圍為 -3.4E38 ~ 3.4E387 個(gè)有效位;

double:雙精度浮點(diǎn)型,存儲所占 8 字節(jié),數(shù)值范圍為 -1.7E308~1.7E308,15 個(gè)有效位;

decimal:定點(diǎn)型,存儲所占 16 字節(jié),28 個(gè)有效位,不存在精度損失,常用于銀行賬目計(jì)算。

數(shù)值存儲范圍越小,精度越高,范圍越大,精度越不準(zhǔn)確,既要求精度,又固定小數(shù)點(diǎn)位數(shù)的數(shù)值存儲,建議使用 decimal,優(yōu)點(diǎn)在于可以自定義小數(shù)點(diǎn)位數(shù),精度高,特殊情況,數(shù)值范圍巨大,只能使用 float 類型,該類型一般不建議使用。

字符串類型:

set:存儲字符串對象,最多包含 64 個(gè)元素,并且可以取到集合中任意元素;

enum:存儲字符串對象,最多包含 65536 個(gè)元素,只能取到集合中一個(gè)元素;

blob:用于存儲二進(jìn)制字符串,有子類型;

text:用于存儲大文本,有子類型;

char:定長,最大 255 字節(jié),存儲空間未滿,會在數(shù)據(jù)右側(cè)填充空格;

varchar:不定長,最大 65536 字節(jié),當(dāng)長度小于 4 時(shí),會自動(dòng)轉(zhuǎn)換成 char。

上面類型中最常用的為 varchar 可以根據(jù)字段內(nèi)容的自定義長度。

時(shí)間類型:

year:yyyy 格式表示的年份值;

timestamp:yyyymmddhhmmss 格式表示的時(shí)間戳;

time:hh:mm:ss 格式表示的時(shí)間值;

date:yyyy-mm-dd 格式表示的日期值;

datetime:yyyy-mm-dd hh:mm:ss 格式表示的日期和時(shí)間。

默認(rèn)值:默認(rèn)值是指如果某個(gè)字段沒有指定值的情況下,會為該字段指定一個(gè)預(yù)先設(shè)定的值。

非空約束:我們可以指定某個(gè)字段不能不輸入,必須提供一個(gè)非空的值,即不能為 null。

2、實(shí)體(行)完整性

實(shí)體完整性是對關(guān)系中的記錄唯一性,也就是主鍵的約束,準(zhǔn)確地說,實(shí)體完整性是指關(guān)系中的主屬性值不能為 null 且不能有相同值,定義表中的所有行唯一的標(biāo)識,一般用主鍵。

主鍵:表中一列或者幾列組合的值能用來唯一標(biāo)識表中的每一行,這樣的列或者列組合稱為表的主鍵,主鍵表的數(shù)據(jù)不能重復(fù),如果兩列或者多列組合起來唯一標(biāo)識表中的每一行,則該主鍵又稱為 “組合主鍵”。

主鍵的選擇標(biāo)準(zhǔn):

最少性:盡量選擇單個(gè)鍵作為主鍵;

穩(wěn)定性:由于主鍵是用來在兩個(gè)表之間建立關(guān)聯(lián)的,不能經(jīng)常更新或者說一般不更新,所以最好選擇無意義的列作為主鍵,如各種 id 值。

3、引用完整性

引用完整性意思是對關(guān)系型數(shù)據(jù)庫中建立關(guān)聯(lián)關(guān)系的數(shù)據(jù)表之間數(shù)據(jù)參照引用的約束,也就是對外鍵的約束,準(zhǔn)確地說,是指關(guān)系中的外鍵必須是另一個(gè)關(guān)系的主鍵有效值,或者是 null,參考完整性,維護(hù)表間數(shù)據(jù)的有效性,完整性,通常通過建立外部鍵聯(lián)系另一張關(guān)聯(lián)表的主鍵實(shí)現(xiàn)。

外鍵:用于連接兩張表的字段稱為外鍵,屬于外鍵表,通常要關(guān)聯(lián)的主鍵表的字段作為外鍵,保證了引用完整性。

外鍵約束:外鍵表的外鍵必須引用主鍵表的主鍵,主表沒有記錄。

如果一個(gè)表的外鍵引用了一個(gè)表的主鍵會有以下限制:

在外鍵表里不能添加主鍵表里沒有的數(shù)據(jù),外鍵表的數(shù)據(jù)與主鍵表的數(shù)據(jù)必須通過外鍵一一對應(yīng);

要想刪除主鍵表的數(shù)據(jù)必須刪除所有外鍵表的數(shù)據(jù)。

唯一約束:唯一約束是指某個(gè)字段值是唯一的,在所有的記錄中不能有重復(fù)的值,如某個(gè)人的身份證號,需將外鍵的索引類型設(shè)置為 Unique

標(biāo)識列:當(dāng)表中沒有適合做主鍵的列時(shí),此時(shí)創(chuàng)建作為主鍵的無意義列稱為標(biāo)識列,標(biāo)識列的值是自動(dòng)生成的,不能輸入修改,且是自增的,可以設(shè)置每次的增量,具有 “斷號保留” 的特性,當(dāng)某一個(gè)實(shí)體被刪除時(shí),該標(biāo)識列的值是永久保存的,其他新增實(shí)體會在這個(gè)標(biāo)識列的基礎(chǔ)上繼續(xù)自增。


DDL 數(shù)據(jù)定義語言的使用

我們可以通過兩種方式創(chuàng)建表,可以使用 DDL(data defintion language)數(shù)據(jù)定義語言來創(chuàng)建,也可以使用 DBMS 數(shù)據(jù)管理系統(tǒng)來創(chuàng)建,使用 DBMS 還是很方便的,而且也是最常用的方式,但 DDL 創(chuàng)建方式我們不得不說,就是通過代碼的方式來實(shí)現(xiàn)表的創(chuàng)建和操作,因?yàn)檫@是最原始的方式,即使圖形化的操作會更方便,我們也應(yīng)該了解。

1、SQL 規(guī)范

SQL 語句的規(guī)范如下:

SQL 語句不區(qū)分大小寫,建議 SQL 關(guān)鍵字大寫,表名和列表小寫;

命令用分號結(jié)尾;

命令可以縮進(jìn)和換行,一種類型的關(guān)鍵字放在一行;

可以寫單行和多行注釋 , #-- 是單行注釋, /*/ 是多行注釋。

2、使用 DDL 操作表

在 DBMS 中的查詢編輯器可以代替命令行實(shí)現(xiàn)命令的編寫,為了視覺效果,我們都使用 Navicat for MySQL 的查詢編輯器,操作界面如下圖。

(1) 創(chuàng)建表

創(chuàng)建表 student,創(chuàng)建一個(gè)標(biāo)識列 id 不為空,設(shè)為主鍵并自增,創(chuàng)建 name 列,varchar 類型,64 位,不為空,創(chuàng)建 age 列,int 類型,不為空,創(chuàng)建 city 列,varchar 類型,32 位,默認(rèn)值為 “北京”。

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 列前面,查詢表結(jié)構(gòu),刪除 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) 添加主鍵約束

重新創(chuàng)建上面的 student 表,city 不設(shè)置默認(rèn)值,不添加主鍵約束和標(biāo)識列,再通過命令添加主鍵約束。

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) 添加默認(rèn)約束

studentcity 列的默認(rèn)值設(shè)置為 “北京”。

ALTER TABLE `student` MODIFY COLUMN `city` VARCHAR(64) DEFAULT "北京";
(6) 添加外鍵約束

創(chuàng)建一個(gè)子表 score,添加 student_id 列,添加外鍵 fk_student_id,將 student_idstudent 表的主鍵 id 相關(guān)聯(lián),此時(shí) student 為主表(主鍵表),score 為子表(外鍵表)。

CREATE TABLE `score`
(
    `student_id` INT
);
ALTER TABLE `score` ADD CONSTRAINT `fk_student_id` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`);

注意:在項(xiàng)目中一般不會添加這個(gè)約束,因?yàn)樵陂_發(fā)時(shí)會頻繁操作表和修改數(shù)據(jù),會經(jīng)常報(bào)錯(cuò),非常麻煩,不添加這個(gè)約束并不影響數(shù)據(jù)的檢索和修改。

(7) 刪除約束

刪除 score 表與 student 表的外鍵約束,即刪除外鍵 fk_student_id。

ALTER TABLE `score` DROP FOREIGN KEY `fk_student_id`;
3、使用 DDL 創(chuàng)建一個(gè)完整的表關(guān)系

完整的表關(guān)系圖如下:

DDL 命令如下:

-- 創(chuàng)建表 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`)
);

-- 創(chuàng)建表 course
CREATE TABLE `course` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(50) DEFAULT NULL,
    PRIMARY KEY (`id`)
);

-- 創(chuàng)建表 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;

在實(shí)際開發(fā)當(dāng)中使用 DDL 對表的編輯并不多,因?yàn)槊罘爆?,在效率上,使?DBMS 效率更高,但是 DDL 是學(xué)習(xí) MySQL 數(shù)據(jù)庫的根本之一,應(yīng)該會寫。


總結(jié)

到此 MySQL 系列文章的第一篇就結(jié)束了,里面大部分內(nèi)容都是關(guān)于 MySQL 數(shù)據(jù)庫的概念以及表的創(chuàng)建,非??菰?,但又是初學(xué) MySQL 所必須要懂的知識點(diǎn),相信大家通過本節(jié)已經(jīng)對 MySQL 有了一定的認(rèn)識,那么下一篇將是重中之重,是在開發(fā)中經(jīng)常使用的 DML 數(shù)據(jù)庫操作語言,也就是我們平時(shí)所說的 SQL 語句,在此期待我們的下一篇 《MySQL —— SQL 語句總結(jié)》。


文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/17792.html

相關(guān)文章

  • Spring Cloud Alibaba基礎(chǔ)教程:Nacos的數(shù)據(jù)持久化

    摘要:在搭建集群之前,我們需要先修改的數(shù)據(jù)持久化配置為存儲。所以,如果啟動(dòng)多個(gè)默認(rèn)配置下的節(jié)點(diǎn),數(shù)據(jù)存儲是存在一致性問題的。為了解決這個(gè)問題,采用了集中式存儲的方式來支持集群化部署,目前只要支持的存儲。 前情回顧: 《Spring Cloud Alibaba基礎(chǔ)教程:使用Nacos實(shí)現(xiàn)服務(wù)注冊與發(fā)現(xiàn)》 《Spring Cloud Alibaba基礎(chǔ)教程:支持的幾種服務(wù)消費(fèi)方式》 《Spri...

    endiat 評論0 收藏0
  • MySQL入門教程 - 收藏集 - 掘金

    摘要:數(shù)據(jù)庫數(shù)據(jù)庫入門教程系列工具掘金工具共同編輯,修正錯(cuò)誤,這里點(diǎn)擊進(jìn)去在這里持續(xù)更新由于軟件是基于模式的數(shù)據(jù)庫管理系統(tǒng)一個(gè)客戶機(jī)服務(wù)器,因此在日常各種工作中,可以通過各種客戶端軟件來與數(shù)據(jù)庫管理系統(tǒng)關(guān)聯(lián)。 MySQL入門教程系列-1.5 如何學(xué)習(xí)MySQL - 掘金 在這里持續(xù)更新 MySQL入門教程系列-1.5 如何學(xué)習(xí)MySQL 如何學(xué)習(xí) MySQL 這是一個(gè)偽命題,每個(gè)人都有適合自...

    張利勇 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<