SQL 基础之DDL语句创建和管理表(十四)

数据库对象

Object 描述
基本的数据存储集合,由行和列组成
View 从一张表或多张表中抽出的 逻辑上相关的数据集合
序列 生成规律的数值
index 索引 提高查询性能
Synonym 别名 给对象起的别名

表名和列名注意事项:

  • 必须以字母开头
  • 必须在 1–30 个字符之间
  • 必须只能包含 A–Z, a–z, 0–9, _, $, 和 #
  • 必须不能和用户定义的其他对象重名
  • 必须不能是Oracle的保留字

CREATE TABLE  语句

必须具有:

– CREATE TABLE 权限

– 存储空间

必须指定:

– 表名

– 字段名称,字段数据类型和字段大小

语法:

CREATE TABLE [schema.]table_name (column datatype [DEFAULT expr][, ...]);

引用其他用户的表

  • 其他用户定义的表不在当前用户的方案中
  • 应该使用用户名作为前缀,引用其他用户定义的对象

DEFAULT  选项

在插入的过程中,为列指定一个默认值。

... hire_date DATE DEFAULT SYSDATE, ...

字符串, 算数表达式, 或SQL 函数都是合法的

其它列的列名和 伪列 是非法的

默认值必须满足列的数据类型定义

例如:CREATE TABLE hire_dates  (id NUMBER(8), hire_date DATE DEFAULT SYSDATE);

创建表

create table dept

(deptno number(2),

dname varchar2(14),

loc varchar2(13),

create_date date default sysdate);

确认创建是否成功:

desc dept

Name   Null?    Type

----------------------------------------- -------- ----------------------------

DEPTNO    NUMBER(2)

DNAME    VARCHAR2(14)

LOC    VARCHAR2(13)

CREATE_DATE    DATE

数据类型

数据类型 描述
VARCHAR2(size) 可变长字符数据
CHAR(size) 定长字符数据
NUMBER(p,s) 可变长数值数据 
DATE 日期和时间值
LONG 可变长字符数据(最大可达到 2 GB)
CLOB 字符数据(最大可达到 4 GB)
RAW and LONG RAW 二进制数据
BLOB 二进制数据 (最大可达到 4 GB)
BFILE 存储外部文件的二进制数据 (最大可达到 4 GB) 
ROWID base-64 系统编码的行唯一地址 

日期数据类型

数据类型
TIMESTAMP 带小数秒的日期型
INTERVAL YEAR TO MONTH 作为年和月的时间间隔存储
INTERVAL DAY TO SECOND 作为天、小时、分和秒的时间间隔存储

包含的约束

  • 约束为表级的强制规则。
  • 如果表有依赖关系,约束能防止表的删除。
  • 下面是有效的约束类型:

– NOT NULL

– UNIQUE

– PRIMARY KEY

– FOREIGN KEY

– CHECK

约束准则

  • 如果不指定约束名 Oracle server 自动按照 SYS_Cn 的格式指定约束名
  • 在什么时候创建约束:

– 建表的同时

– 建表之后

  • 可以在表级或列级定义约束
  • 可以通过数据字典视图查看约束

定义约束

语法:

create table [schema.]table

(column datatype [default expr]

[column_constraint],

...

[table_constraint][,...]);

列级约束语法

column [CONSTRAINT constraint_name] constraint_type,

表级约束语法:

column,...

[CONSTRAINT constraint_name] constraint_type

(column, ...),

列级约束示例

create table employees(

employee_id number(6)

constraint emp_emp_id_pk primary key,

first_name varchar2(20),

...);

表级约束语法:

column,...

[constraint constraint_name] constraint_type

(column, ...),

列级约束示例:

create table employees(

employee_id number(6)

constraint emp_emp_id_pk primary key,

first_name varchar2(20),

...);

表级约束示例:

create table employees(

employee_id number(6),

first_name varchar2(20),

...

job_id varchar2(10) not null,

constraint emp_emp_id_pk

primary key (employee_id));

NOT NULL 约束

确保该列不允许空值:

UNIQUE 约束

可以定义在表级或者列级:

create table employees(

employee_id number(6),

last_name varchar2(25) not null,

email varchar2(25),

salary number(8,2),

commission_pct number(2,2),

hire_date date not null,

...

constraint emp_email_uk unique(email));

PRIMARY KEY  约束

FOREIGN KEY  约束

可以定义在表级或者列级:

create table employees(

employee_id number(6),

last_name varchar2(25) not null,

email varchar2(25),

salary number(8,2),

commission_pct number(2,2),

hire_date date not null,

...

department_id number(4),

constraint emp_dept_fk foreign key (department_id)

references departments(department_id),

constraint emp_email_uk unique(email));

FOREIGN KEY约束:关键字

  • FOREIGN KEY:在表级指定子表中的列
  • REFERENCES:标识在父表中的列
  • ON DELETE CASCADE:当父表中的列被删除时,子表中相对应的列也被删除
  • ON DELETE SET NULL:子表中相应的列置空

CHECK 约束

定义每一行必须满足的条件

以下的表达式是不允许的:

– 出现CURRVAL, NEXTVAL, LEVEL, 和ROWNUM 伪列

– 使用 SYSDATE, UID, USER, 和 USERENV 函数

– 在查询中涉及到其它行的值

CREATE TABLE:  示例

create table employees

( employee_id number(6)

constraint emp_employee_id primary key

, first_name varchar2(20)

, last_name varchar2(25)

constraint emp_last_name_nn not null

, email varchar2(25)

constraint emp_email_nn not null

constraint emp_email_uk unique

, phone_number varchar2(20)

, hire_date date

constraint emp_hire_date_nn not null

, job_id varchar2(10)

constraint emp_job_nn not null

, salary number(8,2)

constraint emp_salary_ck check (salary>0)

, commission_pct number(2,2)

, manager_id number(6)

constraint emp_manager_fk references

employees (employee_id)

, department_id number(4)

constraint emp_dept_fk references

departments (department_id));

违反约束

update employees

set department_id = 55

where department_id = 110;

主键行被另一张表外键引用,那么您不能删除主键行

使用子查询创建表

使用 CREATE TABLE 语句和 AS subquery 选项,将创建表和插入数据结合起来完成。

CREATE TABLE table  [(column, column...)]  AS subquery;

指定的列和子查询中的列要一一对应。

通过列名和默认值定义列。

create table dept80

as

select employee_id, last_name,

salary*12 annsal,

hire_date

from employees

where department_id = 80;

ALTER TABLE 语句

使用 ALTER TABLE 语句您可以:

  • 添加一个新列
  • 修改现有的列定义
  • 新的列定义默认值
  • 删除一列
  • 重命名列
  • 将表更改为只读状态

Read-Only 表

使用 ALTER TABLE 将表改为只读模式:

表修改过程中阻止DDL和DML的更改

将表改回到 读/写 模式

alter table employees read only;

-- perform table maintenance and then

-- return table back to read/write mode

alter table employees read write;

删除表

  • 表移动到回收站
  • 使用 PURGE 子句可彻底删除表
  • 表上依赖的对象失效同时删除对象权限

drop table dept;

时间: 2024-08-07 08:36:46

SQL 基础之DDL语句创建和管理表(十四)的相关文章

DDL语句创建和管理表

1.create table 1.1name  type  default value create table test3 ( tid number, tname varchar2(20), hiredate date default sysdate ) 1.2数据类型:行地址rowid,为字符串相当于指针,指向数据文件的位置(.dbf)

oracle中用SQL语句创建和管理表

表名和列名的命名规则: 必须以字母开头 必须在1-30个字符之间 只能包含A-Z,a-z,0-9,_,$,# 不能与用户定义的其它对象重名 不能使用ORACLE的保留字 创建前具备的条件: CREATE TABLE权限 建表时必须指定: 表名 列名,列的数据类型,最大长度 数据类型: varchar2(size) 变长字符型(最大长为4000字符) char(size)  定长字符型(最大2000字符) number(p,s)  数值型 date   日期型 long   变长大字符型(最大2G

oracle sql 基础(四):数据定义语言(创建和管理表、视图)

数据定义语言 (Data Definition Language, DDL) 是SQL语言集中负责数据结构定义与数据库对象定义的语言,由CREATE.ALTER与DROP三个语法所组成.数据库对象包括表.视图.索引.同义词.序列等(TABLE/VIEW/INDEX/SYN/SEQUENCE).我们先对创建和管理表和视图进行一个介绍. 一.创建和管理表 数据表是数据库中一个非常重要的对象,是其他对象的基础.可分为用户表和数据字典两类. 1.创建表(CREATE TABLE) CREATE TABL

SQL Server 【附】创建"商品管理数据库"、"学生选课数据库"的SQL语句

附:(创建“商品管理数据库”的SQL语句) --建立"商品管理数据库"数据库-- create database 商品管理数据库 on(name='商品管理数据库_m', filename='D:\商品管理系统\商品管理数据库_m.mdf', size=6mb,filegrowth=1mb,maxsize=unlimited) log on(name='商品管理数据库_l', filename='D:\商品管理系统\商品管理数据库_l.ldf', size=1,filegrowth=1

sql基础之DDL(Data Definition Languages)

好久没写SQL语句了,复习一下. DDL数据定义语言,DDL定义了不同的数据段.数据库.表.列.索引等数据库对象的定义.常用的DDL语句包括create.drop.alter等等. 登录数据:mysql -uroot -p sql 命令一般以英文分号或者\g结束,注意这个\不是/. 1.查看数据库 show databases;注意这个后面的s. 2.创建数据库create database wangking;注意这里没有s. 3.选择数据库use siyecao;列出数据库中的表show ta

DML语句、创建和管理表

insert语句基本语法: insert into table(column) values(values); insert into dept (deptno,dname,loc) values(50,'development','detroit');                            //当所有列都要插入数值时可不写第二行,直接按照顺序写第三行 update语句: update dept set deptno=11 where loc='zjk'; delete语句: d

Greenplum+Hadoop学习笔记-14-定义数据库对象之创建与管理表

6.4.创建与管理表 6.4.1.创建表 通过查询CREATETABLE命令帮助如下所示: Command:     CREATE TABLE Description: define a new table Syntax: CREATE [[GLOBAL | LOCAL] {TEMPORARY | TEMP}] TABLE table_name (     -->指定表类型:全局|本地临时 [ { column_name data_type [ DEFAULT default_expr ]   

Oracle学习(9):创建和管理表

创建和管理表 表名和列名命名规则 必须以字母开头 必须在1–30 个字符之间 必须只能包含A–Z, a–z, 0–9, _, $, 和# 必须不能和用户定义的其他对象重名 必须不能是Oracle 的保留字 Oracle默认存储是都存为大写 数据库名只能是1~8位,datalink可以是128位,和其他一些特殊字符 CREATE TABLE语句 必须具备: ?CREATETABLE权限 ?存储空间 必须指定: ?表名 ?列名, 数据类型, 数据类型的大小 创建表的列的值的数据类型 SQL> cre

创建和管理表【weber出品必属精品】

创建表 必须有 : 1. CREATE TABLE 的权限 SQL> conn /as sysdba 已连接. SQL> create user test default tablespace users identified by a; 用户已创建. SQL> conn test/a ERROR: ORA-01045: user TEST lacks CREATE SESSION privilege; logon denied 警告: 您不再连接到 ORACLE. SQL> co