视图
Create VIEW 名字 As sql语句
不是一张真实的表,可以当作一张表来使用。一般不会进行更新操作。
索引
维护有代价
加索引能够快速的查到某项数据,替代了全表扫描
索引是一个“内置表”,该表的数据是对某个真实表的某个(些)字段的数据做了“排序”之后的存储形式。
其作用是:极大提高表查找数据的速度!——其效率(速度)可以匹敌二分查找(非常著名的算法)。
注意:索引在提高查找速度的同时,降低增删改的速度。对创建(设计)表来说,建立索引是非常简单的事,形式如下:
索引类型 (字段名1,字段名2, .... ) //可以使用多个字段建立索引,但通常是一个
MySQL目前主要有以下几种索引类型:
1.普通索引
2.唯一索引
3.主键索引
4.组合索引
1、普通索引:key(字段名1,字段名2, .... ):它只具有索引的基本功能——提速(其他索引不但有提速还有额外功能)
2、唯一索引:unique key (字段名1,字段名2, .... ) duplicate
3、主键索引:primary key (字段名1,字段名2, .... ) unique key + not null
CREATE TABLE product(
id INT PRIMARY KEY auto_increment,
`name` VARCHAR(10),
address VARCHAR(50),
KEY(`name`)
);
存储过程
-- 存储过程 类似于java中函数
CREATE TABLE product(
id INT PRIMARY KEY auto_increment,
`name` VARCHAR(10),
address VARCHAR(50),
KEY(`name`)
);
在“;”处不能够称之为一条完整的SQL语句,所以需要将结束条件重新定义,通过delimiter。
触发器
是一个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件触发。
触发器经常用于加强数据的完整性约束和业务规则等。
CREATE TABLE student_total(
total INT
);
SELECT * FROM student_total;
INSERT INTO student(`name`, age, gender) VALUES('xxxx11',20,'男');
--触发器
DELIMITER $$
CREATE TRIGGER student_insert_trigger
AFTER INSERT ON student FOR EACH ROW
BEGIN
UPDATE student_total SET total=total+1;
END $$
DELIMITER ;
char 与 varchar区别
char:定长,char(M),M代表宽度,即:可容纳的字符数 0<=M<=255。
char(10):可存10个字符
varchar:变长,varchar(M), 0<=M<=65535
区别:char是定长:M个字符,如果存的小于M个字符,实占M个字符。
varchar:M个字符,存的小于M个字符,设定为N,N<M,实占N个字符。
选择原则:1、空间利用率。2、速度上:定长的速度快。
varchar利用率永远达不到100%,不适合存储像性别这种一个字符的内容
数据库存储引擎
常用:Myisam ,批量插入、查询速度快, 不支持事务, 锁表
Innodb, 批量插入、查询相对较慢,支持事务, 锁行. (默认)
事务
概念:事物是指逻辑上的一组操作,组成这组操作的各个单元,要么全部执行成功,要么全部实行失败。
例:李三: --->支出 500, 李三 -500
赵四: ---->收到500, 赵四 +500
开启事务: start transaction;
Sql....
Sql....
Commit 提交
rollback 回滚
注意: 当一个事务commit,或者rollback就结束了
事务基本原理
1、不用事务,直接作用于表
2、用了事务之后