1、CREATE TABLE 的权限拥有存储空间你可以指定表名称列名称,列长度,列类型,SQL CREATE TABLE dept 2(deptno NUMBER(2),3 dname VARCHAR2(14),4 loc VARCHAR2(13);Table created.,SQL DESCRIBE dept,Name Null?Type-DEPTNO NUMBER(2)DNAME VARCHAR2(14)LOC VARCHAR2(13),确认创建的结果,创建表,引用其他用户的表,属于其他用户的表,不在当前用户的模式下使用这些表的属主名作为前缀,在插入期间可以指定默认值文字值,表达式,或者SQ
2、L函数是合法值其他列的名或者伪列是非法的默认的数据类型必须匹配列的数据类型,DEFAULT选项,.hire_date DATE DEFAULT SYSDATE,.,CREATE TABLE hire_dates(id NUMBER(8),hire_date DATE DEFAULT SYSDATE);Table created.,用户表由用户创建和维护的一系列表的集合包含用户的信息数据字典由Oracle 服务器创建和维护的一系列表的集合包含数据库的信息,Oracle数据库中的表,数据类型描述VARCHAR2(size)变长字符数据,size为最大长度CHAR(size)定长字符数据,size为
3、最大长度NUMBER(p,s)数字类型,p为精度,s为刻度DATE 日期和时间值LONG 可以保存最大长度为 2GB的字符数据CLOB可以保存最大长度为 4GB的单字节字符数据RAW and LONG RAW 存储二进制数据BLOB最大为 4GB的二进制数据类型BFILE在外部文件中存储的二进制数据;最大为4GB,数据类型,日期数据类型,几种日期数据类型,日期数据类型,TIMESTAMP 是DATE数据类型的扩展存储DATE日期类型的年,月,日数据类型加上小时,分钟,和带有小数的秒可以在TIMESTAMP上选择使用和不使用时区,TIMESTAMP(fractional_seconds_prec
4、ision),TIMESTAMP(fractional_seconds_precision)WITH TIME ZONE,TIMESTAMP(fractional_seconds_precision)WITH LOCAL TIME ZONE,日期数据类型,INTERVAL YEAR TO MONTH 数据类型使用年和月日期字段存储一段时间INTERVAL DAY TO SECOND 数据类型使用天,小时,分钟,秒存储一段时间,INTERVAL YEAR(year_precision)TO MONTH,INTERVAL DAY(day_precision)TO SECOND(fractional
5、_seconds_precision),INTERVAL DAY TO SECOND,INTERVAL DAY TO SECOND 数据类型使用天,小时,分钟,秒存储一段时间,INTERVAL 4 5:12:10.222 DAY TO SECOND(3)表示:4 days,5 hours,12 minutes,10.222 seconds,INTERVAL 4 5:12 DAY TO MINUTE表示:4 days,5 hours and 12 minutes.INTERVAL 400 5 DAY(3)TO HOUR表示:400 days 5 hours.INTERVAL 11:10.2222
6、222 HOUR TO SECOND(7)表示:11 hours,12 minutes,and 10.2222222 seconds.,约束,约束是强加到表中的列上的规则提供了以下五种约束:NOT NULLUNIQUE PRIMARY KEYFOREIGN KEYCHECK,约束规则,创建约束时,可以对约束进行命名,也可以使用SYS_Cn的格式自定义命名可以在以下时候创建约束:在表创建时同时创建约束在表创建以后创建约束在表或者列级别创建约束在数据字典中查看约束,定义约束,语法:列级别约束:表级别约束:,CREATE TABLE schema.table(column datatype DEFA
7、ULT expr column_constraint,.table_constraint,.);,column,.CONSTRAINT constraint_name constraint_type(column,.),column CONSTRAINT constraint_name constraint_type,定义约束,列级别约束:表级别约束:,CREATE TABLE employees(employee_id NUMBER(6)CONSTRAINT emp_emp_id_pk PRIMARY KEY,first_name VARCHAR2(20),.);,CREATE TABLE
8、employees(employee_id NUMBER(6),first_name VARCHAR2(20),.job_id VARCHAR2(10)NOT NULL,CONSTRAINT emp_emp_id_pk PRIMARY KEY(EMPLOYEE_ID);,1,2,NOT NULL约束,非空约束的列不能有空值:,NOT NULL constraint(No row can containa null value forthis column.),Absence of NOT NULL constraint(Any row can contain a null value for
9、this column.),NOT NULL constraint,UNIQUE约束,EMPLOYEES,UNIQUE约束,INSERT INTO,不允许,已经存在,允许,UNIQUE约束,定义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_
10、email_uk UNIQUE(email);,PRIMARY KEY约束,DEPARTMENTS,PRIMARY KEY,INSERT INTO,不允许空值,不允许重复值,FOREIGN KEY约束,DEPARTMENTS,EMPLOYEES,FOREIGNKEY,INSERT INTO,不允许9,允许,PRIMARYKEY,FOREIGN KEY约束,在表级或者列级定义:,CREATE TABLE employees(employee_id NUMBER(6),last_name VARCHAR2(25)NOT NULL,email VARCHAR2(25),salary NUMBER(8
11、,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 D
12、ELETE SET NULL:将外键设为空值,CHECK约束,每行必须满足定义的条件以下的表达式不允许:CURRVAL,NEXTVAL,LEVEL和ROWNUM伪列调用以下函数:SYSDATE,UID,USER,USERENV,.,salaryNUMBER(2)CONSTRAINT emp_salary_min CHECK(salary 0),.,CREATE TABLE:示例,CREATE TABLE employees(employee_id NUMBER(6)CONSTRAINT emp_employee_id PRIMARY KEY,first_name VARCHAR2(20),la
13、st_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_
14、salary_ck CHECK(salary0),commission_pct NUMBER(2,2),manager_id NUMBER(6),department_id NUMBER(4)CONSTRAINT emp_dept_fk REFERENCES departments(department_id);,UPDATE employees*ERROR at line 1:ORA-02291:integrity constraint(HR.EMP_DEPT_FK)violated-parent key not found,UPDATE employeesSET department_id
15、=55WHERE department_id=110;,违反约束,55部门不存在,违反约束,不能删除外键所引用的值,DELETE FROM departmentsWHERE department_id=60;,DELETE FROM departments*ERROR at line 1:ORA-02292:integrity constraint(HR.EMP_DEPT_FK)violated-child record found,使用子查询创建表,通过使用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;Table
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1