数据定义语言DDL( Data Definition Language ) , 是 SQL 语言集中负责数据结构定义与数据库对象定义的语言 , 主要有 create、alter、drop 和 truncate 四种常用语句。DDL 对数据结构起作用。
创建表:
CREATE TABLE t_employee (
id bigint(20) unsigned DEFAULT NULL,
project_name varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '项目名称',
start_date date DEFAULT NULL COMMENT '项目开始时间',
end_date date DEFAULT NULL COMMENT '项目结束时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
CREATE TABLE `commodity` (
`commodityId` bigint(20) unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT '商品ID',
`commodityCode` varchar(15) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '商品编码',
`title` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '标题',
`subtitle` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '副标题',
`marketPrice` decimal(11,2) DEFAULT NULL COMMENT '市场价',
`currentSellingPrice` decimal(11,2) NOT NULL COMMENT '现售价',
`attributes` decimal(11,2) NOT NULL COMMENT '商品属性',
`description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT '商品描述',
`categoryId` smallint(5) unsigned zerofill NOT NULL COMMENT '所属类目ID',
PRIMARY KEY (`commodityId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商品表';
创建数据库:
create database if not exists db1 character set GBK; -- 若不存在数据库db1,则创建该数据库
# 给字段添加外键约束
alter table student_ning4
add constraint stu_n4_mid_fk
foreign key (majorid) references major_ning(id) on delete set null;# on delete set null 的作用:一旦主表数据被删除 , 从表关联数据置为 null
# 给字段添加外键约束
alter table student_ning4
add constraint stu_n4_mid_fk
foreign key (majorid) references major_ning(id) on delete cascade;# on delete cascade 的作用:级联删除( 主表数据删除 , 从表相关联数据统统删除 )
# 删除约束条件
alter table student_ning4
drop constraint stu_n4_mid_fk;
# 增加字段
alter table mytemp_xxx add(name char(10));
# 增加字段,并且指定字段的位置
alter table emp add column nickname varchar(50) default null after name; -- after后面不能出现column
alter table emp add nickname varchar(50) default null after name;
alter table emp add nickname varchar(50) after name; -- 字段长度不可以省略
# Oracle修改字段名
alter table mytemp_xxx rename column password to pwd;
# MySQL修改字段名、类型、长度
alter table emp_yyy change job jobs varchar(50);
alter table emp_yyy change column job jobs varchar(50);
# Oracle修改字段类型
alter table mytemp_xxx modify (pwd char(8));
alter table t_pf_dep modify (depcode varchar2(100));
# MySQL修改字段类型、长度
alter table emp_yyy modify job char(25);
alter table emp_yyy modify column job char(25);
# 删除字段
alter table mytemp_xxx drop column pwd;
alter table mytemp_xxx drop pwd;
# 修改字段注释
alter table test modify column sex enum('M','F') comment '性别';
# 修改表名的注释
alter table test comment '测试表';
# 修改数据库的字符编码
alter database db1 character set GBK;
# 修改表名
alter table table_name rename to new_table_name;
# 修改字段允许为空
alter table user modify real_name varchar(30) null;
# 修改字段不许为空
alter table user modify real_name varchar(30) not null;
# 给字段添加唯一约束
ALTER TABLE user ADD unique(account_name);
# 给多个字段添加唯一约束
ALTER TABLE user ADD unique(account_name,nickname);
# 删除表
drop table if exists t_employee;# 如果存在表t_employee,则删除表结构和表数据
# 删除数据库
drop database if exists db1;
truncate table t_employee;
数据操纵语言DML( Data Manipulation Language ) , 用户通过它可以实现对数据表的基本操作 ,即对表中数据的增、删、改。DML 对数据起作用。
insert into user values (1001,'1234','liaowenxiong','18750197788','[email protected]');
insert into t_employee (empno,ename,hiredate) values (1011,'liaowenxiong','2011-01-01');
update emp_xxx set salary = 3000 where ename = 'amy' ;
delete from t_employee; # Oracle数据库中,from可以省略
delete emp_bak1 where deptno = 10 ;
数据查询语言 DQL( Data Query Language ) , 用户主要通过它实现对数据的查询操作。
select ename , hiredate from emp_xxx where ename='amy';
事务开始
事务开始于上一个事务的终止或者第一条 DML 语句
事务终止
事务控制语言TCL(Transaction Control Language),用来对 DML 操作进行确认的。
update t_employee set ename = 'liudehua' where empno = 001;
commit;
update t_employee set ename = 'liudehua' where empno = 001;
rollback;
设置保存点 , 可以回滚( rollback )到指定的保存点。
create table mytemp_xxx( id number(4) ) ;
--事务起点
insert into mytemp_xxx values(3) ;
savepoint A ; -- 设置保存点 , 名为 A
insert into mytemp_xxx values(4) ;
savepoint B; -- 设置保存点 , 名为 B
insert into mytemp_xxx values(5) ;
rollback to A ; -- 回滚到保存点 A , 注意:A 之后的保存点全部被取消
select * from mytemp_xxx ; --3 被插入数据库 , 4、5 没有被插入
数据控制语言DCL(Data Control Language),用来对数据的权限进行控制。
grant select on emp to openlab; # 假设现在的用户是ninglj,ninglj 将查看emp表的权限赋予openlab, openlab只能看不能改
revoke select on emp from openlab; # ninglj 用户将 select 权限回收