【一周入门MySQL—1】数据库概述、数据定义、数据操作
數據庫概述、數據定義、數據操作
一、數據庫概述
數據庫基礎概念:按照一定的數據結構來組織、存儲和管理數據的倉庫。
企業數據存儲面臨的問題:
- 存儲大量數據;
- 大量數據的檢索和訪問;
- 保證數據信息的一致性和完整性;
- 數據共享和安全;
數據庫分類:
- 關系型數據庫(RDBMS):結構化的數據集;
- 非關系型數據庫(NOSQL):非結構化的數據集;
表結構數據:
由固定列和任意行構成的表結構的數據集;
表中的列稱為字段,表中的行稱為記錄;
以字段為基本的存儲單元和計量單位;
每一個字段必須有字段名,且同一個表中的字段名不能重復;
每個字段的數據類型必須一致;
除去Excel、WPS之外的其他分析工具,都是使用二維表結構的存儲格式。
表格與表的區別:(Excel中表格數據選擇套用表格格式轉成表數據)
- 表格數據的最小單位是一個單元格,表數據的最小單位是一個字段;
- 表格數據中可以沒有列名,表數據中每一個字段必須有字段名,且同一個表中的字段名不能重復;
- 表格數據中每個單元格的數據類型可以不一致,表數據中每一列的數據類型必須一致;
在Excel中可以通過“套用表格格式”將表格轉換為表。
主流的關系型數據庫:(表結構數據形式,都是使用SQL語法)
- Oracle:運行穩定,可移植性高,功能齊全,性能超群,適用于大型企業;
- DB2:速度快,可靠性好,適用于海量數據,恢復性極強,適用于大中型企業;
- MySQL:開源,體積小,速度快,適用于中小型企業;
- SQL Server:全面高效,界面友好易操作,但不是跨平臺(Windows系統),適用于中小型企業;
現狀:
多臺MySQL服務器建立集群 – 性價比更高;
阿里 - 去IOE(IBM、Oracle、EMC)化口號 – 選擇MySQL替換Oracle,自研開發阿里Ocean Base;
國企、央企也開始使用自研數據庫,以及華為、騰訊、阿里等企業;
2009年MySQL所屬的Sun公司被Oracle收購,加強了企業級的特性;
MySQL 8.0支持開窗函數;
數據庫、數據庫管理系統和SQL之間的關系:
數據庫(DB)是長期存儲在計算機內,有組織的,統一管理的相關數據的集合;
數據庫管理系統(DBMS)是用于管理數據庫的軟件,它對數據庫進行統一的管理和控制,以保證數據庫的安全性和完整性;
SQl是一種結構化的查詢語言(Structure Query Language),它是國際標準化組織(ISO)采納的標準數據庫語言;
我們以數據庫管理系統為載體來學習SQL。
SQL就好比駕照,數據庫管理系統就是什么牌子的車子,有了駕照,什么牌子的車都可以開。
SQL語言的分類:
- 數據定義語言DDL:用于創建、修改、刪除數據庫中的各種對象,比如數據庫、表、視圖、索引等,常用的命令有Create、Alter、Drop等;
- 數據操作語言DML:用于操作數據庫表中的記錄,常用的命令有Insert、Update、Delete等;
- 數據查詢語言DQL:用戶查詢數據庫表中的記錄,基本結構是SELECT <字段名> FROM <表或者視圖> WHERE <查詢條件>;
- 數據控制語言DCL:用于定于數據庫訪問權限和安全級別,常用命令有Grant、Revoke等;
SQL書寫要求:
- SQL語言可以單行或者多行書寫,用分號結尾;
- SQL關鍵字用空格分隔,也可以用縮進來增強語句的可讀性;
- SQL對大小寫不敏感;
- 用#或者—單行注釋,用/* */多行注釋,注釋的語句不可以執行;
安裝MySQL Workbench進行數據庫連接
使用MySQL Workbench客戶端操作MySQL數據庫,它是官方提供的免費工作臺。
SQL語句執行方式:(如上圖所示)
- 全部執行,或者選中行執行;
- 光標所在行執行(Ctrl + Enter);
進入MySQL Workbench前需理解的基本概念:
數據庫:組織、存儲和管理相關數據的集合,同一個數據庫管理系統中的數據庫名必須唯一;
表:由固定的列數和任意的行數構成的二維表結構的數據集,同一個數據庫中表名必須唯一;
字段:一列即為一個字段,同一個表中的字段名必須唯一;
記錄:一行即為一條記錄;
以字段為基本存儲和計算單位,每個字段的數據類型必須一致。
MySQL常用數據類型:
- int:大整數型;
- float:單精度浮點型,默認float(10,2),表示最多10個數字,其中2位小數;
- decimal:十進制小數型;
- char:固定長度字符串型,1-255;
- varchar:可變長度字符串型,1-255;
- text:長文本字符串型,最大65535,不能指定長度;
- data:日期型,yyyy-MM-dd;
- time:時間型,hh:mm:ss;
- datetime:日期時間型,yyyy-MM-dd hh:mm:ss;
- Timestamp:時間戳;
二、數據定義
以下操作需在MySQL Workbench客戶端執行操作
-- 查看系統中有哪些數據庫show databases;-- 創建test數據庫(不能使用關鍵字作為數據庫名)create database test;-- 選擇進入數據庫use test;-- 刪除數據庫test(慎用)drop database test;-- 創建數據表(建表之前先選擇進入數據庫)use test;create table department(deptno int,dname varchar(10),num int);-- 查看當前數據庫中有哪些數據庫表show tables;-- 查看表結構desc department;describe department;-- 刪除數據庫表(刪除表結構和表數據 慎用)drop table department;約束條件:
約束條件是在表上強制執行的數據檢驗規則;
用來保證創建的表的數據的完整性和準確性;
主要在兩方面對數據進行約束:空值和重復值;
| 約束條件 | 備注 | 說明 |
| PRIMARY KEY | 主鍵約束 | 非空不重復 |
| NOT NULL | 非空約束 | 不能為空 |
| UNIQUE | 唯一約束 | 不能重復 |
| AUTO_INCREMENT | 自增字段 | 自動增長 |
| DEFAULT | 默認約束 | 默認值 |
| FOREIGN KEY | 外鍵約束 | 與主鍵相對應 |
主鍵約束(primary key)
每個表中只能有一個主鍵;
主鍵值須非空且不重復;
可設置單字段主鍵,也可以設置多字段聯合主鍵;
聯合主鍵中多個字段的取值完全相同時,才違反主鍵約束;
添加主鍵約束:
列級添加主鍵約束:create table <表名>(<字段名稱1><字段類型1>primary key, ……<字段名稱n><字段類型n>);
表級添加主鍵約束:create table <表名>(<字段名稱1><字段類型1>, ……<字段名稱n><字段類型n>,primary key(<字段名稱1>));
聯合主鍵必須使用第二種方法。
比如員工表中的工號就可以設置為主鍵。
唯一約束(unique)
指定字段的取值不能重復,可以為空,但只能出現一個空值;
也可以在列級和表級添加唯一約束。
自動增長列(auto_increment)
指定字段的取值自動生成,默認從1開始,每增加一條記錄,該字段的取值會加1;
只適用于整數型,配合主鍵一起使用;
創建自動增長約束 : create table <表名>(<字段名稱1><字段類型1>primary key auto_increment, ……<字段名稱n><字段類型n>);
比如員工表中的工號就可以設置為主鍵,并設置為自動增長列,每次新添加一個員工就加1。
一個字段可以設置多個約束條件,用空格分隔,且沒有先后順序。
非空約束(not null)
字段的值不能為空;
創建非空約束 : create table <表名>(<字段名稱1><字段類型1>not null, ……<字段名稱n><字段類型n>);
默認約束(default)
如果新插入一條記錄時沒有為該字段賦值,系統會自動為這個字段賦值為默認約束設定的值;
創建默認約束 :create table <表名>(<字段名稱1><字段類型1> default value, ……<字段名稱n><字段類型n>);
外鍵約束(foreign key)
在一張表中執行數據插入、更新、刪除等操作的時候,DBMS都會跟另一張表進行對照,避免不規范的操作,以確保數據存儲的完整性。
某一表中的某字段的值依賴于另一張表中某字段的值;
主鍵所在的表為主表,外鍵所在的表為從表;
每一個外鍵值必須與另一個表中的主鍵值相對應;
創建外鍵約束 : create table <表名>(<字段名稱1><字段類型1>, ……<字段名稱n><字段類型n> foreign key(字段名) references <主表>(主鍵字段));
比如上圖中的部門表和員工表,因為有外鍵約束條件,所以需要先創建主表<部門表>,再創建從表<員工表>。
-- 創建帶有約束條件的表create table dept(deptno int primary key,dname varchar(10),loc varchar(15));create table employee(empid int primary key auto_increment,ename varchar(15) unique,job varchar(10) not null,mgr int,hiredate date,sal float default 0,comm float,deptno int,foreign key(deptno) references dept(deptno));三、數據操作
修改數據表:修改數據庫中已經存在的數據表的結構
-- 修改表名alter table employee rename emp;show tables;-- 修改字段名alter table emp change empid empno int;desc emp;# 刪除原有主鍵alter table emp drop primary key;# 添加新的聯合主鍵alter table emp add primary key(ename,deptno);-- 修改字段類型alter table emp modify sal decimal default 0;desc emp;-- 添加字段(默認添加到最后一列,first第一列)alter table emp add city varchar(10);desc emp;-- 修改字段的排列位置alter table emp modify city varchar(10) after job;desc emp;alter table emp modify city varchar(10) first;desc emp;-- 刪除字段alter table emp drop city;desc emp;插入數據
字段名稱和字段值的數據類型、個數、順序必須一一對應。
可以指定字段名插入,也可以不指定字段名插入(為表中每一個字段指定值,且值得順序必須和數據表中得順序一致)。
批量導入數據:路徑中不能有中文,并且要將“\”改為“\\”或者“/”
load data infile ‘文件路徑.csv’ into table tablename fields terminated by ',' ignore 1 lines;
MySQL 默認得數據格式是UTF-8 既支持中文也支持英文
指定外部路徑需要管理員進行相應的設置賦予權限(MySQL 8.0),這里為了簡便可以直接從以下路徑進行導入:
C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/loaddata.csv
-- 插入數據:指定字段名desc dept;insert into dept(deptno,dname,loc) value (10,'財務部','北京總部'),(20,'行政部','北京總部'),(30,'銷售部','上海分部');select * from dept;-- 插入數據:不指定字段名insert into dept value (40,'總裁辦','null'),(50,'采購部','null'),(60,'電商部','上海分部');select * from dept;-- 批量導入數據load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/loaddata.csv"?into table deptfields terminated by ','# ignore 1 lines # 忽略第一條記錄;select * from dept;更新數據
update 表名 set 字段名1 = 字段值1 [,字段名2 = 字段值2 ……] [where 更新條件];
刪除數據
delete from 表名 ?[where 刪除條件];
truncate 表名; 與delete from 表名是一樣的,都是刪除表中的全部數據,保留表的結構。
delete 和 truncate 的區別:
- delete可以添加where子句刪除表中的部分數據,但是truncate只可以刪除表中的全部數據。
- (執行原理)delete刪除表中的數據保留結構(掃描全部的數據,花費的時間更長),truncate直接把表刪除(drop table)然后再創建一張新表(create table),執行速度比delete更快。
【課后練習】
創建salgrade表并添加數據
通過create和insert命令的語法練習,理解數據庫的基本結構,熟悉掌握數據定義語言和數據操作語言的使用。
-- 作業:創建salgrade表并添加數據create table salgrade(grade int primary key,losal int,hisal int);desc salgrade;insert into salgrade value(1,700,1200),(2,1201,1400),(3,1401,2000),(4,2001,3000),(5,3001,9999);select * from? salgrade;?總結
以上是生活随笔為你收集整理的【一周入门MySQL—1】数据库概述、数据定义、数据操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【学习笔记】分析函数(开窗函数)
- 下一篇: 【一周入门MySQL—2】单表查询