小白学Oracle第二关:第一个Oracle数据库表的创建
在上一关的学习中,我们已经掌握了Oracle数据库的安装与基本连接。现在,我们将正式进入数据库操作的核心环节:创建第一个Oracle数据库表。表是存储数据的基础结构,理解如何创建表是掌握Oracle数据库的第一步。对于初学者来说,创建表不仅仅是执行一条SQL语句那么简单,还需要明确表的结构、字段类型以及一些基本约束。
准备工作:连接到数据库
在创建表之前,确保你已经成功连接到Oracle数据库实例。通常,我们可以使用SQL*Plus或SQL Developer等工具。假设我们已经使用system用户连接到了本地数据库实例ORCL。如果还没有数据库用户,可以先创建一个用户来存放我们自己的表,例如:
CREATE USER my_user IDENTIFIED BY my_password; GRANT CONNECT, RESOURCE TO my_user; CONNECT my_user/my_password@orcl;
使用自己的用户创建表,可以避免与系统表冲突。现在,我们已经准备好开始创建第一个表了。
了解表的基本结构
在关系型数据库中,表由行(记录)和列(字段)组成。每个列都有特定的数据类型,用于定义该列可以存储的数据种类。Oracle数据库支持多种数据类型,常用的包括:
CHAR(n):固定长度的字符类型,n表示字符数,最大为2000字节。
VARCHAR2(n):可变长度的字符类型,n表示最大字符数,最大为4000字节。
NUMBER(p,s):数值类型,p表示总位数,s表示小数位数。
DATE:日期和时间类型,精确到秒。
CLOB:字符大对象,用于存储大量文本,最大为4GB。
BLOB
:二进制大对象,用于存储图片、文件等。
对于初学者来说,最常用的是VARCHAR2、NUMBER和DATE。
设计第一个表:学生信息表
假设我们要创建一个用于存储学生信息的表,名为students。这个表需要包含以下字段:
student_id:学生编号,唯一标识每个学生,使用NUMBER类型。
name:学生姓名,最大长度为100个字符的字符串。
gender:性别,使用固定长度1个字符('M'或'F')。
birth_date:出生日期,使用DATE类型。
phone
:联系电话,最大长度为20个字符。
email:电子邮箱,最大长度为100个字符。
在设计表时,我们还需要考虑约束条件。例如,学生编号应该唯一且不能为空,姓名不能为空。下面给出完整的CREATE TABLE语句。
编写CREATE TABLE语句
Oracle使用CREATE TABLE语句来创建表。基本语法如下:
CREATE TABLE table_name ( column1 datatype [constraint], column2 datatype [constraint], ... );
对于我们的学生信息表,完整的创建语句为:
CREATE TABLE students (
student_id NUMBER(6) NOT NULL,
name VARCHAR2(100) NOT NULL,
gender CHAR(1) NOT NULL,
birth_date DATE,
phone VARCHAR2(20),
email VARCHAR2(100),
CONSTRAINT pk_students PRIMARY KEY (student_id),
CONSTRAINT ck_gender CHECK (gender IN ('M', 'F'))
);在以上语句中,我们做了以下几件事:
为每个字段指定了数据类型和是否允许为空(NOT NULL)。
定义了主键约束(
PRIMARY KEY)在student_id上,确保每行数据唯一。添加了检查约束(
CHECK),限制gender列只能包含'M'或'F'。
执行创建表操作
将上述SQL语句复制到SQL*Plus或SQL Developer等工具的执行窗口中,然后执行。如果语句没有错误,系统会返回Table created.的提示。如果出现错误,请检查语法和用户权限。创建成功后,我们可以使用DESC students命令查看表结构:
DESC students;
输出结果应该显示类似以下内容:
Name Null? Type ----------- -------- ------------ STUDENT_ID NOT NULL NUMBER(6) NAME NOT NULL VARCHAR2(100) GENDER NOT NULL CHAR(1) BIRTH_DATE DATE PHONE VARCHAR2(20) EMAIL VARCHAR2(100)
现在,表已经成功创建。我们可以插入一些数据来验证表是否可用:
INSERT INTO students (student_id, name, gender, birth_date, phone, email)
VALUES (1001, '张三', 'M', TO_DATE('2000-01-15', 'YYYY-MM-DD'), '13800138000', 'zhangsan@example.com');
INSERT INTO students (student_id, name, gender, birth_date, phone, email)
VALUES (1002, '李四', 'F', TO_DATE('1999-08-20', 'YYYY-MM-DD'), '13900139000', 'lisi@example.com');
COMMIT;执行SELECT * FROM students;可以看到插入的两条记录:
STUDENT_ID NAME G BIRTH_DATE PHONE EMAIL ---------- ------ - ---------- ------------ -------------------- 1001 张三 M 15-JAN-00 13800138000 zhangsan@example.com 1002 李四 F 20-AUG-99 13900139000 lisi@example.com
常见错误与解决方法
初学者在创建表时经常遇到以下错误:
ORA-00942: 表或视图不存在:通常是因为表还未创建,或者用户没有权限访问。检查用户和表名。
ORA-00001: 违反唯一约束条件:插入重复主键值时发生。确保每个表的
student_id唯一。ORA-02290: 违反检查约束条件:例如插入
gender值不是'M'或'F'时触发。ORA-01950: 表空间中无权限:用户没有在表空间上创建对象的权限。通过
ALTER USER my_user QUOTA UNLIMITED ON USERS;授权。
另外,注意Oracle中的表名和列名默认是大写的,但引用时不区分大小写。如果表名包含特殊字符,需要用双引号括起来,但通常不建议这样做。
表的修改与删除
创建表之后,可能需要进行修改。例如,添加新列:
ALTER TABLE students ADD (address VARCHAR2(200));
修改列的数据类型:
ALTER TABLE students MODIFY (phone VARCHAR2(30));
删除表:
DROP TABLE students;
注意,删除表会永久丢失数据,操作前请务必确认。
总结
通过本关的学习,你已经成功创建了第一个Oracle数据库表——学生信息表。我们学习了如何设计表结构、使用CREATE TABLE语句、定义主键和检查约束,以及如何验证和修改表。这是Oracle数据库开发的基础,后续的增删改查操作都基于此。下一关,我们将深入学习数据插入、查询和更新的技巧。记住,动手实践是掌握Oracle的关键,请在你的环境下创建不同的表进行练习。