1、insert语句

        1):insert low_priority into ,指示降低insert 语句的优先级,在一定程度上能够提高整体的性能。

因为数据库经常被多个客户方法,此时相对重要的是select语句,当降低了insert等语句后,select自然优先了。

这种方式还适用与update和delete语句。

        2):一个sql语句插入多条数据

insert into table(value1,value2)
values(
'myValue1',
'myValue2'
),
(
'myValue3'
'myValue4'
);

用单条insert语句处理多个插入比使用多条insert语句快,能够提高insert性能。

        3):插入检索出来的数据

insert into table1(value1,value2)

select valuetemp1,valuetemp2 from table2;


2、update语句
update table1
set column='value1'
where id=100;

#使用update语句时记得使用where,否则会更改全部

#update语句中可以用子查询,使得能用select语句检索出的数据更新列数据。

#ignore关键字

        正常情况,使用update时,如果更新多条数据,并且中间出错了,则所有出错前

更新完的数据都会恢复到它们原来的值。

可以通过设置ignore关键字设置成:即使是发生错误,也继续进行更新:

update ignore table1.......


3、delete语句

delete from table
where id=100;

#注意使用where,否则会删除所有行

#当要删除表所有行是,使用truncate table语句,更快。


4、创建表相关

#每个表只允许一个auto_increment列,而且它必须被索引

#当表中一个列设定为auto_increment时,还可以通过insert插入该值,只要该值是唯一的。

#可以通过select last_insert_id(),来获得最新的自增长(auto_increment)的值。


5、引擎类型

        mysql支持多种引擎,它们具有各自不同的功能和特性,为不同的任务选择正确的引擎。

#InnoDB:一个可靠的事务处理引擎,它不支持全文本搜索;

#MEMORY:在功能上等同于MyISAM,但由于数据存储再内存(不是硬盘),所以速度很快,特别适合临时表。

#MyISAM:是一个性能极高的引擎,它支持全文本搜索,但是不支持事务处理。


不同的表之间引擎类型可以混用,不过值得注意的是:

外间不能跨引擎,即用一个引擎的表不能引用具有不同引擎的表的外键。


6、表的维护

#增加一个列
alter table table1
add volumn1 char(20);

#增加外键
alter table orderitems
add constraint fk_orderitems_orders
foreign key (order_num) references orders (order_id);

#删除表

drop table table1;


#重命名表

rename table table1 to table2;


7、视图相关

create view viewname as select * from table1;

        1):视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询。

#利用视图可以保护数据,即授予用户部分表的访问权限而不是整张表的权限。

#性能问题:因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。

如果你用多个联结和过滤创建了复杂的视图或者嵌套了视图,可能会使性能下降的非常厉害。

#order by可以用再视图中,但是如果该视图检索数据的select语句中也有order by,那么该视图的

order by将被覆盖。

#视图不能索引,也不能有关联的触发器或默认值。

#视图可以和表一起用。

        2):维护视图相关操作

#使用show create view viewname;来查看创建视图的语句。

#删除视图:drop view viewname;

#更新视图方法

        一:先drop再create;

        二:直接create or replace view;如果没有的话,会新建一个。


8、最后一个小段,视图可以更新么?

        上述讲的视图都是select语句使用的,然而是否可以更新么?

看情况,有些情况是可以的。通常,视图是可以更新的,即可以使用insert、update、和

delete,更新一个视图将更新至其基表。如果你对视图增加或者删除,实际上是作用与基表。

但是并不是所有视图都可以更新的,如果视图定义中有一下操作,则不能进行视图更新:

#分组(使用group by 和having)

#联结

#子查询

#并

#聚集函数

#distinct

从上面可以看出,现实中大部分视图都是不可以更新的,所以一般,应该将视图用于检索而不是更新!!