SQL分类:
DDL–数据定义语言(CREATE,ALTER,DROP,DELETE)
DML–数据操纵语言(SELECT,DELECT,UPDATE,INSERT)
DCL–数据控制语言(GRANT,REVOKE,COMMIT)
创建数据库:
CREATE DATABASE database_name;
删除数据库:
DROP DATABASE database_name;
1、创建表:
创建新表:
create table table_name(column1 type1 [not null][primary key],column2 type2 [not null],…);
根据已有的表创建新表:
a、create table table_new like table_old;
b、create table table_new as select column1 ,column2…from table_old definition only;
2、删除表(尽量不使用)
DROP table table_name;
3、添加主键
ALTER table table_name add primary key(column);
4、删除主键
ALTER table table_name DROP primary key(column);
5、创建一般(normal)索引
CREATE INDEX index_name ON table_name(column_name,column_name) include(score);
ALTER TABLE table_name add index index_name(column list);
(该语句添加普通索引,索引值可出现多次)
ALTER TABLE table_name add fulltext index_name(column list);
(该语句指定了索引为fulltext,用于全文索引)
6、创建唯一(unique)索引
非空索引:
CREATE UNIQUE IDNEX index_name ON table_name(column);
ALTER TABLE table_name add unique(column list);
(该语句创建索引的值必须是唯一的(除了null外,null可能会出现多次))
主键索引:
CREATE PRIMARY KEY INDEX index_name ON table_name(column);
ALTER TABLE table_name add primary key(column list);
(该语句添加了一个主键,表示索引值必须是唯一的,而且不能为null)
7、删除索引
DROP INDEX index_name on table_name;
ALTER TABLE table_name DROP INDEX index_name;
删除主键索引:
ALTER TABLE table_name DROP PRIMARY KEY;
8、表名注释
SQL语句 comment on table table_name is ‘注释内容’;
9、字段注释
SQL语句 comment on column table_name.column_name is ‘注释内容’;
10、插入数据
普通插入:
INSERT INTO table_name (column1,column2)
VALUES(value1,value2);
插入检索出来的数据:
INSERT INTO table_name1(column1,column2)
SELECT column1,column2 FROM table_name2;
讲一个表的内容插入到一个新表
CREATE TABLE table_new AS SELECT * FROM table_name;
11、更新数据
UPDATE table SET column = value WHERE id = 1(条件);
12、删除数据
DELECT FROM table_name WHERE id =1;
TRUNCATE TABLE 可以清空表,删除所有行,谨慎使用:
TRUNCATE TABLE table _name;
在使用更新和删除操作的时候一定要用WHERE子句限定条件,不然会使整张表的数据被更新和删除。可以先用SELECT语句进行测试,防止错误操作。
13、增加字段
单条:
ALTER TABLE table_name add column column_name column_type difault null/not null;
多条:
begin;
alter table table_name add column_name column_type(10);
alter table table_name add column_name column_type(10);
alter table table_name add column_name column_type(10);
alter table table_name add column_name column_type(10);
commit;
alter table table_name add (column1 type1(10),column2 type2(10),column3 type3(10),column4 type4(10));
14、修改字段
ALTER TABLE table_name modify column_name column_type(default 0) null/not null;
15、删除字段
ALTER TABLE table_name DROP column_name;
16、修改字段的名称
单条:
sp_rename ‘table_name.column_name_old’,‘table_name.column_name_new’;
ALTER TABLE table_name CHANGE column_name column_name_new column_type;
多条:
ALTER TABLE table_name CHANGE column_name column_name_new column_type;
CHANGE column_name column_name_new column_type;
CHANGE column_name column_name_new column_type;
CHANGE column_name column_name_new column_type;
17、修改字段的类型
alter table table_name alter column column_name column_type(10) not null;
18、创建序列
CREATE SEQUENCE sequence_name
[START WITH n]
[INCREMENT BY n]
[{MINVALUE n|NOMINVALURE}]
[{MAXVALUE n|NOMAXVALUE}]
[{CYCCLENNOCYCLE}]
[{CACHE|NOCACHE}];
MINVALUE n|NOMINVALURE:定义序列生成器能产生的最小值,nominvalue是默认选项,表示没有最小值定义。
这时对于递减序列,系统能够产生的最小值是10^26;对于递增序列,最小值是1。
MAXVALUE n|NOMAXVALUE :定义序列能够产生的最大值,nomaxvalue是默认选项,代表没有最大值定义。
这时对于递增序列,最大值是10^27,对于递减序列,最大值为-1.
START WITH:定义序列的初始值(即产生的第一个值),默认为1.
INCREMENT BY:用于定义序列的步长。如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的。
CYCCLENNOCYCLE:表示当序列生成器的值达到限制值后是否循环。cycle代表循环。nocycle代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
CACHE|NOCACHE:定义存放序列的内存块大小,默认为20.nocache表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。
19、创建视图
careate view view_name as … select…;
20、删除视图
drop view view_name [cascade];
cascade为级联删除
21、修改序列
ALTER SEQUENCE sequence_name
[INCREMENT BY n]
[{MAXVALUE/ MINVALUE n|NOMINVALUE/NOMAXVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];
注意不能修改序列的初始值。
22、删除序列
DROP SEQUENCE sequence_name;
23、查询序列
SELECT * FROM sequence_name;
24、truncate(只能用于数据特多情况)
当自己不再需要一张表的时候,就用drop;但自己仍然需要那张表,但是要删除所有记录时,用truncate;只需要删除部分记录的时候就用delete,记得用where限定。
truncate是一个能够快速清空资料表内所有资料的sql语句。并且能针对具有自动递增值的字段,做计数重置归零重新计算的作用。
eg.truncate table table_name;
注:
a、truncate table在功能上与不带where子句的delete语句相同;二者均删除表中的所有行。但truncate table 比delete速度快,且使用的系统和事务日志资源少。
b、delete语句此删除一行,并在事务日志中为所删除的每行记录一项。truncate table通过释放存储表数据所用的数据也来删除数据,并且只在事务日志上记录页的释放。
c、truncate table删除表中的所有行,但表的结构及其列、约束、索引等保持不变。新行标识所用的计数重置为该列的种子。如果想保留标识计数值,请改用delete。如果删除表定义及其数据,请用drop table。
d、对于由foreign key约束引用的表,不能使用truncate table,而应使用不带where子句的delete语句。由于truncate table不记录在日志中,所以它不能激活触发器。
e、truncate table不能用于参与了索引视图的表。
f、对用truncate table删除数据的表上增加数据时,要使用update statistics来维护索引信息。
g、如果有rollback语句,delete操作将被撤销,但truncate不会撤销。
/