oracle数据库学习笔记(day4)

结构化查询语言 SQL(Structured Query Language) 

分5类
1>查询语句:检索数据库中的数据
SELECT
2>数据操纵语句:修改和删除数据库中的数据
INSERT/UPDATE/DELETE
3>数据定义语句:定义数据库结构
CREATE/ALTER/DROP/RENAME/TRUNCATE
4>事务控制语句:用于撤销或提交某些操作
COMMIT/ROLLBACK/SAVEPOINT
5>数据控制语句:用于控制数据的访问权限
GRANT/REVOKE

*创建表
CREATE [GLOBAL TEMPORARY] TABLE tableName(
  colName colType [DEFAULT defaultExp CONSTRAINT constraintDef]
  [,colName colType...]
) [ON COMMIT {DELETE/PRESERVE} ROWS] 
  TABLESPACE tabSpace;

GLOBAL TEMPORARY 表示该表中的行都是临时的,这种表也称为‘全局临时表’,临时表中的行是特定于某个用户会话的,行的有效期由 ON COMMIT 子句指定。

ON COMMIT DELETE ROWS 表示提交事务后自动删除临时表中的所有数据
ON COMMIT PRESERVE ROWS 表示提交事务后保留数据直至会话结束

DEFAULT 用于指定该列的默认值
CONSTRAINT 后跟对于该列的约束

*oracle数据库表的命名规范
表名长度为1 到 128 个字符,包括字母、数字和#、$ 符号及 _;
第一个字符必须是字母;
如果名称中含有空格,则必须使用双引号。(规范上来说,一般不允许表名中有空格)

*数据库常用的数据类型
CHAR(length):定长字符串,如果实际长度不足,则在后面补空格,length介于1到2000之间,单位为字节
VARCHAR2(length):变长字符串,length表示最大长度,介于1到4000之间,单位为字节
NCHAR(length):定长UNICODE字符串,对任意字符存储的都是两字节UNICODE码,length表示字符数,1到1000之间
NVARCHAR2(length):变长UNICODE字符串,length表示字符数,1到2000之间
BLOB:(Binary Large Object)二进制大数据,最多可存放4G的数据
CLOB:单字节字符数据,最多存放4G的数据
NCLOB:UNICODE字符数据,可最多存放4G的数据
DATE:日期类型,存储日期和时间值
NUMBER(precision,scale):数字类型,可存储浮点数,也可存整数,precision表示有效数字位数,scale表示小数数字位数。oracle支持的最大精度是38位,超出位数会被截断
BINARY_FLOAT:32位浮点数,单精度浮点数字数据类型,可以支持至少6位精度,每个BINARY_FLOAT的值需要5个字节,包括长度字节
BINARY_DOUBLE:64位浮点数,双精度浮点数字数据类型,每个BINARY_DOUBLE的值需要9个字节,包括长度字节

**插入记录
×单行插入
INSERT INTO tableName(columnNameList) values(valueList)--将一行记录插入到表中
columnNameList表示列名列表,可以只列出表中的部分,valueList是值列表,数量和数据类型必须和columnNameList匹配
未列出的会设置为空值或默认值,但定义的主键列和非空列必须指定值

可以columnNameList部分可以省略,但此时valueList中需要提供表中所有列的值,而且顺序要和DESC命令列出的列顺序一致(不建议)
如需要在数据中存入单引号,则需要使用两个连续的单引号

×多行插入
INSERT INTO tableName(columnNameList)
  SELECT...FROM...WHERE...  将查询到的结果插入表中
注:
1.插入新纪录时,主键列的值不可重复,如果执行插入的行中,主键列值重复,则会出错('违反唯一约束条件')
2.如果有外键约束,那么插入数据时,所给定的列值要么为空值,要么该值必须存在于父表中,否则出错('违反完整约束条件')
3.字符串中‘’表示空值,‘ ’则是包含了一个空格的字符串

**更新纪录
UPDATE tableName SET colName=value,... WHERE...--对表中的限制条件行列进行更新
注:
1.如果要更新表中主键列的值,且该值被子表中的记录引用,则会出错('违反完整约束条件-已找到子记录')
2.如果当前表中有外键约束的列,那么更新该列的数据时,所给定的列值要么为空,要么该值必须存在于父表中,否则出错('违反完整约束条件-未找到父项关键字')

**删除记录
DELETE FROM tableName WHERE...--根据条件从表中删除记录

注:
如果要删除的表中主键列的值,如果该值被子表引用,会出错('违反完整约束条件')
(如果想实现级联删除的功能,需要在创建外键约束列时指定ON DELETE CASCADE,如果对外键约束的列指定ON DELETE SET NULL 那么当父记录被删除时,子记录对应的列自动被置为NULL)

**约束
1.约束的种类:
 1>主键约束:表中任一行在主键列的值都不能为空,主键列的值能唯一确定一条记录
 2>外键约束:外键列的值要么为空,要么等于它引用到的列的某个值,外键列只能引用另一个表中具有唯一约束性(包括主键)的列
 3>唯一约束:该列要么为空,要么不可重复
 4>检查约束:该列的值要么为空,要么符合一个表达式的限制
 5>非空约束:表中任一行在该列的值都不可为空

2.
 1>列级约束:紧跟每列的定义,列级约束是列定义的一部分
 2>表级约束:所有列都定义完毕,后续的独立定义约束的语句,表级约束可针对某一列或多列

×列级约束
CONSTRAINT constraintName[]
  主键约束:PRIMARY KEY
  外键约束:REFERENCES otherTableName(columnName)
  唯一约束:UNICODE
  检查约束:CHECK(exp)
  非空约束:NOT NULL
(1)约束命名约定
pk_table_column
fk_table_column
uq_table_column
ch_table_column
nn_table_column
(2)可不指定约束名,数据库会自动生成约束名
(3)一个列可以有多个约束

×表级约束
主键约束CONSTRAINTS pk_tbName_colName PRIMARY KEY(colName)
外键约束CONSTRAINTS fk_tbName_colName FOREIGN KEY (colName) REFERENCES tbName(colName)
检查约束CONSTRAINTS ck_tbName_colName CHECK(exp)
唯一约束CONSTRAINTS uq_tbName_colName UNIQUE(colName)

非空约束MODIFY (colName colType not null)--属于修改,不是表级约束

注:
  非空约束一般定义在列级
  联合主键只能使用表级约束

3.列默认值:DEFAULT exp
        DEFAULT短语和CONSTRAINT短语的前后顺序不能颠倒





猜你喜欢

转载自blog.csdn.net/xiaoap009/article/details/80211073
今日推荐