转载时注明地址 http://fuchangle.iteye.com/blog/1772523
SQL基础语法(1)访问 http://fuchangle.iteye.com/blog/1772395
索引
索引是存放在模式中的一个数据库对象,虽然索引总是从属于数据表,但它也和数据表一样属于数据库对象。创建索引的唯一作用
就是加速对表的查询,索引通过使用快速访问方法来快速定位数据,从而减少磁盘的I/O。
索引作为数据库对象,在数据字典里独立存放,但不能独立存在,必须属于某个表。
创建索引有两种方式
自动:当在表上定义主键约束、唯一约束和外键约束时,系统会为该数据列自动创建对应的索引。
手动:用户可以通过create index...语句来创建索引。
删除索引也有两种方式。
自动:数据表被删除时,该表上的索引自动被删除。
手动:用户可以通过drop index...语句来删除指定数据表上的指定索引。
创建索引的语法格式如下:
create index index_name on table_name (column[,column]...);
下面的索引将会提高对employess表基于last_name字段的查询速度。
create index emp_last_name_idx on employees(last_name);
也可以同时对多列建立索引如:
#下面语句为employees的first_name和last_name两列同时建立索引 create index emp_last_name_index on employees(first_name, last_name);
MySQL中删除索引需要指定表,采用如下语法格式
drop index 索引名 on 表名
如下SQL语句删除了employees表中的emp_last_name_idx的索引
drop index emp_last_index on employees;
索引缺点:
1.与书的目录相似,当数据表中的记录被添加、删除、修改时,数据库系统需要维护索引,因此有一定的系统开销。
2.存储索引信息需要一定的磁盘空间。
------------------------
视图
视图看上去非常像一个数据表,但它不是数据表,因为他并不能存储数据,视图只是一个或多个数据表中数据的逻辑显示。
优点:
1.可以限制对数据的访问。
2.可以使复杂的查询变的简单。
3.提供了数据的独立性。
4.提供了对相同数据的不同显示。
因为视图只是数据表中数据的逻辑显示--也就是一个查询结果,所以创建视图就是建立视图名和查询语句的关联。如下:
create or replace view 视图名 as subquery
从上面的语法可以看出,创建、修改视图都可使用上面语法。上面语法的含义是,如果该视图不存在,则创建视图;如果指定的视
图名的视图已经存在,则使用新视图替换原有的视图。后面的subquery就是一个查询语句,这个查询可以非常复杂。
所谓视图的本质,其实就是一条被命名的SQL查询语句。
一旦建立了视图以后,使用该视图语使用数据表就没有上面区别了,但通常只是查询视图数据,不会修改视图里的数据,因为视图
本身就没有存储数据。
create or replace view view_test as select teacher_name, teacher_pass from teacher_table;
大部分时候,我们不推荐直接改变视图的数据,因为视图并不存储数据,它只是相当于一条命名的查询语句而已。为了强制不允许
改变视图的数据,mysql允许在创建视图时使用with check option字句,使用该字句创建视图不允许修改如下:
create or replace view view_test as select teacher_name form teacher_table #指定不允许修改视图的数据 with check option;
删除视图使用如下语句:
drop view 视图名
如下SQL语句删除了前面刚刚创建的视图名
drop view view_test;
---------------------------------------------
DML语句的语法
与DDL操作数据库对象不同,DML主要操作数据表里的数据,使用DML可以完成以下3中任务:
1.插入新数据
2.修改已有的数据
3.删除不需要的数据
DML语句由insert into、update、和delete from 3个命令组成。
1.insert into语句
insert into用于向数据表中插入数据。对于标准的SQL语句而言,每次只能插入一条记录。insert into语法格式如下:
insert into table_name [(column[,column..]) values(value,[,vlaue...]);
执行插入操作时,表名后可以用括号列出所有需要插入值的列名,而value后用括号列出对应需要插入的值。
例如:
insert into teacher_table value ('xyz');
在一些特殊的情况下,我们可以使用带子查询的插入语句,带子查询的插入语句可以一次插入多条记录,
insert into student_table(student_name) select teacher_name from teacher_table2;
2.update语句
update语句用于修改数据表的记录,每次可以修改多条记录,通过使用where子句限定修改哪些记录。没有where子句则意味着where
表达式的值总是true,即该表的所有记录都会被修改,update语句的语法格式如下:
update teacher_table set column1 = value1[,column=value2]... [WHERE condition];
例如下:
update teacher_table2 set teacher_name = '孙悟空'; 也可以通过添加where条件来指定只修改特定记录,如下: update teacher_table set teacher_name = '猪八戒' where teacher_id > 1;
3.delete from 语句
delete from语句用于删除指定数据表的记录。使用delete from语句删除时不需要指定列名,因为总是正行地删除。
使用delete from语句可以一次删除多行,删除哪些行采用where字句限定,只删除满足where条件的记录。没有where字句限定将会
把表里的全部记录删除。
delete from语句的语法格式如下:
delete from table_name [WHERE condition];
如下SQL语句将会把student_table2表中的全部记录全部删除:
delete from studnet_table2
也可以使用where条件来限定只删除指定记录,如下SQL语句所示:
delete form teacher_table2 where teacher_id > 2;
待续...