在数据库中,表是最重要、最基本的对象,是存储数据的基本单位。数据表从哪里来呢?数据表由关系模式转换而来。但不是简单的转换。
在设计表结构时要考虑下面几个方面:
字段名要通俗易懂且具有代表性,字段名不允许重复,为了编程序方便,尽量使用英文名字。
字段类型选择的原则是:根据需求选择合适的字段类型,在满足需求的情况下字段类型尽可能小。不参加数学计算的数字定义为字符串型,如学号、电话号码等。
字段长度是指能容纳该字段值的最大数量,如学号为12位数字,长度设置为12;课程名可能包含10个汉字,长度就要设置为10。
字符集编码选择:含有中文字符时统一采用utf8或gbk类型,以避免乱码情况的发生。
SQL语句中关键字做一些说明:
PRIMARY KEY用于定义主键。也可以使用多字段来定义主键。
COMMENT注释该字段的含义。
NOT NULL是非空约束。
DEFAULT为该字段加默认值,可以减少输入次数。
AUTO_INCREMENT为自增型属性,一般用作主键,数值会自动加1。
当表中有外键字段时用CONSTRAINT设置外键。
ENGINE=InnoDB是设置该表的存储引擎,DEFAULT CHARSET=utf8是设置该表的默认字符集。
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;
显示表结构的命令,两种方式:
DESCRIBE/DESC 表名SHOW CREATE TABLE 表名 查看表的详细信息
使用DESCRIBE table_name可显示指定表的结构
DESCRIBE也可用DESC替代
查看数据列表命令:
show tables;
复制一个表结构有两种实现方法:
create table 新表名 like 源表
create table 新表名 select * from 源表
修改表名语法格式如下:
rename table 旧表名 to 新表名
或者:
alter table 旧表名 rename 新表名
删除表的SQL语法格式为:
drop table 表名;
注意:如果表之间存在外键约束关系,应先删除外键约束条件,再删除表,或者先删子表,再删父表。