什麼是關係型數據庫?
- 關係數據庫:是建立在關係模型基礎上的數據庫,藉助於集合代數等數學概念和方法來處理數據庫中的數據。簡單說來就是關係型數據庫用了選擇、投影、連接、並、交、差、除、增刪查改等
數學方法來實現對數據的存儲和查詢。可以用SQL語句方便的在一個表及其多個表之間做非常複雜的數據查詢。安全性高。- 非關係型數據庫:簡稱NOSQL,是基於鍵值對的對應關係,並且不需要經過SQL層的解析,所以性能非常高。但是不適合用在多表聯合查詢和一些較複雜的查詢中。NoSQL用於超大規模數據的存儲。
目錄
Chapter 1 | Chapter 2 | Chapter 3 | Chapter 4 |
---|---|---|---|
啓動MySQL | MySQL基本操作 | MySQL面試常問知識點 | other |
內容
啓動MySQL
MySQL是一種關聯數據庫管理系統 由於其體積小、速度快、總體擁有成本低、MySQL軟件採用了雙授權政策,分爲社區版和企業版。
-
以下內容都是基於centos6系統的,和其它系統可能存在不同
-
安裝MySQL:
- yum install mysql-server //安裝MySQL服務器 - yum install mysql-client //安裝MySQL客戶端,通過這個才能訪問數據庫
-
使用MySQL:
- /etc/init.d/mysqld start //啓動MySQL服務 - mysql -uroot //以root用戶登錄
-
修改密碼:
- mysql> set password=password("123456");
-
查看數據庫:
- mysql> show databases;
-
退出:
- mysql> quit - mysql> exit
-
MySQL基本操作
-
DDL、DML
-
CURD
增(create)、刪(delete)、改(update)、查(Retrieve)操作。1.管理數據庫語句:
-
使用數據庫:
use test;
-
添加數據庫:
create database 數據庫名; create database test;
-
修改數據庫:
alter database 數據庫名; alter database test;
-
刪除數據庫:
drop database 數據庫名; drop database test;
-
查看所有數據庫:
show databases;
2.管理表語句:
-
添加數據表:
create table 表名( 列名 數據類型 數據約束, 列名 數據類型 數據約束 ); create table student( name varchar(20) not null, age int(4) )
-
修改數據表:
alter table 表名; 1)在表中增加新字段 alter table student add colunm name varchar(20); 2)刪除表中的字段 alter table student drop name; 3)修改表中字段的類型 alter table student modify name varchar(10);
-
刪除數據表:
drop table 表名; drop table student;
-
查看所有表:
show tables;
** DML **
3.管理數據語句:-
插入數據:
insert into 表名 (列1,列2...) values (值1,值2...); insert into student (name,age) values ('張三',20);
-
更新數據:
update 表名 set 列=修改值 where 條件; update student set name='李四' where name='張三';
-
刪除數據:
delete from 表名 where 條件; delete from student where name='李四';
-
查詢數據:
selete * from 表名 where 條件; selete * from student where name='張三';
4.各種查詢語句:
-
查詢時指定別名:
1) selete id AS '編號',name AS '姓名' from student; 2) selete id '編號',name '姓名' from student;(AS可以省略)
-
查詢時合併列:
需求:查詢每個學生的總分 selete name AS '姓名',(servlet+mysql) AS '總成績' from student; 注意:合併列的字段必須是數值類型的字段
-
查詢時去除重複(distinct):
需求:查詢有哪些地區的學生 selete DISTINCT address from student; 另一種語法 selete DISTINCT(address) from student;
-
條件查詢:
-
邏輯條件: and or
需求:查詢學生的id爲1,且姓名爲張三的學生 selete * from student where id=1 and name='張三';(交集) 需求:查詢學生的id爲2,或姓名爲張三的學生 selete * from student where id=2 or name='張三';(並集)
-
比較條件: > < >= <= = <> (between and–在…之間 包前包後)
需求:查詢servlet分數大於80分的學生 selete * from student where servlet>80; 需求:查詢mysql分數小於或等於85分的學生 selete * from student where mysql<=85; 需求:查詢servlet分數大於或等於80分,且小於或等於85分的學生 selete * from student where servlet>=80 AND servlet<=85; 代替上面語句的語法 selete * from student where servlet BETWEEN 80 AND 85; 需求:查詢年齡不等於30的學生 selete * from student where age<>30;
-
判空條件: is null, is not null, =’’, <>’’
**Null:表示沒有數據** **空字符:表示有數據** 需求:查詢沒有性別數據的學生(數據‘男’或‘女’) selete* from student where gender IS NULL OR gender=''; 需求:查詢有性別數據的學生 selete * from student where gender IS NOT NULL AND gender<>'';
-
模糊條件: like
模糊替代符號: **%:替代任意個字符** **_:替代一個字符** 需求:查詢姓“李”的學生 SELECT * FROM student WHERE NAME LIKE '李%'; 需求:查詢姓名中包含‘四’字的學生 SELECT * FROM student WHERE NAME LIKE '%四%'; 需求:查詢姓‘李’,全名只有兩個字的學生 SELECT * FROM student WHERE NAME LIKE '李_';
-
聚合函數查詢(用於統計結果)
Max()取最大值 min()取最小值 avg()取平均值 count()統計標的記錄數量 sum()求和 需求:查詢servlet的最高分 SELECT MAX(servlet) FROM student; 需求:查詢mysql的最低分 SELECT MIN(mysql) FROM student; 需求:查詢servlet的平均分 SELECT AVG(servlet) FROM student; 需求:查詢當前有幾個學生 SELECT COUNT(*) FROM student; 需求:查詢servlet成績的總和 SELETE SUM(servlet) from student;
-
分頁查詢(limit)
**Limit起始行數,查詢的行數** **起始行數從0開始** 需求:查詢第1,2條數據 SELECT * FROM student LIMIT 0,2; 分頁查詢需知道:當前頁碼,每頁顯示條數 結論分頁查詢當前頁數據:select * from student limit (當前頁碼-1)*每頁顯示條數,每頁顯示條數; 需求:學生共20條數據,每頁顯示5條,共4頁 查詢第3頁(第11到15條)的學生數據:select * from student limit 10,5;
-
查詢後排序(order by)
DESC:降序。數值從大到小,字母z-a ASC:升序。數值從小到大,字母a-z 默認情況下,按照插入的順序排序 需求:按照id的升序排序 select * from student order by id asc; 需求:按照servlet成績降序排序 select * from student order by servlet desc; 多個排序條件的情況:先按照前面的條件排序,當出現重複記錄,再按照後面的條件排序 需求:按照age升序,再按照servlet成績升序排序 select * from student order by age asc,servlet asc;
-
分組查詢(group by)
需求:查詢每個地區有多少人 SELECT address,COUNT(*) FROM student GROUP BY address; 需求:統計男女的人數 注意:where條件必須放在group by 分組之前 SELECT gender,COUNT(*) FROM student WHERE gender IS NOT NULL AND gender<>'' GROUP BY gender;
-
分組後篩選(having)
需求:查詢哪些地區的人數是大於2個的地區 查詢哪些地區多少人 2)篩選人數大於2的地區 注意:having使用在group by分組之後,對分組後的條件進行篩選 SELECT address,COUNT(*) FROM student GROUP BY address HAVING COUNT(*)>2;
5.數據約束(給表添加數據約束,從而約束用戶操作表數據的行爲)
1)默認值約束(default)
create table test( name varchar(20), gender varchar(20) default ‘男’ ) 需求:當不插入gender的時候,分配一個‘男’的默認值 注意:1)當沒有插入gender字段的時候,分配一個默認值
2)非空約束(not null)
create table test( name varchar(20) not null, gender varchar(20) ) 需求;name字段一定要有值(不能不插入數據,不能是null),這是給name添加非空約束 1)非空約束,不能不插入值 Insert into test(gender) values(‘男’); 2)非空約束,不能插入null Insert into test(name,gender) values(null,’男’);
3)唯一約束(unique)
create table test( Id int unique, name varchar(20) ) 需求:id的值不能出現重複。這時就要給id添加一個唯一約束 1)不能插入重複的值 2)唯一約束,可以插入多個null。所以唯一約束不能約束null Insert into test(id,name) values(1,’張三’);
4)主鍵約束(primary key)(唯一+非空)
注意; 1)通常情況下,我們會給每張表都設置一個主鍵字段,用來標記記錄的唯一性 2)但是不建議把業務含義字段作爲主鍵,因爲隨着業務的變化,業務字段可能出現重複 3)建議給每張表都獨立添加一個叫id的字段,把這個id字段設置成主鍵,用來作爲記錄的唯一性 create table test( Id int primary key, name varchar(20) ) 4)唯一性 5)非空性
5)自增長約束(auto_increment)
create table test( Id int primary key auto_increment, name varchar(20) ) 自增長約束:初始值爲0,每次遞增1 使用truncate table 刪除數據的時候,可以把自增長的初始值置爲0
6)外鍵約束(原來制約兩張表的關係)
員工表(副表:被別的表約束的表,外鍵設置在副表) Create table employee( Id int primary key auto_increment, name varchar(20), deptId int, 添加外鍵約束(foreign key) Constraint employee_dept_fk foreign key(deptId) references dept(id) 外鍵名 外鍵字段 ) 部門表(主表:約束別人的表) Create table dept( Id int primary key auto_increment, Name varchar(20) )
-
外鍵約束在什麼情況下會起作用?
插入數據:當往副表插入了主表中不存在的數據時,外鍵起作用 修改數據:當往副表中修改主表中不存在的數據時,外鍵起作用 刪除數據:副表中有關聯主表數據的情況下,當刪除主表數據時,外鍵起作用
-
當有了外鍵之後,應該如何管理數據呢?
插入數據:先插入主表的數據,再插入副表數據 修改數據:先修改主表數據,再修改副表數據 刪除數據:先刪除副表數據,再刪除主表數據
7)級聯技術(cascade)
級聯:當有了外鍵的時候,我們希望修改或刪除數據的時候,修改或刪除主表數據時,同時能夠影響副表的數據,這時就可以使用級聯 Create table employee( Id int primary key auto_increment, name varchar(20), deptId int, 添加外鍵約束(foreign key) 添加級聯修改:on update cascade 添加級聯修改:on delete cascade Constraint employee_dept_fk foreign key(deptId) references dept(id) on update cascade on delete cascade 外鍵名 外鍵字段 ); 部門表(主表:約束別人的表) Create table dept( Id int primary key auto_increment, Name varchar(20) );
-
-