在数据库中,表是最重要、最基本的对象,是存储数据的基本单位。数据表从哪里来呢?数据表由关系模式转换而来。但不是简单的转换。
在设计表结构时要考虑下面几个方面:
SQL语句中关键字做一些说明:
| teacher | ||||
| Teacher_id | Teacher_name | age | Enter_time | professional | 
| 10101 | 潘多拉 | 18 | 2018-2-1 | 讲师 | 
| 10102 | 普罗米修斯 | 27 | 2018-3-5 | 教授 | 
| 10103 | 波塞冬 | 29 | 2015-9-10 | 副教授 | 
| Department | ||||||
| 字段名 | 数据类型 | 长度 | 是否空值 | 是否主键外键 | 默认值 | 备注 | 
| Department_id | char | 3 | NOT NULL | 主键 | 学校编号 | |
| Department_name | varchar | 10 | NOT NULL | 学校名称 | ||
use course;
create table department(
Department_id char(3) NOT NULL PRIMARY KEY COMMENT ‘学院编号‘,
Department_name varchar(10) NOT NULL COMMENT ‘学院名称‘
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
| teacher | ||||||
| 字段名 | 数据类型 | 长度 | 是否空值 | 是否主键外键 | 默认值 | 备注 | 
| Teacher_id | char | 5 | NOT NULL | 主键 | 教师编号 | |
| teacher_name | varchar | 4 | NOT NULL | 教师姓名 | ||
| Department_id | char | 3 | NOT NULL | 外键 | 学校编号 | |
| gender | char | 1 | NOT NULL | 男 | 性别 | |
CREATE TABLE teacher(
Teacher_id char(5) NOT NULL PRIMARY KEY COMMENT ‘教师编号‘,
Teacher_Name varchar(4) NOT NULL COMMENT ‘教师姓名‘,
Department_id char(3) NOT NULL COMMENT ‘学院编号‘,
Gender char(1) NOT NULL DEFAULT ‘男‘ COMMENT ‘性别‘,
CONSTRAINT teacher_department FOREIGN KEY (Department_id)
REFERENCES department(Department_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
| course | ||||||
| 字段名 | 数据类型 | 长度 | 是否空值 | 是否主键外键 | 默认值 | 备注 | 
| Course_id | char | 4 | NOT NULL | 主键 | 课程号 | |
| course_name | varchar | 10 | NOT NULL | 课程名 | ||
| capacity | tinyint | 4 | NOT NULL | 60 | 人数上限 | |
| Teacher_id | char | 5 | NOT NULL | 外键 | 教师编号 | |
CREATE TABLE course(
Course_id char(4) NOT NULL PRIMARY KEY COMMENT ‘课程号‘,
Course_name varchar(10) NOT NULL COMMENT ‘课程名‘,
Capacity tinyint(4) NOT NULL DEFAULT 60 COMMENT ‘人数上限‘,
Teacher_id char(5) NOT NULL COMMENT ‘教师编号‘,
CONSTRAINT course_teacher FOREIGN KEY (Teacher_id)
REFERENCES teacher (Teacher_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
| Classes | ||||||
| 字段名 | 数据类型 | 长度 | 是否空值 | 是否主键外键 | 默认值 | 备注 | 
| class_id | char | 8 | NOT NULL | 主键 | 班级编号 | |
| class_name | varchar | 8 | NOT NULL | 班级名 | ||
| Year | smallint | 4 | NOT NULL | 年度 | ||
| Department_id | char | 3 | NOT NULL | 外键 | 学院编号 | |
CREATE TABLE classes(
Classe_id char(8) NOT NULL PRIMARY KEY COMMENT ‘班级编号‘,
Class_name varchar(8) NOT NULL COMMENT ‘班级名‘,
Year smallint(4) NOT NULL COMMENT ‘年度‘,
Department_id char(3) NOT NULL COMMENT ‘学院编号‘,
CONSTRAINT class_department FOREIGN KEY (Department_id)
REFERENCES department (Department_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
| students | ||||||
| 字段名 | 数据类型 | 长度 | 是否空值 | 是否主键外键 | 默认值 | 备注 | 
| students_id | char | 12 | NOT NULL | 主键 | 学号 | |
| students_name | varchar | 4 | NOT NULL | 姓名 | ||
| class_id | char | 4 | NOT NULL | 外键 | 班级编号 | |
| phone | varchar | 18 | NOT NULL | 电话 | ||
CREATE TABLE students(
Student_id char(12) NOT NULL PRIMARY KEY COMMENT ‘学号‘,
Student_name varchar(4) NOT NULL COMMENT ‘姓名‘,
Class_id char(4) NOT NULL COMMENT ‘班级编号‘,
Phone varchar(18) NOT NULL COMMENT ‘电话‘,
CONSTRAINT student_class FOREIGN KEY (Class_id) REFERENCES
classes (Classe_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
| choose | ||||||
| 字段名 | 数据类型 | 长度 | 是否空值 | 是否主键外键 | 默认值 | 备注 | 
| Choose_id | char | 11 | NOT NULL | 主键 | auto_increment | |
| student_id | varchar | 12 | NOT NULL | 学号 | ||
| Course_id | char | 4 | NOT NULL | 外键 | 课程号 | |
| choose_time | datetime | NOT NULL | 选课时间 | |||
| report | int | 0 | 成绩 | |||
CREATE TABLE choose(
Choose_id int(11) NOT NULL PRIMARY KEY
AUTO_INCREMENT,
Student_id char(12) NOT NULL COMMENT ‘学号‘,
Course_id char(4) NOT NULL COMMENT ‘课程号‘,
Choose_time datetime NOT NULL COMMENT ‘选课时间‘,
report int DEFAULT 0 COMMENT ‘成绩‘,
CONSTRAINT choose_course FOREIGN KEY (Course_id)
REFERENCES course (Course_id),
CONSTRAINT choose_student FOREIGN KEY (Student_id)
REFERENCES students (Student_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
显示表结构的命令,两种方式:
复制一个表结构有两种实现方法:
create table 新表名 like 源表
create table 新表名 select * from 源表
修改表名语法格式如下:
rename table 旧表名 to 新表名
或者:
alter table 旧表名 rename 新表名
删除表的SQL语法格式为:
drop table 表名;
注意:如果表之间存在外键约束关系,应先删除外键约束条件,再删除表,或者先删子表,再删父表。
原文:https://www.cnblogs.com/wxl1989/p/13246757.html