數據庫整理
阿新 • • 發佈:2018-06-10
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;
數據庫整理