一.创建/删除数据库.

 create database t14;
drop database t14;
use t14;

二.创建若干表用于测试

这里预留了几个坑,下面要填坑的..

 /*创建学生表*/
create table student(
studentNo int() PRIMARY KEY not null,
loginPwd VARCHAR() not null,
studentName VARCHAR() not NULL,
sex char() not null DEFAULT '男',
gradeID int() UNSIGNED,
phone VARCHAR(),
address VARCHAR() default '地址不详',
bornDate DATETIME,
email VARCHAR(),
identifyCard VARCHAR() UNIQUE
)
/*创建年级表*/
drop table if exists grade
create table grade(
gradeID int primary key not null auto_increment,
gradeName VARCHAR() not null
)
/*创建科目表*/
CREATE TABLE `subject` (
`subjectNo` int() NOT NULL auto_increment,
`subjectName` varchar(),
`classHour` int(),
`gradeID` int(),
PRIMARY KEY (`subjectNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*创建成绩表*/
drop table if exists `result`
CREATE TABLE `result` (
`resultNo` int not null auto_increment,
`studentNo` int() not null,
`subjectNo` int() NOT NULL,
`examDate` DATETIME not NULL DEFAULT NOW(),
`studentResult` int() not NULL,
PRIMARY KEY (`resultNo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

添加汉字数据的时候如果报错,说什么未定义的数据类型,就把你的默认字符集latin改成utf8就行了.具体方法不赘述了

三.添加外键约束

 /*给student,grade表创建外键约束*/
alter table `student` add CONSTRAINT fk_grade_student_gradeID foreign KEY(`gradeID`) REFERENCES `grade` (`gradeID`)

运行这行代码会报错.

SQL Error [1215] [HY000]: Cannot add foreign key constraint
  java.sql.SQLException: Cannot add foreign key constraint
下面总结几个创建外键失败的原因:

1.企图在主表创建外键

2.两表中有非法记录

3.两表公共列数据类型不同(长度,特性eg.unsigned)

这里grade表中gradeID的数据类型及特性是int ,大家都知道int的默认长度是11

student表中gradeID的数据类型是 int(4) UNSIGNED

两字段数据长度及特性不一致.

 alter table student change gradeID gradeID int
desc student
alter table `student` add CONSTRAINT fk_grade_student_gradeID foreign KEY(`gradeID`) REFERENCES `grade` (`gradeID`)

修改Student表中gradeID数据类型为int,再执行添加外键的操作,添加外键成功.

然后添加其他外键.

 /*subject,grade表创建外键约束*/
alter table subject change gradeID gradeID int
desc subject
alter table `subject` add CONSTRAINT fk_grade_subject_gradeID foreign KEY(`gradeID`) REFERENCES `grade` (`gradeID`)
/*学生表与成绩表创建外建约束*/
alter table `result` add CONSTRAINT fk_student_result_studentNo foreign KEY(`studentNo`) REFERENCES `student` (`studentNo`)
/*科目表与成绩表创建外建约束*/
alter table `result` add CONSTRAINT fk_subject_result_subjectNo foreign KEY(`subjectNo`) REFERENCES `subject` (`subjectNo`)

到这里就完成了四个表的外键约束.

4.为student表中studentNo添加自增

当初创建表的时候没加自增,现在想加了,怎么办?

 alter table student change studentNo studentNo int() NOT NULL auto_increment

使用alter语句发现报错.

SQL Error [1832] [HY000]: Cannot change column 'studentNo': used in a foreign key constraint 'fk_student_result_studentNo'
  java.sql.SQLException: Cannot change column 'studentNo': used in a foreign key constraint 'fk_student_result_studentNo'
没办法了,这里只能先删除外键约束,再添加自增.

 /*删除外键约束*/
ALTER TABLE `result` DROP FOREIGN KEY fk_student_result_studentNo
ALTER TABLE `result` DROP FOREIGN KEY fk_subject_result_subjectNo
ALTER TABLE `subject` DROP FOREIGN KEY fk_grade_subject_gradeID
ALTER TABLE `student` DROP FOREIGN KEY fk_grade_student_gradeID

一共四条外建约束,需要删除哪条约束就执行哪行吧.

删除外键之后四个表就很干净了,没有任何关联.然后可以进随便行修改字段,truncate table 等操作.

 /*想要truncate table 必须先清除外建约束
* truncate 语句不记录日志,删除后自增列从1开始,只能删除整个表数据
* delete 记录日志,删除后自增列序号断裂,+where条件可删除若干行
* truncate删除得更彻底,性能比delete高
* */
TRUNCATE TABLE subject
TRUNCATE TABLE student
TRUNCATE TABLE `result`
TRUNCATE TABLE grade

执行添加自增操作:

 alter table student change studentNo studentNo int() NOT NULL auto_increment

下面可以添加测试数据了.这里因为有外键约束,所以注意一下先添加主表数据,再添加从表数据.然后不要有非法数据就可以了.

 /*为各表插入数据*/
insert into grade (gradeName) VALUES('T15')
insert into subject (subjectName,classHour,gradeID) VALUES('语文',,),('数学',,)
desc student
insert into student(loginPwd,studentName,sex,gradeID,phone,address,bornDate,email,identifyCard) VALUES
('','强哥','女',,'','新加坡',now(),'qq@126.com','')
desc `result`
insert into `result`(studentNo,subjectNo,examDate,studentResult) VALUES(,,now(),)
insert into `result`(studentNo,subjectNo,examDate,studentResult) VALUES(,,now(),)

最后附上表图.

Java学习笔记——MySQL创建表结构的更多相关文章

  1. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  2. MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  3. 0036 Java学习笔记-多线程-创建线程的三种方式

    创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...

  4. MySQL/MariaDB学习笔记——mysql.user表中存在多个root用户问题理解

    mysql.user表中存在多个root用户问题 问题描述:使用 SELECT host,user FROM mysql.user 发现mysql.user表中存在三个root用户,如下 持着对中几个 ...

  5. Java学习笔记——MySQL的安装使用以及SQL语法简介

    在 Java 的开发中,数据库的应用是非常必要的,下面,我们为Java对于数据库的应用做一些必要的准备工作.. Java 对数据库的应用统称为 JDBC. JDBC(Java Data Base Co ...

  6. Java学习笔记-13.创建窗口和程序片

    1.init()方法:程序片第一次被创建,初次运行初始化程序片时调用. start()方法:每当程序片进入web浏览器中,并且允许程序片启动他的常规操作时调用(特殊的程序片被stop()关闭):同样在 ...

  7. Effective Java 学习笔记之创建和销毁对象

    一.考虑用静态工厂方法代替构造器 1.此处的静态工厂方法是指返回指为类的对象的静态方法,而不是设计模式中的静态工厂方法. 2.静态工厂方法的优势有: a.使用不同的方法名称可显著地表明两个静态工厂方法 ...

  8. Java学习笔记——MySQL开放3306接口与设置用户权限

    系统Ubuntu16.04 LTS 1.开放3306端口查看端口状态:netstat -an|grep 3306tcp        0      0 127.0.0.1:3306          ...

  9. CUBRID学习笔记 30 复制表结构 cubrid教程

    语法 CREATE {TABLE | CLASS} <new_table_name> LIKE <old_table_name> 如下 CREATE TABLE a_tbl( ...

随机推荐

  1. C++第11周(春)项目4 - 类族的设计

    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目4 - 类族的设计]按下面的提示,由基类 ...

  2. WPF中使用TranslateTransform3D修改CAD的3D旋转中心

    原文:WPF中使用TranslateTransform3D修改CAD的3D旋转中心        前面一篇文章讲述了2D旋转功能的实现,文章提到了修改3D旋转中心,这一节主要总结一下具体的修改3D旋转 ...

  3. wpf 自定义窗口,最大化时覆盖任务栏解决方案

    原文:wpf 自定义窗口,最大化时覆盖任务栏解决方案 相信很多人使用wpf时会选择自定义美观的窗口,因此会设置WindowStyle="None" 取消自带的标题栏.但这样使用 W ...

  4. 如何加入该网站for Linux(绑定域名)

    [路径跟踪配置由阿里云提供的标准环境的路径为准,假设你单独安装.请根据实际的安装路径配置].   1.cd /alidata/server/httpd/conf/vhosts/ 进入绑定域名所在文件夹 ...

  5. 计算机网络OSI参考模型与tcp/ip四层模型

    OSI参考模型--7层 1层物理层:主要定义物理设备标准,如网线的接口类型.光线的接口类型.各种传输介质的传输速率等.它的主要作用是传输比特流(就是由1.0转化为电流强弱来进行传输,到达目的地后在转化 ...

  6. jquery hover()的使用

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  7. 将exe和dll文件打包成单一的启动文件

    当我们用 VS 或其它编程工具生成了可执行exe要运行它必须要保证其目录下有一大堆dll库文件,看起来很不爽,用专业的安装程序生成软件又显得繁琐,下面这个方法教你如何快速把exe文件和dll文件打包成 ...

  8. MinDoc v0.6 发布,轻量级文档在线管理系统

    更新日志 新增 标签功能,可以根据标签组织项目 新增 用户删除功能,删除后的用户项目以及其他数据会自动转移到超级管理员账户上 新增 项目描述支持Markdown语法 优化 项目标签添加效果 优化 登录 ...

  9. QT在release版本产生pdb文件

    ##环境说明 QtCreator QtLibrary 编译器 Qt Creator 2.7.0 4.8.4-msvc msvc9.0(VS2008) ##背景说明 >项目中需要对发布版本追踪崩溃 ...

  10. Win10版《芒果TV》全平台直播第89届奥斯卡颁奖典礼,特设第二演播室带来一手资讯

    芒果TV为所有中国影迷们带来的:今年的奥斯卡直播与往年格外不同,为了让网友们观看这场盛典得到多维度体验,不管是来看热闹的还是看门道的都看得开心尽兴,芒果TV特设第二演播室,为大家带来第一手新鲜热辣的现 ...