1,什麼是資料庫?——存儲數據的倉庫 資料庫技術是電腦應用領域中非常重要的技術,它產生於20世紀60年代末,是數據管理的最新技術,也是軟體技術的一個重要分支。 簡單的說,資料庫就是一個存放數據的倉庫,這個倉庫是按照一定的數據結構(數據結構是指數據的組織形式或數據之間的聯繫)來組織、存儲的,我們可以 ...
1,什麼是資料庫?——存儲數據的倉庫
資料庫技術是電腦應用領域中非常重要的技術,它產生於20世紀60年代末,是數據管理的最新技術,也是軟體技術的一個重要分支。
簡單的說,資料庫就是一個存放數據的倉庫,這個倉庫是按照一定的數據結構(數據結構是指數據的組織形式或數據之間的聯繫)來組織、存儲的,我們可以通過資料庫提供的多種方法來管理資料庫里的數據。更簡單的形象理解,資料庫和我們生活中存放雜物的倉庫性質一樣,區別隻是存放的東西不同。
2,什麼是數據?——你所知道的都是數據
存儲在表中的信息就叫做數據
3,什麼是資料庫表?
數據表是關係資料庫中一個非常重要的對象,是其它對象的基礎,也是一系列二維數組的集合,用來存儲、操作數據的邏輯結構。根據信息的分類情況。
一個資料庫中可能包含若幹個數據表,每張表是由行和列組成,記錄一條數據,數據表就增加一行,每一列是由欄位名和欄位數據集合組成,列被稱之為欄位,
每一列還有自己的多個屬性,例如是否允許為空、預設值、長度、類型、存儲編碼、註釋等
4,資料庫的組成:
1)資料庫伺服器
2)資料庫管理系統
3)庫
4)表
5)記錄
6)數據
資料庫系統有3個主要的組成部分
1.資料庫(Database System):用於存儲數據的地方。
2.資料庫管理系統(Database Management System,DBMS):用戶管理資料庫的軟體。
3.資料庫應用程式(Database Application):為了提高資料庫系統的處理能力所使用的管理資料庫的軟體補充。
5,環境的安裝
MySQL下載地址:https://dev.mysql.com/downloads/installer/
a:官網下載mysql安裝程式 b:安裝mysql服務端 c:安裝mysql客戶端 d:客戶端連接服務端 e:通過客戶端向伺服器發送命令,執行對資料庫文件的增刪改差操作。 #1.下載:MySQL Community Server 5.7.20 https://dev.mysql.com/downloads/mysql/ #2.解壓 將官網下載的解壓包 解壓到指定目錄(例如 D://mysql-5.7.20-winx64) #3.添加環境變數 【右鍵電腦】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變數】--》【在第二個內容框中找到 變數名為Path 的一行,雙擊】 --> 【將MySQL的bin目錄路徑追加到變值值中,用 ; 分割】 C:\Program Files (x86)\Parallels\Parallels Tools\Applications;d:\mysql-5.7.16-winx64\bin #4.初始化 mysqld --initialize-insecure #5.啟動mysql服務 mysqld #6.連接mysql服務 mysql -uroot -p 回車,有密碼輸入密碼,沒有繼續回車安裝
6,庫操作
1)創建庫
CREATE DATABASE DB2 charset utf8;
2)刪除
DROP DATABASE db2;
3)使用(進入)
use db1
4)查看庫
show databases ; -- 查看當前用戶下所有的庫名
select DATABASE(); -- 查看當前使用的
show CREATE DATABASE db1; -- 查看創建庫的信息
7,表操作
1)創建表
create table info1(
id int not null auto_increment PRIMARY key,
name VARCHAR(50) not null,
sex CHAR(2) NULL
)
2)查看表
select * from info1; -- 查看表數據
DESC info1; -- 查看表結構
show create table info1; -- 查看表的創建信息
3)刪除表
drop table info;
4)修改表
-- ALTER table info1 add age int not null ; -- 添加表欄位
-- alter table info1 drop age; -- 刪除表欄位
-- alter table info1 modify name char(100) null ; -- 修改表欄位屬性
-- alter table info1 CHANGE names name varchar(50) not null; -- 修改表名稱
補充信息
alter table info1 add PRIMARY key(ID,names); -- 添加主鍵
alter table info1 drop PRIMARY key ;-- 刪除主鍵
alter table info1 alter sex set default '男'; -- 設置預設值
alter table info1 alter sex drop default; -- 刪除預設值
5)修改表名稱
rename table info1 to info; -- 修改表名
6)複製表
1.CREATE table info3 select * from info where id =1;
ps:主鍵自增/索引/觸發器/外鍵 不會 被覆制
2.複製表結構
CREATE table info5 SELECT * FROM info where 1!=1
CREATE table info4 LIKE info;
ps: 數據/觸發器/外鍵 不會被覆制
8,數據類型
MySQL支持多種類型,大致可以分為四類:數值、字元串類型、日期/時間和其他類型。
二進位類型: bit[(M)] 二進位位(101001),m表示二進位位的長度(1-64),預設m=1 整數類型: tinyint[(m)] [unsigned] [zerofill] 小整數,數據類型用於保存一些範圍的整數數值範圍: 有符號:-128 ~ 127. 無符號:255 特別的: MySQL中無布爾值,使用tinyint(1)構造。 int[(m)][unsigned][zerofill] 整數,數據類型用於保存一些範圍的整數數值範圍: 有符號: -2147483648 ~ 2147483647 無符號:4294967295 bigint[(m)][unsigned][zerofill] 大整數,數據類型用於保存一些範圍的整數數值範圍: 有符號:-9223372036854775808 ~ 9223372036854775807 無符號:18446744073709551615 作用:存儲年齡,等級,id,各種號碼等 註意:為該類型指定寬度時,僅僅只是指定查詢結果的顯示寬度,與存儲範圍無關,所以我們使用預設的就可以了 有符號和無符號的最大數字需要的顯示寬度均為10, 而針對有符號的最小值則需要11位才能顯示完全,所以int類型預設的顯示寬度為11是非常合理的 小數型: decimal[(m[,d])] [unsigned] [zerofill] 準確的小數值,m是數字總個數(負號不算),d是小數點後個數。 m最大值為65,d最大值為30。 特別的:對於精確數值計算時需要用此類型 decaimal能夠存儲精確值的原因在於其內部按照字元串存儲。 FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] 單精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。 有符號:(-3.402823466E+38 to -1.175494351E-38),0,(1.175494351E-38 to 3.402823466E+38) 無符號:0,(1.175 494 351 E-38,3.402 823 466 E+38) **** 數值越大,越不准確 **** DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] 雙精度浮點數(非準確小數值),m是數字總個數,d是小數點後個數。 有符號:(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0, (2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 無符號:0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) **** 數值越大,越不准確 **** 作用:存儲薪資、身高、體重、體質參數等 字元型: char (m) char數據類型用於表示固定長度的字元串,可以包含最多達255個字元。其中m代表字元串的長度。 PS: 即使數據小於m長度,也會占用m長度,但是在查詢時,查出的結果會自動刪除尾部的空格 特點:定長,簡單粗暴,浪費空間,存取速度快 varchar(m) varchar 數據類型用於變長的字元串,可以包含最多達65535個字元(理論上可以,但是實際上在超出21845長度後,mysql會自動幫您轉換數據類型為文本類型)。 其中m代表該數據類型所允許保存的字元串的最大長度,只要長度小於該最大值的字元串都可以被保存在該數據類型中。 PS: varchar類型存儲數據的真實內容,例如:如果'ab ',尾部的空格也會被存起來 強調:varchar類型會在真實數據前加1-2Bytes的首碼,該首碼用來表示真實數據的bytes位元組數(1-2Bytes最大表示65535個數字,正好符合mysql對row的最大位元組限制,即已經足夠使用) 如果真實的數據<255bytes則需要1Bytes的首碼(1Bytes=8bit 2**8最大表示的數字為255) 如果真實的數據>255bytes則需要2Bytes的首碼(2Bytes=16bit 2**16最大表示的數字為65535) 特點:變長,精準,節省空間,存取速度慢 sql優化:創建表時,定長的類型往前放,變長的往後放 比如性別 比如地址或描述信息 PS:雖然varchar使用起來較為靈活,但是從整個系統的性能角度來說,char數據類型的處理速度更快,有時甚至可以超出varchar處理速度的50%。 因此,用戶在設計資料庫時應當綜合考慮各方面的因素,以求達到最佳的平衡 text text數據類型用於保存變長的大字元串,可以最多到65535 (2**16 − 1)個字元。 枚舉類型(瞭解): enum An ENUM column can have a maximum of 65,535 distinct elements. (The practical limit is less than 3000.) 示例: CREATE TABLE user ( name VARCHAR(40), sex ENUM('男', '女', '未知') ); INSERT INTO user (name, sex) VALUES ('人1','男'), ('人2','女'), ('人3','未知'),('人4','人妖'); PS:人4會插入成功嗎?? 集合類型(瞭解): set A SET column can have a maximum of 64 distinct members. 示例: CREATE TABLE myset (col SET('a', 'b', 'c', 'd')); INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d'); 日期/時間類型: DATE 日期值 YYYY-MM-DD(1000-01-01/9999-12-31) TIME 時間值或持續時間 HH:MM:SS('-838:59:59'/'838:59:59') YEAR 年份值 YYYY(1901/2155) DATETIME 混合日期和時間值 YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59) TIMESTAMP 時間戳 YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某時) 作用:存儲用戶註冊時間,文章發佈時間,員工入職時間,出生時間,過期時間等 數據類型
9.數據操作
1。增
-- INSERT into info values(1,'韓涉','女');
-- INSERT into info(id,NAMES) values(2,'韓涉');
-- INSERT into info(id,NAMES) values(3,'韓涉'),(4,'韓涉'),(5,'韓涉');
-- INSERT into info(names,sex) select nameS,sex from info ;
2。刪
-- DELETE from info where id = '11'; -- 刪除指定數據
-- delete from info; -- 刪除整張表中所有的數據
TRUNCATE info; -- 清空整張表
3.改
update info set sex = '人妖', names = '韓小強' where id=12;
4.查
4.1 簡單查詢
select * from person; -- 查詢所有
select name,SEX from person; -- 按指定欄位查詢
select name,SEX as'性別' from person; -- as 表示為欄位起別名
select salary+200 from person; -- 可以進行數據列運算
select DISTINCT age,name FROM person; -- 去重覆查詢
4.2 條件查詢
1.運算符
select * FROM person WHERE age >20;
select * FROM person WHERE age <=20;
select * FROM person WHERE age <>20;
select * FROM person WHERE age !=20;
2.null 關鍵字
select * FROM person where dept_id is null;
select * FROM person where dept_id is not null;
select * FROM person where name ='';
3.邏輯運算符 and or
select * from person where age = 28 and salary =53000;
select * from person where age = 23 or salary =2000;
select * from person where not(age = 28 and salary =53000);
4.3 區間查詢
select * from person where age BETWEEN 18 and 20;
ps: between...and 前後包含所指定的值
等價於 select * from person where salary >= 4000 and salary <= 8000;
4.4集合查詢
select * from person where id = 1 or id = 3 or id = 5;
select * from person where id not in(1,3,5);
4.5 模糊查詢
select * from person where name like '%e%'; -- 包含指定參數
select * from person where name like '%e'; -- 以什麼結尾
select * from person where name like 'e%'; -- 以什麼開頭
select * from person where name like '__e%'; -- _表示單個字元站位符
select * from person where name like '__';
4.6 排序查詢
select * from person where age >30 ORDER BY salary desc; -- ASC正序 DESC倒序
select * from person ORDER BY CONVERT(name USING gbk);-- 中文排序