目錄
回顧
1. 命令行下的 MySql 客戶端
2. 圖形化界面的 MySQL-Client
3. 數(shù)據(jù)庫概述
3.1 數(shù)據(jù)庫管理系統(tǒng)是什么
3.2?工作模式
3.3 RDBMS 管理數(shù)據(jù)的結(jié)構(gòu)
3.4 客戶端連接服務(wù)器的信息
4. MySQL 中的數(shù)據(jù)類型
4.1?整型類型
4.2 字符串
4.3 日期/時(shí)間
5. MySQL 每個(gè)字段的選項(xiàng)約束
6. 練習(xí):將我們做過的題目記錄到數(shù)據(jù)庫中
回顧
上一篇博客中,我們具體包括以下內(nèi)容:
-
安裝 mysql-server,通過 Ubuntu 的包管理工具
apt
,自動(dòng)啟動(dòng)了 MySQLapt list sudo apt install <包名>
-
檢查 MySQL-Server 進(jìn)程(/usr/sbin/mysqld)是否啟動(dòng)成功
ps aux | grep mysqld #進(jìn)程 sudo netstat -nlpt | grep 3306 #端口
-
查看對(duì)應(yīng)的進(jìn)程是否存在
-
MySQL-Server 進(jìn)程應(yīng)該監(jiān)聽 TCP 3306 端口,查看端口監(jiān)聽情況
-
-
通過 MySQL-Client (/usr/sbin/mysql) 建立和 MySQL-Server 的連接(via 3306 端口)
在 Unix(Linux) OS中,習(xí)慣于把服務(wù)器(Server:提供 服務(wù)(Service)的進(jìn)程) 進(jìn)程叫做 xxxd。d 是 daemon(守護(hù)精靈):表示這類進(jìn)程都是看不到的,默默在背后工作。
通過 MySQL-Client 要連接 MySQL-Server 是通過網(wǎng)絡(luò)連接的,所以需要知道如下信息:
1.MySQL-Server 進(jìn)程工作在網(wǎng)絡(luò)中的哪臺(tái)主機(jī)(host)上?
通過域名(domain)或者 ip 地址。 其中 127.0.0.1 是一個(gè)特殊的 ip 地址,代表本機(jī)。對(duì)應(yīng)的域名 localhost。
2.MySQL-Server 進(jìn)程是這臺(tái)主機(jī)上的哪個(gè)進(jìn)程?
通過端口(3306 MySQL 服務(wù)器進(jìn)程的默認(rèn)端口)
-
當(dāng)主機(jī)是 127.0.0.1、端口是 3306 時(shí),可以省略
-
授權(quán)信息:mysql 的用戶名,mysql 的密碼
-
所以從默認(rèn)的配置文件中 (/etc/mysql/debian.conf)下獲取用戶名和密碼
sudo cat /etc/mysql/debian.cnf
連接數(shù)據(jù)庫
mysql -h127.0.0.1 -P3306 -u<用戶名> -p
接下來,我們開始學(xué)習(xí) MySQL 的相關(guān)知識(shí)。?
1. 命令行下的 MySql 客戶端
-- 這個(gè)是注釋
-- 創(chuàng)建一個(gè)庫(schema)名叫 learn,默認(rèn)字符集 utf8mb4
create database learn charset utf8mb4;
-- 切換自己的工作環(huán)境為 learn 庫,俗稱把 learn 設(shè)成默認(rèn)庫
use learn;
-- 創(chuàng)建一張學(xué)生表(students),列
-- 學(xué)號(hào)(sn)整型 int primary key(pk) 主鍵
-- 姓名(name)字符串 varchar(20) 字符串最長(zhǎng) 20 個(gè)字
-- 入學(xué)時(shí)間(entried_at) datetime 年-月-日 時(shí):分:秒
create table students (
sn int primary key,
name varchar(20),
entried_at datetime
);
-- 在這張表中插入一些數(shù)據(jù),注意:數(shù)據(jù)必須整行的形式存在
insert into students (sn, name, entried_at)
values (101, '張三', '2021-09-01 18:32:18');
-- 查看表中的數(shù)據(jù)
select * from students;
2. 圖形化界面的 MySQL-Client
- 需要在云服務(wù)器(Web控制臺(tái))上開啟 3306 的訪問權(quán)限;
- Mysql-server 默認(rèn)不允許從非本地連接。
以上兩點(diǎn)都是為了保證數(shù)據(jù)的安全,數(shù)據(jù)庫的數(shù)據(jù)一旦泄露后果不堪設(shè)想。?如果默爾曼采用直接連接的方式連接數(shù)據(jù)庫十分的麻煩且不安全。因此,我們采用SSH 隧道(Tunnel)的方式,具體流程如下圖所示。
接下來我們就需要使用 WindTerm 的隧道功能了。
?
3. 數(shù)據(jù)庫概述
3.1 數(shù)據(jù)庫管理系統(tǒng)是什么
Database Manage System(DBMS)是一類數(shù)據(jù)庫管理系統(tǒng)軟件。
其中目前主流的是關(guān)系型數(shù)據(jù)庫管理系統(tǒng) Relational Database Manage System RDBMS。
知名的產(chǎn)品有 MySQL、Oracle、Postgres、Sqlite 等。
通常將數(shù)據(jù)存儲(chǔ)在二級(jí)存儲(chǔ)(硬盤)上 —— 斷電后數(shù)據(jù)仍然保留。
內(nèi)部實(shí)現(xiàn)中,通過一個(gè) schema(database) 是一個(gè)文件夾,每個(gè) table 是該文件夾下的幾個(gè)文件。
3.2?工作模式
客戶端-服務(wù)器模型?
3.3 RDBMS 管理數(shù)據(jù)的結(jié)構(gòu)
RDBMS -> Database/Schema -> Table -> Row -> Column/Field
3.4 客戶端連接服務(wù)器的信息
主機(jī)(host)、端口(port)、用戶名(user)、密碼(password)、默認(rèn)庫
4. MySQL 中的數(shù)據(jù)類型
4.1?整型類型
int (32位)/ smallint (16位)/ bigint(64位)
4.2 字符串
- char(10) 定長(zhǎng)字符串
- varchar(10) 變長(zhǎng)字符串 variable(變量/變化的)
10:最多存 10 個(gè)字(不區(qū)分英文/中文)
text / longtext? --- blob?/ longblob (存放視頻數(shù)據(jù)和音頻數(shù)據(jù)? Binary Large Object)
SQL 中,不區(qū)分單引號(hào)、雙引號(hào)
4.3 日期/時(shí)間
- date 年月日? '2023-04-20'
- time?時(shí)分秒? '21:02:38'
- datetime? 年月日 + 時(shí)分秒? '2023-04-20 21:02:38'
5. MySQL 每個(gè)字段的選項(xiàng)約束
- PK Primary Key 勾選之后,代表這列是主鍵
- NNNot Null 勾選之后,此列不允許填入 Null null NuLL
- UQ Unique(唯一的) 勾選之后,此列的數(shù)據(jù)不能重復(fù)
- AI Auto Incremental 只能配合 Int + PK 使用,填入之后,此列的值自動(dòng)加 1
建庫的原則:
一定要選擇字符集編碼為 utf8mb4
建表的通常原則:
必須有一個(gè)列,這個(gè)列的名稱叫做 users uid,作為主鍵存在,并且選擇 NN、AI
如果沒有意外情況,各個(gè)列都把 NN 勾選上
6. 練習(xí):將我們做過的題目記錄到數(shù)據(jù)庫中
oj_records
0) oj_id int pk ai
1)題目來源(???or leetcode) source varchar(10) NN 可以重復(fù)
2)題目鏈接 link varchar(200) NN 不重復(fù)
3)題目 question varchar(100) NN 不重復(fù)
4)難度 difficulty varchar(10) Null
5)是否通過 passed int NN
6)上次通過時(shí)間 last_passed_at datetime Null文章來源:http://www.zghlxwxcb.cn/news/detail-558090.html
CREATE TABLE `learn`.`oj_records` (
`oj_id` INT NOT NULL AUTO_INCREMENT,
`source` VARCHAR(10) NOT NULL,
`link` VARCHAR(200) NOT NULL,
`question` VARCHAR(100) NOT NULL,
`difficulty` VARCHAR(10) NULL,
`passed` INT NOT NULL DEFAULT 0 COMMENT '1: 通過\n0: 未通過',
`last_passed_at` DATETIME NULL,
PRIMARY KEY (`oj_id`),
UNIQUE INDEX `link_UNIQUE` (`link` ASC) VISIBLE,
UNIQUE INDEX `question_UNIQUE` (`question` ASC) VISIBLE)
COMMENT = 'OJ 刷題記錄';
?文章來源地址http://www.zghlxwxcb.cn/news/detail-558090.html
到了這里,關(guān)于3. MySQL - 數(shù)據(jù)類型 & 選項(xiàng)約束的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!