DDL与DML语句
1. DDL语句
SQL语句:结构化查询语句,使用SQL与数据库“沟通”,完成相应的数据库操作。
l DDL:数据定义语言,用来维护数据库对象
1.1 创建表
Ø CREATE:创建表
演示:创建员工表
CREATE TABLE employee(
id NUMBER(4), name VARCHAR2(20), gender CHAR(1), birth DATE, salary NUMBER(6,2), job VARCHAR2(30), deptno NUMBER(2) ); |
Ø DESC:查看表的数据结构
演示:查看创建的员工表
DESC employee; |
Ø DEFAULT:设置默认值
可以通过DEFAULT子句给列指定默认值
演示:建表时给gender默认值为”M”
CREATE TABLE emptest(
id NUMBER(4), name VARCHAR2(20), gender CHAR(1) DEFAULT 'M', birth DATE ); |
Ø NOT NULL:非空
默认情况下,任何列都允许有空值。非空(NOT NULL)是一种条件约束,用于确保字段值不为空,当某个字段被设置了非空约束条件,这个字段中必须存在有效值,即:当执行插入数据操作时,必须提供这个列的数据;当执行更新操作时,不能给这个列的值设置为NULL。
演示:创建员工表设置那么为非空字段
CREATE TABLE emptest(
id NUMBER(4) , name VARCHAR2(20) NOT NULL, gender CHAR(1) DEFAULT 'M', birth DATE ); |
1.2 修改表
Ø RENAME:修改表名
演示:修改表名
RENAME emptest to testemp; |
Ø ALTER TABLE的ADD子句
增加列,列只能增加在最后,不能插入现有的列中。
演示:在testemp表下面增加hiredate列,并将默认值设置为当前时间
ALTER TABLE testemp ADD(hiredate DATE DEFAULT sysdate); |
Ø ALTER TABLE的DROP子句
删除列,删除字段需要从每行中删掉该字段占据的长度和数据,并释放在数据块中占据的空间,如果表记录比较大,删除字段可能需要比较长的时间。
演示:删除testemp表下的hiredate
ALTER TABLE testemp DROP (hiredate); |
Ø DROP删除表
DROP TABLE emptest; |
Ø ALTER TABLE的MODIFY子句
修改列,使用MODIFY可以改变表中列的数据类型、长度和默认值,注意这种修改仅对以后插入的数据有效。另外如果表中已经有数据的情况下,把长度由大改小,有可能不成功,比如原来类型是VARCHAR2(100),其中已经存放了100字节长度的数据,如果改为80字节,则不会修改成功。
演示:修改testemp表中name的长度为30
ALTER TABLE testemp MODIFY(name VARCHAR2(30)); |
2. DML语句
l 用于增删改表中数据,DML是伴随TCL事务控制的。
Ø INSERT
INSERT语句用来给数据表增加记录,每次增加一条记录。所有的DML操作,需要再执行事务提交语句COMMIT才算真正确认了此操作。
演示:想testemp中插入一条记录
INSERT INTO testemp (id,name,gender) VALUES (1,'张三','M');
COMMIT; |
插入数据时忽略字段则是全列插入,顺序不能错误,如下:
INSERT INTO testemp VALUES (10,'李四','F',sysdate);
COMMIT; |
Ø UPDATE
更新表中的记录,需要配合WHERE子句使用,否则全表的数据都会被更新。
演示:更新testemp表中张三的ID为2
UPDATE testemp SET id=2 WHERE name='张三';
COMMIT; |
同时修改两个类型:
UPDATE testemp SET id=5,name='王五' WHERE name='李四';
COMMIT; |
Ø DELETE
删除表中的记录,和UPDATE一样,需要配合WHERE子句使用,不然会将全表数据删除。
演示:将testemp表中id为2的记录删除
DELETE FROM testemp WHERE id=2; |
清空表:
DELETE FROM testemp; |