like:用來模糊查詢
#查詢姓'王'的學生信息 like%:代表一個或多個任意字符(通配符)
select * from 表名 where 字段 like '王%'
#_:只匹配一個通配符(字符)
select * from 表名 where 字段 like'小_';
#%5%:只要包含5關鍵字符即可
select *from 表名 where 字段 like '%5%';
注意:%在後,就是以這個屬性結尾。%在前,就是以這個屬性開頭,兩個%就是包含這個屬性
|------mysql 沒有檢查約束
create database mydata3;
use mydata3;
create table bank ( username varchar(20), bmoney float ) --添加約束 作用:模擬一些故障(機器或人爲) alter table bank add constraint ck_bank_bmoney check(bmoney>=1);
insert into bank values('張三',1000);
insert into bank values('李四',1);
select * from bank;
--轉賬:把“張三”轉到“李四”賬戶,轉塊 update bank set bmoney=bmoney-1000 where username='張三'; update bank set bmoney=bmoney+1000 where username='李四'; |
轉賬問題,常見的一種事務問題如何解決?
它需要兩條update語句來完成,這兩條語句是一個整體
如果其中任意一條出現錯誤,則整個轉賬業務也取消,這兩個賬戶中的餘額恢復到原來的數據,從而確保轉賬前與轉賬後的餘額不變。
解決方式:用sqlserver的方式
--解決方式 /* declare:定義變量 @@ERROR:跟蹤sql語句如果sql語句有異常(問題),@@error自動計數 */ declare @sumError int begin begin transaction;--開啓事務 --賦值 set @sumError=0; update bank set bmoney=bmoney-1000 where username='張三'; set @sumError=@sumError+@@ERROR; update bank set bmoney=bmoney+1000 where username='李四'; set @sumError=@sumError+@@ERROR; if(@sumError<>0) begin print 'sql語句執行有誤!回滾中.....'; rollback transaction;--事務回滾(後悔藥) end else begin print '執行無誤,事務提交中...........'; commit transaction;--提交事務 end end; |
|-----在mysql中事務是自動提交的
SET autocommit=0; UPDATE info SET NAME='小明' WHERE id=3; UPDATE info SET NAME='大明' WHERE id=4; COMMIT; DELETE FROM info WHERE id=8; ROLLBACK; SET autocommit=1; |
|-----視圖是一張虛擬數據表
#創建視圖
create view 視圖名稱
as
查詢語句
#查看視圖
select * from 視圖名稱;
#對視圖進行修改,添加,刪除
update 視圖名稱 set 字段=指定條件
delete from 視圖名稱
|-----多表的情況,能否用視圖進行封裝?
DELIMITER $$
USE `mydata`$$
DROP VIEW IF EXISTS `vw_subject_01`$$
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vw_subject_01` AS SELECT `a`.`sid` AS `sid`, `a`.`sexam` AS `sexam`, `a`.`sdate` AS `sdate`, `b`.`SubjectName` AS `subjectname` FROM (`score` `a` JOIN `subject` `b`) WHERE (`a`.`subjectno` = `b`.`SubjectNo`)$$
DELIMITER ; |
注意:
|-----索引可以相對提高查詢的性能,但不是絕對的!
----索引注意事項
n 查詢時減少使用*返回全部列,不要返回不需要的列
n 索引應該儘量小,在字節數小的列上建立索引
n WHERE子句中有多個條件表達式時,包含索引列的表達式應置於其他條件表達式之前
n 避免在ORDER BY子句中使用表達式
-------數據庫的三範式:
1:保證每列的原子性 每列儘量不要再分割!
2:每張表只描述一件事情
3:如果一個關係滿足2NF,並且除了主鍵以外的其他列都不傳遞依賴於主鍵列,則滿足第三範式(3NF)
3.1:後面的主鍵列,指的不是當前數據表中的主鍵!
3.2:指的是其它數據表中的主鍵列
多表的情況,儘量不要設置主外鍵(不是說不設主鍵,主鍵要設,不設外鍵!!!)