1. 程式人生 > >數據庫整理

數據庫整理

double 信息 not null 表數 arch 執行 HA 存儲 cmd

1:法:創建數據庫
create database db1 charset utf8;
數據庫命名規則:字母數字下劃線 @ # $
區分大小寫
唯一性
不能使用關鍵字



2:數據庫相關操作:
查看數據庫:
show databases
show create database db1
select database();

3:選擇數據庫名
use db1

4:
刪除數據庫:
drop database db1

5 修改數據庫
alter database db1 charset utf8


二 表
創建表
create table db1(
id int perimary_key,
name varchar(255),
)

改表
alter table db1 modify name char(16),

查看
show tables
查看表的詳細信息
show create table db1;

查看表結構desc db1


刪表
drop table db1




w文件的一行內容
增:
insert into db1.t1 values
(1,‘egon‘),
(2,"alex")
(3,"lxx")


修改表名:alter table 舊表名 rename 新表名;
增加字段;alter table 表名 add 字段名 數據類型【完整性約束條件}
刪除字段 alter table 表名 drop 字段名





數據類型
整型:
1:作用
id號,各種號碼, 年齡 等級


浮點型
作用:存儲身高體重 薪資
相同點:
對於三者來說, 都能存放30位小數
不同點
精度的順序從低到高:float double decimal
float與 double類型能存放的整數位比decimal更多


整型
1:作用:姓名 地址 描述類的信息

2:分類:
char 定長
varchar 變長

對比:
char:
優點:存取速度快
缺點:浪費空間

varchar:
優點:節省空間
缺點:節省空間


日期類型:
date:1999-01-27
time :11:11:11
datetime:1999-01-27 11:11:11
year:1999



枚舉類型與集合類型:
enum:單選 只能在給定的範圍內選一個值 如 sex 性別,只能選男女
set:對選,可以選擇多個值 如何:愛好 可以有多個愛好



三: 完整性
not null 與 default
是否可空 null 表示空 非字符串
not null不可空
null 可空


default 默認值 創建列時可以指定默認值


unique 設置唯一約束


primary key 主鍵 不為空且唯一


auto-increment:約束字段為自動增長 被約束的字段必須同時被key 約束

foreign key 外鍵:foreign key(press_id) references press(id)

多對一:關聯方式 foregin key

多對多: 關聯方式 foreign key + 一張新的表

一對一 foreign key + unique


四:單表查詢語法:
select distinct 查詢字段1 查詢字段2 。。。。 from 表名
where 分組之前的過濾條件
group by 分組 依據
having 分組之後的過濾條件
order by 排序字段
limit 顯示的條數



五 多表查詢

內連接:把兩張表有對應關系的記錄鏈接成一張虛擬表
select * from t1 inner join t2 on t1.t2_id =t2.id


左練級:在內連接的基礎上保留左邊沒有對應關系的記錄
select * from t1 left join t2 on t1.t2_id=t2.id

右鏈接:在內連接的基礎上保留右邊沒有對應關系的記錄
select * from t1 right join t2 on t1.t2_id=t2.id


全連接:在內連接的基礎上 保留左右邊沒有對應關系的記錄
select* from t1 join t2 on t1.t2_id=t2.id
union
select * from right join t2 on t1.t2_id=t2.id;



六 子查詢
吧一個查詢語句用括號括起來,當做另外 一條查詢語句的條件去用,稱為子查詢:
select t1.name from t1 inner join t2 on t1.t2_id=t2.id where t2.name="技術":




七:創建視圖
視圖就是通過查詢得到一張虛擬表, 然後保存下來 下次可以直接使用
這樣可以不用重復查詢。

語法:
create view teacher_view as select tid from teacher where tanme="李萍老師"
於是查李萍老師教授的課程名sql 可以改為:
create view teacher2course as
select * from teacher inner join course
on teacher.tid = course.teacher_id;

強調:
在硬盤中,視圖自由表結構文件, 沒有表數據文件
視圖用處用於插敘 盡量不要修改視圖中的數據

刪除: drop viewteacher2course


八:觸發器:
1:在滿足對某張表數據的增刪改的情況下 自動觸發的功能稱之為觸發器
2:觸發器專門針對我們對某一漲表數據增 insert 刪delete 改update 的行為 這類行為一旦執行就會觸發觸發器的執行, 即自動運行另外一段sql代碼

3:針對插入
create trigger tri_after_insert_t1 after insert on 表名 for each row
begin
sql代碼
end

針對刪除
create trigger tri_after_delete_t1 after delete on 表名 for each row
begin
sql 代碼。。
end


針對修改
create trigger tri_after_update_t1 after update on 表名 for each row
begin
sql代碼。。。
end


04 案例
CREATE TABLE cmd (
id INT PRIMARY KEY auto_increment,
USER CHAR (32),
priv CHAR (10),
cmd CHAR (64),
sub_time datetime, #提交時間
success enum (‘yes‘, ‘no‘) #0代表執行失敗
);

CREATE TABLE errlog (
id INT PRIMARY KEY auto_increment,
err_cmd CHAR (64),
err_time datetime
);

delimiter $$
create trigger tri_after_insert_cmd after insert on cmd for each row
begin
if NEW.success = ‘no‘ then
insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time);
end if;
end $$
delimiter ;


drop trigger tri_after_insert_cmd;


九:事務
01 什麽是事務
開啟一個事務可以包含一些sql語句,這些sql語句要麽同時成功
要麽一個都別想成功,稱之為事務的原子性

02 事務的作用


03 如何用
create table user(
id int primary key auto_increment,
name char(32),
balance int
);

insert into user(name,balance)
values
(‘wsb‘,1000),
(‘egon‘,1000),
(‘ysb‘,1000);

try:
update user set balance=900 where name=‘wsb‘; #買支付100元
update user set balance=1010 where name=‘egon‘; #中介拿走10元
update user set balance=1090 where name=‘ysb‘; #賣家拿到90元
except 異常:
rollback;
else:
commit;

數據庫整理