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( ...
随机推荐
- Linux性能测试 mpstat命令
mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具.其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中.在多CPUs系统里,其不但能查看所有 ...
- 优秀开源项目之四:CrashRptProbe,查询程序奔溃的利器
1.背景: 在开发人员进行项目开发和调试代码时,有一个非常困扰的问题,就是程序在调试运行过程中会莫名其妙地异常退出.由于导致异常退出的问题非常多,因此在面对这种无任何提示的异常退出时,开发人员会非常无 ...
- 算法 Tricks(六)—— 判断一个数是否为完全平方数
int(sqrt(n)) * int(sqrt(n)) == n ? 1:0; matlab 下判断一个数是否能开方的判断是: floor(sqrt(m))^2 == m
- html5 命运之轮生产
码,如以下: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEn ...
- 不得不说,我太佩服node了,连openXML也搞定了!
https://github.com/Ziv-Barber/officegen 开源项目地址 使用报告等有空完成!
- ASP.NET Core 配置身份验证
以AspUser的Password为例,去掉最少1个大写字母,1个小写字母等等坑爹的要求在Startup的ConfigureServices中进行配置 services.Configure<Id ...
- corefx 源码学习:NetworkStream.ReadAsync 是如何从 Socket 异步读取数据的
最近遇到 NetworkStream.ReadAsync 在 Linux 上高并发读取数据的问题,由此激发了阅读 corefx 中 System.Net.Sockets 实现源码(基于 corefx ...
- DB First .edmx
DB First查看Entity相互关系.edmx 图表 .edmx源代码——xml文件右键,打开方式 xml内容 详细查看DB:.edmx—Model Browser(模型浏 ...
- JAVASCRIPT高程笔记-------第六章 面向对象的程序设计
理解对象的概念 js中的对象与其他 编程语言中的类不一样 ECMAscript 没有类的概念 ECMA-262 把对象定义为 “无序属性的集合,其属性可以包含基本值,对象或者函数” ...
- comtextMenu 如何正确的响应MouseLeave事件
今天给菜单加上这个事件,发现弹出菜单后 鼠标怎么动都不会触发 mouseLeave事件 解决方法是 在菜单loaded事件中,利用visualTreeHelper 访问他内部的border控件,把这个 ...