SQL
一、什么是sql?
百度词条介绍到,结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
简单地说,sql是一门操作数据库的语言。
二、SQL分类
结构化查询语言包含6个部分:
1、数据查询语言(DQL:Data Query Language):
其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
2、数据操作语言(DML:Data Manipulation Language):
其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
3、事务处理语言(TPL):
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。
4、数据控制语言(DCL):
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
5、数据定义语言(DDL):
其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
6、指针控制语言(CCL):
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。
三、对表格的基本操作
1、创建表格——
语法:CREATE TABLE [schema.]table_name(
column_name datatype [default default_value] [column_constaint],
……
[table_constaint]
)
~a、table_name——表名
~b、column_name——字段名
注意:Oracle表名与字段名命名规则:
i、必须以字母开始
ii、必须是1到30 个字符长度
iii、只能包含字母、数字、下划线“_”、美元符“$”和井号“#”
Ⅳ、不能使用Oracle的关键字
Ⅴ、同一个用户所拥有的对象之间不能重名
~c、datatype——数据类型
Oracle常用数据类型:
i、char(size):存储固定长度的字符串。参数size指定了长度,如果存储的字符串长度小于size,用空格填充,默认长度为1,最长不超过2000个字节;
ii、varchar2(size):存储可变长度的字符串。参数size指定了该字符串的最大长度。默认长度为1,,最长不超过4000个字节;
iii、number(p,s):存储变长的数字。既可以存储浮点数,也可以存储整数。p表示数字的最大位数(如果是小数包括整数部分、小数部分,不包括小数点,p默认是38位),s指小数位数
~d、[default default_value]——设定字段默认值
~e、[column_constaint]约束——
①、not null:指定字段不能为空,只能定义为字段级约束;
②、unique:指定字段的值(或字段组合的值)对于表中所有的行必须是唯一的。
③、primary key:指定主键。该约束强制字段或字段组合必须具有唯一性且每个字段不能为空。可以为字段级别约束,也可以为表级别约束。注意:每个表只能创建一个主键
④、foreign key:指定一个字段或字段组合作为一个外键(即外来的主键或唯一键),该外键和另一个表的主键或唯一键建立起一个关系。外键值必须匹配父表中存在的值;如果父表主键值或唯一键值是子表的外键值,则父表中的这条数据不能删除,Oracle数据库中外键的值可以为null。
----设置表中字段为外键时,该字段对应父表字段必须是父表的主键或唯一键,否则创建失败
----外键数据类型要和父表对应字段数据类型一致,否则会出错;
----另外字段间长度也建议一致;
⑤、check:指定列值必须满足check中条件,否则无法进行添加或修改;一个字段可以定义多个check约束。
2、修改表格——
1、修改表字段:
a、添加字段
alter table student
add (sex char(2) default ‘1’ constraint student_sex_type check(sex=‘1’ or sex=‘2’))
注意:新添加的字段在表的最后一列,不能指定字段的位置,这与MySQL数据库不同(MySQL数据库可以通过after设定添加字段的先后顺序)
b、修改字段
alter table student
modify(name varchar2(12))
注意:字段的修改包括修改数据类型(只有对应列为空指才可以修改)、大小和默认值,其中默认值的修改只会影响后来插入表的数据,对之前的数据不会产生影响。
c、删除字段
alter table student
drop(sex)
注意:
①、一次只能删除一个字段;
②、一个表至少要保留一个字段;
③、如果所删除列(如publisher表中id列)是另一个表的外键(book表publisher_id)则该列(publisher表中id列)无法删除,
2、修改表字段约束:
a、添加约束
alter table student
add constraint student_id_pk primary key(id);–将student表id列设为主键
注意:
1、可以一次添加多个约束
2、不能通过添加约束为某个字段添加not null约束,只能通过修改字段为其指定not null;
b、删除约束
alter table student
drop constraint student_sex_type;–依据约束名删除约束
alter table student
drop primary key–依据约束类型删除约束
alter table student
drop unique(id) --依据约束类型删除约束
注意:drop子句后面可以使用cascade,意为删除约束的同时与其相依赖的约束也一同删除,
c、启用或禁用约束
禁用约束:
alter table student
disable constraint student_sex_type;–禁用约束
注意:disable子句后面可以使用cascade,意为禁用约束的同时与其相依赖的约束也一同禁用
启用约束:
alter table student
enable constraint student_sex_type;–启用约束,注意:enable后面不能使用cascade关键字
注意:约束无法修改,只能通过先删除再创建的方式间接修改字段约束。
3、表重命名
rename 旧名字 to 新名字
4、截断表
truncate table 表名——不用执行commit就可以将表数据删除
delete from 表名——必须执行commit才可以将表数据删除
delete、drop、truncate的区别
delete删除数据必须使用commit,否则不能真正删除
Drop用于删除表,与此同时表中保存的数据也一并被删除
Truncate用于截断表,与此同时表中数据也一并被删除
5、删除表
drop table 表名
6、注释
表注释
comment on table 表名 is ‘注释内容’;
字段注释
comment on column 表名.字段名 is ‘注释内容’;