資料庫 資料庫就是存儲和管理數據的倉庫,用戶可以對資料庫中的數據進行增刪改查等操作。 資料庫的分類 關係型資料庫(Oracle、MySQL、SQLite等) 非關係型資料庫(Redis、MongoDB等) MySQL簡介 MySQL是一個關係型資料庫,由MySQLAB公司開發,目前屬於Oracle旗 ...
資料庫
資料庫就是存儲和管理數據的倉庫,用戶可以對資料庫中的數據進行增刪改查等操作。
資料庫的分類
-
關係型資料庫(Oracle、MySQL、SQLite等)
-
非關係型資料庫(Redis、MongoDB等)
MySQL簡介
MySQL是一個關係型資料庫,由MySQLAB公司開發,目前屬於Oracle旗下。
特點:開源、支持大型資料庫、使用標準SQL、適用於多種操作系統以及提供多種編程語言介面。
安裝(Ubuntu中):
sudo apt-get install mysql-server
sudo apt-get install mysql-client
MySQL客戶端連接服務端:
mysql -uusername -ppassword
退出:exit、quit
常用數據類型
int、bit、decimal、varchar、char、date、time、datetime、enum、text
常用數據約束
主鍵primary key、非空not null、唯一unique、預設default、外鍵foreign key
資料庫設計三範式
-
原子性
-
滿足1,表必須有主鍵,非主鍵欄位必須完全依賴於主鍵
-
滿足2,非主鍵必須直接依賴於主鍵
E-R模型
實體-關係模型,E-R模型就是描述資料庫存儲數據的結構模型
-
一對一
-
一對多
-
多對多
常用SQL語句
-
基本語句
-
查看所有資料庫 show databases;
-
創建資料庫 create datebase database_name charset=utf8;;
-
使用資料庫 use database_name;
-
查看當前使用的資料庫 selecet database();
-
刪除資料庫 drop database database_name;
-
查看當前庫中所有表 show tables;
-
建表 create table table_name(id int unsigned primary key auto_increment, name varchar(30) not null, age tinyint unsigned not null);
-
修改表
-
添加欄位 alter table table_name add sexy bit not null;
-
修改欄位類型 alter table table_name modify sexy tinyint unsigned not null;
-
修改欄位名 alter table table_name change sexy gender tinyint unsigned not null;
-
刪除欄位 alter table table_name drop gender;
-
設置外鍵 alter table table_name add foreign key(cls_id) references classes(id);
-
刪除外鍵 alter table table_name drop foreign key cls_id;
-
-
查看建表(庫)SQL語句 show create table(database) table_name(database_name);
-
刪除表 drop table table_name
-
-
表數據的基本增刪改查:
-
增
-
insert into table_name values();
-
insert into table_name(name) values('a');
-
insert into table_name values(),(),();
-
-
刪:delete from table_name where id=33;
-
邏輯刪除,設置一個bit類型欄位表示是否刪除
-
-
改: update table_name set name='c', age=18 where id=222;
-
查
-
select * from table_name;
-
select name,age from table_name;
-
-
-
as關鍵字(起別名)
-
select t.name,t.age from table_name as t;
-
-
distinct關鍵字(去重)
-
select distinct name from table_name;
-
-
where條件查詢
-
select * from table_name where id<10 and age>18;
-
-
模糊查詢
-
select * from table_name where name like '郭%' or name like '郭威_';
-
-
範圍查詢
-
select * from table_name where id between 5 and 10 or id in (3, 19);
-
-
空判斷查詢
-
select * from table_name where gender is null;
-
ifnull(age,18)判斷欄位是否為空,為空則使用提供值
-
-
排序查詢
-
select * from table_name order by age desc;
desc表示倒序排序,ase升序排序,預設升序
-
-
分頁查詢
-
select * from table_name limit start,count;
-
-
聚合函數查詢
count()、max()、min()、sun()、avg()、round(avg(age),保留小數位)
-
select avg(age) from table_name where gender=0;
-
-
分組查詢
-
select gender,avg(gender) from table_name group by gender with rollup;
with rollup 在最後新增一行查詢的記錄
-
select gender,count(*) from table_name group by gender having count(*)>5;
having 過濾分組數據,只用於group by
-
-
連接查詢
-
內連接
-
select name from table1 inner join table2 on table1.age = table2.age;
-
-
左連接
-
left join
-
-
右連接
-
right join
-
-
自連接
-
select a.id,a.name from table as a inner join table as b where a.pid=b.id;
-
-
-
子查詢
-
select * from table where age > (select avg(age) from table);
性能較差
-
-
將查詢結果插入其他表
-
insert into country(name) select hero_country from hero group by hero_country;
-
-
連接更新
-
update hero h inner join country c on h.country=c.name set h.country=c.id;
-
-
建表同時添加數據
-
create table country(id int unsigned primary key auto_increment,name varchar(30) not null)select hero_country from hero group by hero_country;
-
事務
事務就是一系列sql操作作為一個單元執行,要麼全部執行,要麼全部不執行。
-
事務的四大特性
-
原子性
-
一致性
-
隔離性
-
持久性
-
-
MySQL中使用事務需選擇InnoDB存儲引擎,其他引擎不支持事務
-
開啟事務
-
begin;
-
start transaction;
-
set autocommit=0;
MySQL預設自動提交,該設置關閉預設提交功能
-
-
提交事務
-
commit;
-
-
回滾事務
-
rollback;
-
索引
-
創建索引 alter table table_name add index name_index(name);
-
聯合索引 alter table table_name add index name_index(name,age);
-
刪除索引 alter table table_name drop index name_index;
引擎