MySQL的DDL和DML
Posted 公元12956
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL的DDL和DML相关的知识,希望对你有一定的参考价值。
SQL语句:结构化查询语句,使用SQL与数据库“沟通”,完成相应的数据库操作。
语句分类
DDL(Data Definition Languages)语句:即数据库定义语句,用来创建数据库中的表、索引、视图、存储过程、触发器等,常用的语句关键字有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。
DML(Data Manipulation Language)语句:即数据操纵语句,用来查询、添加、更新、删除等,常用的语句关键字有:SELECT,INSERT,UPDATE,DELETE,MERGE,CALL,EXPLAIN PLAN,LOCK TABLE,包括通用性的增删改查。
DCL(Data Control Language)语句:即数据控制语句,用于授权/撤销数据库及其字段的权限(DCL is short name of Data Control Language which includes commands such as GRANT and mostly concerned with rights, permissions and other controls of the database system.)。常用的语句关键字有:GRANT,REVOKE。
TCL(Transaction Control Language)语句:事务控制语句,用于控制事务,常用的语句关键字有:COMMIT,ROLLBACK,SAVEPOINT,SET TRANSACTION。
一. 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子句给列指定默认值
CREATE TABLE emptest(
id NUMBER(4),
name VARCHAR2(20),
gender CHAR(1) DEFAULT ‘M‘,
birth DATE
);
设置列值非空NOT NULL
默认情况下,任何列都允许有空值。非空(NOT NULL)是一种条件约束,用于确保字段值不为空,当某个字段被设置了非空约束条件,这个字段中必须存在有效值,即:当执行插入数据操作时,必须提供这个列的数据;当执行更新操作时,不能给这个列的值设置为NULL。Ø NOT 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 ADD
演示:在testemp表下面增加hiredate列,并将默认值设置为当前时间增加列,列只能增加在最后,不能插入现有的列中。
ALTER TABLE testemp ADD(hiredate DATE DEFAULT sysdate);
删除列 ALTER DROP
删除列,删除字段需要从每行中删掉该字段占据的长度和数据,并释放在数据块中占据的空间,如果表记录比较大,删除字段可能需要比较长的时间。
演示:删除testemp表下的hiredate
ALTER TABLE testemp DROP (hiredate);
修改列 ALTER MODIFY
修改列,使用MODIFY可以改变表中列的数据类型、长度和默认值,注意这种修改仅对以后插入的数据有效。另外如果表中已经有数据的情况下,把长度由大改小,有可能不成功,比如原来类型是VARCHAR2(100),其中已经存放了100字节长度的数据,如果改为80字节,则不会修改成功。
演示:修改testemp表中name的长度为30
ALTER TABLE testemp MODIFY(name VARCHAR2(30));
删除表DROP
DROP TABLE emptest;
二. DML语句
用于增删改表中数据,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;
以上是关于MySQL的DDL和DML的主要内容,如果未能解决你的问题,请参考以下文章