SQL学习索引目录:
DDL : 数据定义语言,用来对数据库或表的结构进行操作。(本文)
本文项目需求
创建 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)
-> );