Java学习笔记——MySQL创建表结构
一.创建/删除数据库.
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创建表结构的更多相关文章
- Java学习笔记-多线程-创建线程的方式
创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...
- MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引
本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...
- 0036 Java学习笔记-多线程-创建线程的三种方式
创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...
- MySQL/MariaDB学习笔记——mysql.user表中存在多个root用户问题理解
mysql.user表中存在多个root用户问题 问题描述:使用 SELECT host,user FROM mysql.user 发现mysql.user表中存在三个root用户,如下 持着对中几个 ...
- Java学习笔记——MySQL的安装使用以及SQL语法简介
在 Java 的开发中,数据库的应用是非常必要的,下面,我们为Java对于数据库的应用做一些必要的准备工作.. Java 对数据库的应用统称为 JDBC. JDBC(Java Data Base Co ...
- Java学习笔记-13.创建窗口和程序片
1.init()方法:程序片第一次被创建,初次运行初始化程序片时调用. start()方法:每当程序片进入web浏览器中,并且允许程序片启动他的常规操作时调用(特殊的程序片被stop()关闭):同样在 ...
- Effective Java 学习笔记之创建和销毁对象
一.考虑用静态工厂方法代替构造器 1.此处的静态工厂方法是指返回指为类的对象的静态方法,而不是设计模式中的静态工厂方法. 2.静态工厂方法的优势有: a.使用不同的方法名称可显著地表明两个静态工厂方法 ...
- Java学习笔记——MySQL开放3306接口与设置用户权限
系统Ubuntu16.04 LTS 1.开放3306端口查看端口状态:netstat -an|grep 3306tcp 0 0 127.0.0.1:3306 ...
- CUBRID学习笔记 30 复制表结构 cubrid教程
语法 CREATE {TABLE | CLASS} <new_table_name> LIKE <old_table_name> 如下 CREATE TABLE a_tbl( ...
随机推荐
- matlab 矢量化编程(四)—— 标量函数转化为能够处理矢量的函数
1. 组合的矢量实现 nchoosek(n, k) 的第二个参数在 matlab 下是不支持矢量化的,必须是标量形式.但 matlab 下的 gamma 函数,却可支持,矢量形式,又因为,gamma ...
- 给WPF示例图形加上方便查看大小的格子
原文:给WPF示例图形加上方便查看大小的格子 有时,我们为了方便查看WPF图形的样式及比例等,需要一些辅助性的格线,置于图形.图像的背景中. 比如下图,就是为了更清晰地查看折线的图形,我们画了用于标示 ...
- STL algorithm算法lexicographical_compare(30)
lexicographical_compare原型: std::lexicographical_compare default (1) template <class InputIterator ...
- 创建一个显示所有预定义系统颜色的ListBox
原文 Creating a ListBox that Shows All Predefined System Colors 该System.Windows.SystemColors类包含了一系列揭露当 ...
- 零元学Expression Design 4 - Chapter 6 教你如何在5分钟内做出文字立体感效果
原文:零元学Expression Design 4 - Chapter 6 教你如何在5分钟内做出文字立体感效果 又来一篇五分钟做设计啦~ 本篇将教大家如何运用Design内建工具Blend Path ...
- cat监控平台环境搭建 专题
项目地址:https://github.com/dianping/cat 编译步骤: 这个项目比较另类,把编译需要的jar包,单独放在git分支mvn-repo里了,而且官方文档里给了一个错误的命令提 ...
- 大数据_zookeeper环境搭建中的几个坑
文章目录 [] Zookeeper简介 关于zk的介绍, zk的paxos算法, 网上已经有各位大神在写了, 本文主要写我在搭建过程中的几个极有可能遇到的坑. Zookeeper部署中的坑 坑之一 E ...
- WPF MVVM+EF增删改查 简单示例(二) 1对1 映射
WPF MVVM+EF增删改查 简单示例(一)实现了对学生信息的管理. 现在需求发生变更,在录入学生资料的时候同时需要录入学生的图片信息,并且一名学生只能有一张图片资料.并可对学生的图片资料进行更新. ...
- MFC应用程序配置不正确解决方案(manifest对依赖的强文件名,WinSxs是windows XP以上版本提供的非托管并行缓存)
[现象] 对这个问题的研究是起源于这么一个现象:当你用VC++2005(或者其它.NET)写程序后,在自己的计算机上能毫无问题地运行,但是当把此exe文件拷贝到别人电脑上时,便不能运行了,大致的错误提 ...
- vxworks下libpcap的移植
linux下的libpcap应用能够成熟的使用在第三方的应用中,但基于vxworks开发的项目中需要使用libpcap的部分功能则无相应的实现. 研究了下libpcap向vxworks的移植,并且小有 ...