SQL指南(DDL)—操作数据库与表结构


SQL学习索引目录:

​ DDL : 数据定义语言,用来对数据库或表的结构进行操作。(本文)

DML : 数据操作语言,用来对表的记录进行更新

DQL : 数据库查询语言,用来对表记录进行查询

DCL : 数据控制语言,用来定义访问权限和安全级别

本文项目需求

​ 创建 exam数据库,库中创建表 dept (部门)表 emp (员工)表 salgrade(工资) ,各个表之间有主键约束和外键约束。

1.DDL-数据库操作

1.1 笔记

show databases ; # 列出所有数据库
use 数据库名;   #选中/切换 数据库
create database 数据库名 ; #创建数据库
drop database 数据库名; #删掉数据库
alter database 数据库名 character set utf8;  #设置数据库编码

1.2 项目—创建员工管理数据库

#1.创建数据库exam
create database exam ;
#2.选中exam
use exam;

2.DDL-表操作

2.1 笔记—其他操作

show tables; #查看当前选中数据库中所有表
desc 表名 ;  #查看表结构
drop table 表名; #删除表

2.2 笔记—创建表

create table 表名(
   列名  列类型 , 
  ............
);

创建表—主键约束:

当某一列指定为主键后,该列不能为空(非空)、不能出现重复值(唯一性)、能被引用(外键)。

# 创建表时定义主键和自增长
列名  列类型 PRIMARY KEY AUTO_INCREMENT ;
# 建表后定义主键、设置主键自增长
ALTER TABLE 表名 ADD PRIMARY KEY (列名) ;
ALTER TABLE 表名 CHANGE 列名 INT AUTO_INCREMENT;
# 删除主键、删除主键自增长
ALTER TABLE 表名 DROP PRIMARY KEY ;
ALTER TABLE 表名 CHANGE 列名 INT;

创建表—外键约束:

外键:必须是另一张表的主键值、可以重复、可以为空、一张表可有多个外键。

多对一外键约束 :员工和所属部门,一个员工属于一个部门,一个部门有多个员工。

# 建表时指定多对一的外键约束
create table 员工(
   员工编号 , # 设置为主键
   员工所属部门编号, 
   CONSTRAINT fk_员工表_部门表 FOREIGN KEY (员工所属部门编号) REFERENCES 部门表(部门编号) # ‘fk_员工表_部门表’只是一个名字,建议写成这种格式
);
create table 部门(
    部门编号 # 设置为主键  
);
# 建表后添加多对一的外键约束
ALTER TABLE 员工表 ADD CONSTRAINT fk_员工表_部门表 FOREIGN KEY(员工部门编号) REFERENCES 部门表(部门编号);
# 删除外键约束
ALTER TABLE 员工表 DROP FOREIGN KEY fk_员工表_部门表 ;

一对一外键约束:丈夫和妻子,一个丈夫一个妻子,一个妻子一个丈夫。

# 建表时指定一对一的外键约束
create table 丈夫(
   丈夫编号  # 设置为主键
);
create table 妻子(
    妻子编号 , # 设置为主键  
    CONSTRAINT fk_妻子表_丈夫表 FOREIGN KEY (妻子编号) REFERENCES 丈夫表(丈夫编号)  
);
# 建表后设置外键 和 删除外键 同多对一。

多对多外键约束:学生和老师,一个学生有多个老师,一个老师有多个学生。

# 建表时指定多对多的外键约束
create table 学生(
    学生编号 # 设置为主键 
);
create table 老师(
    教师编号 # 设置为主键
);
create table 学生_老师(
    中间表学生编号 ,
    中间表教师编号 ,
    CONSTRAINT fk_学生表_教师表_添加学生外键 FOREIGN KEY(中间表学生编号) REFERENCES 学生表(学生编号),   
    CONSTRAINT fk_学生表_教师表_添加教师外键 FOREIGN KEY(中间表教师编号) REFERENCES 教师表(教师编号)     
);

创建—其他约束

#创建表时指定其他约束
列名 列类型 NOT NULL # 非空
列名 列类型 NOT NULL UNIQUE # 唯一性
列名 列类型 DEFAULT NULL # 默认为空

2.3 笔记—修改表

# 添加列
ALTER TABLE 表名 
    ADD (
      列名 列类型,
      列名 列类型,
      ...
);
# 修改列类型
ALTER TABLE 表名 MODIFY 列名 列类型;
# 修改列名
ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;
# 删除列
ALTER TABLE 表名 DROP 列名;
# 修改表名称
ALTER TABLE 原表名 RENAME TO 新表名;

2.4项目—建表(员工表、部门表、工资表)

# 创建部门表
mysql> create table dept(
    ->    deptno int primary key ,
    ->    dname varchar(50) default null,
    ->    loc varchar(50) default null,
    -> );
# 创建工资等级表
mysql> create table salgrade(
    ->     grade int primary key,
    ->     losal int,
    ->     hisal int
    -> );
# 创建员工表
create table emp(
    ->    empno int primary key,
    ->    ename varchar(50),
    ->    job varchar(50),
    ->    mgr int,  # 直属上级
    ->    hiredate date,
    ->    sal decimal(7,2),
    ->    comm decimal(7,2), 
    ->    deptno int,
    ->    constraint fk_emp foreign key (mgr) references emp (empno),
    ->    constraint fk_emp_dept foreign key (deptno) references dept (deptno)
    -> );

猜你喜欢

转载自blog.csdn.net/g425680992/article/details/80081490