資料庫的定義
資料庫是按照資料結構來組織、存儲和管理資料的建立在計算機儲存設備上的倉庫
分類
非結構化資料:
資料相對來說沒有固定的特點
半結構化資料:
資料之間有着相同的存儲結構 屬性 值
每一條資料的屬性可以不同
結構化資料:
建立在關系模型基礎上的資料庫,借助于集合代數等數學概念和方法來處理資料庫中的
資料。
資料之間有着相同的存儲結構 屬性 值
同一個結構模型中每一條資料的屬性都是相同的,但是值有可能不同,這些資料非常便于存儲和管理。
SQL結構化查詢語言
DDL:資料庫定義語言
DML:資料庫操作語言
DQL:資料庫查詢語言
DCL:資料庫控制語言
資料庫相關操作
- show databases; 檢視目前的所有資料庫
- create database 資料庫名 default charset utf8 collate utf8_general_ci; 建立資料庫,也可也直接create database 資料庫名
- drop database 資料庫名; 删除資料庫
- use 資料庫名; 進入資料庫
MySQL資料庫的建立和基本的查詢語句 - show tables; 檢視此資料庫下的所有表
- exit; 退出,或者輸入ctrl+z
- 建立一個表
create table tb1(
id int,
name varchar(16) not null, --
age int default 3
)default charset=utf8;
- drop table 表名; 删除一個表
- delete from 表名; 或 truncate table 表名;(速度快、無法撤銷)
- 修改表
-
添加列
alter table 表名 add 列名 類型;
alter table 表名 add 列名 類型 default 預設值;
alter table 表名 add 列名 類型 not null default 預設值;
alter table 表名 add 列名 類型 not null primary key auto_increment;
-
删除列
alter table 表名 drop column 列名 類型;
alter table tb3 drop sex;
alter table tb3 drop column age;
-
修改列類型
alter table 表名 modify column 列名 類型;
alter table tb3 modify column sex char(12);
-
修改列類型加名稱
alter table 表名 change 原列名 新列名 類型;
alter table tb3 change sex age varchar(12);
-
修改列預設值
alter table 表名 alter 列名 set default 1000;
alter table tb3 alter age set default 1000;
-
删除列預設值
alter table 表名 alter 列名 drop default;
-
添加主鍵
alter table 表名 add primary key(列名);
alter table tb3 add primary key(id);
-
删除主鍵
alter table 表名 drop primary key;
常見列類型
(常用的有int,varchar,decimal,datetime)
int[(m)][unsigned][zerofill]
int 表示有符号,取值範圍:-2147483648 ~ 2147483647
int unsigned 表示無符号,取值範圍:0 ~ 4294967295
int(5)zerofill 僅用于顯示,當不滿足五位時,按左邊補0,例如:00002;滿足時,正常顯示
tinyint[(m)] [unsigned] [zerofill]`
有符号,取值範圍:-128 ~ 127.
無符号,取值範圍:0 ~ 255
bigint[(m)][unsigned][zerofill]
有符号,取值範圍:-9223372036854775808 ~ 9223372036854775807
無符号,取值範圍:0 ~ 18446744073709551615
decimal[(m[,d])] [unsigned] [zerofill]`
準确的小數值,m是數字總個數(負号不算),d是小數點後個數。m最大值為65,最大值為30.
FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
單精度浮點數,非準确小數值,m是數字總個數,d是小數點後個數。
DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]
雙精度浮點數(非準确小數值),m是數字總個數,d是小數點後個數。
char(m)
定長字元串,m最大255,即使内容長度小于m,也會占用m長度
varchar(m)
變長字元串,m最大65535,内容小于m時會按真實資料長度存儲,如果超出m長度限制會報錯。
text
text資料類型用于儲存變長的大字元串,長文本會用,如文章、新聞
mediumtext
A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters.
longtext
A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1)
datetime
YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59)
timestamp
YYYY-MM-DD HH:MM:SS(1970-01-01 00:00:00/2037年)
對于TIMESTAMP,它把用戶端插入的時間從目前時區轉化為UTC(世界标準時間)進行存儲,查詢時,将其又轉化為用戶端目前時區進行傳回。
對于DATETIME,不做任何改變,原樣輸入和輸出。
date
YYYY-MM-DD(1000-01-01/9999-12-31)
time
HH:MM:SS('-838:59:59'/'838:59:59')
DQL資料庫查詢語言
概念
- 關系:可以了解為一張二維表,每個關系都有一個關系名,就是通常說的表名
- 元組:二維表中的一行,在資料庫中經常被稱為記錄
- 屬性:二維表中的一列,在資料庫中經常被稱為字段
- 域:屬性的取值範圍,也就是資料庫中某一列的取值限制
- 關鍵字:一組可以唯一辨別元組的屬性,資料庫中常稱為主鍵,由一個或多個列組成
- 關系模式:指對關系的描述。其格式為:關系名(屬性1,屬性2, ... ... ,屬性N),在資料庫中成為表結構
DQL查詢語句
格式:
select 列名*N from 表名 where 查詢條件1 and/or 查詢條件2 group by 列 Having 分組條件 Order by 排序
規則: sql在書寫的時候除了查詢條件之外,大小寫都可以
select * from user where uname ='zs';
SELECT * FROM USER WHERE UNAME = 'zs';
-- 屬于SQL語句的注釋
所有的查詢條件為字元串時,需要用'xxx'進行修飾,否則就會當做列名去處理
select查詢
--查詢姓名為bfy的學生資訊
select *(通配符,預設查詢所有列) from emp(表名) where(過濾符合條件的資訊)
name='bfy'(查詢條件為字元串時,需要用'xxx'進行修飾) (條件查詢:= > < != <> >= <=其中<>和!=是一個意思)
and(并列查詢條件) id in(001,002,003)(in 在某個範圍中查找)
and phone is null(空值查詢用 is null/is not null)
and score between 90 and 100 (範圍比較)
and sex like '%S%'(模糊查詢,%代表任意個字元,這裡的意思是帶有s的字元串,
同理,'%S'是最後一個字元是s的字元串,'S%'第一個字元是s的字元串。'_S%'中的
_代表占位符,占一個字元的位置,這裡的意思就是第二個字元是S的字元串,由于是模糊查詢,字母的大小寫都會查詢出來,這點要注意)
order by age(結果排序,使用asc是升序排列(預設),使用desc可以降序排序,也可也多列排序如:order by deptno,sal desc)
--顯示不帶有"R"的員工的姓名
select ename from emp where ename not like '%R%';
--顯示所有員工的姓名、工作和薪金,按工作的降序排序,若工作相同則按薪金排序.
select ename,job,sal from emp order by job desc,sal;
select結果分頁
--每次查詢前N行
select * from student limit 4;
--查詢第N頁,每頁顯示M個
select * from student limit 0,3;