SQL基础语法(2)

这篇blog是SQL基础语法,只是作为我平时查阅和备份,仅适合初学者学习阅读,高手绕行。
转载时注明地址 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;


待续...

猜你喜欢

转载自fuchangle.iteye.com/blog/1772523