准備測試數據
登錄mysql,復制粘貼,運行即可
drop database if exists v_test; create database v_test default character set utf8; use v_test; DROP TABLE IF EXISTS emp; CREATE TABLE emp ( id int(11) PRIMARY KEY AUTO_INCREMENT, age int(11) DEFAULT NULL, name varchar(50) DEFAULT NULL )DEFAULT CHARSET=utf8; INSERT INTO `emp` VALUES (1, 18, '張三'); INSERT INTO `emp` VALUES (2, 20, '李四'); INSERT INTO `emp` VALUES (3, 25, '王五'); INSERT INTO `emp` VALUES (4, 22, '趙六');
前言:
常見的數據庫對象有:表,視圖,索引,存儲過程,函數,觸發器等。
1.視圖
什么是視圖:數據庫對象之一,可以理解為虛擬的表。是一個查詢語句(select)的結果集,可當做表來操作。 如果對某張表或者幾張表有頻繁的查詢操作,建議創建視圖。
1.1 如何創建:
create [or replace] view 視圖名 as select .... ;
解釋:如果使用了參數 or replace,如果該視圖已經存在,則會替換原有視圖,可選。
例如:
1.創建一個簡單視圖:create view v_emp1 as select * from emp;
2.創建一個有別名的視圖:create view v_emp2 as select age+10 as my_age from emp;
1.2 如何刪除:
drop view 視圖名;
例如:drop view v_emp;
1.3 查詢視圖創建語句
show create view 視圖名;
desc 視圖名;
1.4 查詢已有視圖
SHOW TABLES;
1.5 視圖可以當做表一樣操作
例如: 查詢:select * from v_emp1; 刪除:delete from v_emp1 where id=1; 視圖和原表數據都會被刪除 修改:update v_emp1 set name='wwb' where id=2; 視圖和原表數據都會被修改 增加:insert into v_emp1 values (5, 11, '王子'); 視圖和原表數據都會增加(一般視圖是不建議插入的,會造成原表數據污染)
1.6 可以為視圖加限定條件,從而約束使用者行為:with check option
例如: create view v_emp3 as select * from emp where age<200 with check option; 測試插入: mysql> insert into v_emp3(age) values(300); ERROR 1369 (HY000): CHECK OPTION failed 'v_test.v_emp3' mysql> insert into v_emp3(age) values(100); Query OK, 1 row affected (0.08 sec)
2.索引
是數據庫對象之一,用於提高字段檢索效率,使用者只需要對哪個表中哪些字段建立索引即可,其余什么都不做,數據庫會自行處理。
索引可以理解為書的目錄,通過目錄找內容就很快,一頁頁的翻速度就很慢。
2.1 創建簡單索引:
create index 索引名 ON 表名(字段名); 建議索引名命名規則為:index_表名
例如:對emp表的name字段創建索引。
create index index_emp on emp(name);
2.2 其他索引
1. 主鍵默認是就是個索引。 2. 創建唯一索引,該字段的值必須唯一,但允許插入空值 。 create unique index 索引名 on 表名(列名); 3. 組合索引 create index 索引名 ON 表名(字段1,字段2,...); 組合索引的最左優先原則: 組合索引的第一個字段必須出現在查詢子句中,這個索引才會被用到。如果有一個組合索引(col_a,col_b,col_c),下面的情況都會用到這個索引: col_a = "some value"; col_a = "some value" and col_b = "some value"; col_a = "some value" and col_b = "some value" and col_c = "some value"; col_b = "some value" and col_a = "some value" and col_c = "some value"; 對於最后一條語句,mysql會自動優化成第三條的樣子~~。下面的情況就不會用到索引: col_b = "aaaa"; col_b = "aaaa" and col_c = "ccc";
2.3 查詢索引
show index from 表名;
2.4 刪除索引
drop index 索引名 on 表名;