Java学习笔记——MySQL创建表结构⼀.创建/删除数据库.
1 create database t14;
2 drop database t14;
3 use t14;
⼆.创建若⼲表⽤于测试
这⾥预留了⼏个坑,下⾯要填坑的..
1/*创建学⽣表*/
2 create table student(
3    studentNo int(4) PRIMARY KEY not null,
4    loginPwd VARCHAR(20) not null,
5    studentName VARCHAR(50) not NULL,
6    sex char(2) not null DEFAULT '男',
7    gradeID int(4) UNSIGNED,
8    phone VARCHAR(50),
9    address VARCHAR(255) default'地址不详',
10    bornDate DATETIME,
11    email VARCHAR(50),
12    identifyCard VARCHAR(18) UNIQUE
13 )
14/*创建年级表*/
15 drop table if exists grade
16 create table grade(
17    gradeID int primary key not null auto_increment,
18    gradeName VARCHAR(32) not null
19 )
20/*创建科⽬表*/
21 CREATE TABLE `subject` (
22  `subjectNo` int(4) NOT NULL auto_increment,
23  `subjectName` varchar(50),
24  `classHour` int(4),
25  `gradeID` int(4),
26  PRIMARY KEY (`subjectNo`)
27 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
28/*创建成绩表*/
29 drop table if exists `result`
30 CREATE TABLE `result` (
31  `resultNo` int not null auto_increment,
32  `studentNo` int(4) not null,
33  `subjectNo` int(4) NOT NULL,
34  `examDate` DATETIME not NULL DEFAULT NOW(),
35  `studentResult` int(4) not NULL,
36  PRIMARY KEY (`resultNo`)
37 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
添加汉字数据的时候如果报错,说什么未定义的数据类型,就把你的默认字符集latin改成utf8就⾏了.具体⽅法不赘述了三.添加外键约束
1/*给student,grade表创建外键约束*/
2 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
两字段数据长度及特性不⼀致.
1 alter table student change gradeID gradeID int
2 desc student
3 alter table `student` add CONSTRAINT fk_grade_student_gradeID foreign KEY(`gradeID`) REFERENCES `grade` (`gradeID`)
修改Student表中gradeID数据类型为int,再执⾏添加外键的操作,添加外键成功.
然后添加其他外键.
1/*subject,grade表创建外键约束*/
2 alter table subject change gradeID gradeID int
3 desc subject
4 alter table `subject` add CONSTRAINT fk_grade_subject_gradeID foreign KEY(`gradeID`) REFERENCES `grade` (`gradeID`)
5/*学⽣表与成绩表创建外建约束*/
6 alter table `result` add CONSTRAINT fk_student_result_studentNo foreign KEY(`studentNo`) REFERENCES `student` (`studentNo`)
7/*科⽬表与成绩表创建外建约束*/
8 alter table `result` add CONSTRAINT fk_subject_result_subjectNo foreign KEY(`subjectNo`) REFERENCES `subject` (`subjectNo`)
到这⾥就完成了四个表的外键约束.
4.为student表中studentNo添加⾃增
当初创建表的时候没加⾃增,现在想加了,怎么办?
1 alter table student change studentNo studentNo int(4) NOT NULL auto_increment
使⽤alter语句发现报错.
SQL Error [1832] [HY000]: Cannot change column 'studentNo': used in a foreign key constraint 'fk_stujava笔记总结
dent_result_studentNo'  java.sql.SQLException: Cannot change column 'studentNo': used in a foreign key constraint 'fk_student_result_studentNo'没办法了,这⾥只能先删除外键约束,再添加⾃增.
1/*删除外键约束*/
2 ALTER TABLE `result` DROP FOREIGN KEY fk_student_result_studentNo
3 ALTER TABLE `result` DROP FOREIGN KEY fk_subject_result_subjectNo
4 ALTER TABLE `subject` DROP FOREIGN KEY fk_grade_subject_gradeID
5 ALTER TABLE `student` DROP FOREIGN KEY fk_grade_student_gradeID
⼀共四条外建约束,需要删除哪条约束就执⾏哪⾏吧.
删除外键之后四个表就很⼲净了,没有任何关联.然后可以进随便⾏修改字段,truncate table 等操作.
1/*想要truncate table 必须先清除外建约束
2 * truncate 语句不记录⽇志,删除后⾃增列从1开始,只能删除整个表数据
3 * delete 记录⽇志,删除后⾃增列序号断裂,+where条件可删除若⼲⾏
4 * truncate删除得更彻底,性能⽐delete⾼
5 * */
6 TRUNCATE TABLE subject
7 TRUNCATE TABLE student
8 TRUNCATE TABLE `result`
9 TRUNCATE TABLE grade
执⾏添加⾃增操作:
1 alter table student change studentNo studentNo int(4) NOT NULL auto_increment
下⾯可以添加测试数据了.这⾥因为有外键约束,所以注意⼀下先添加主表数据,再添加从表数据.然后不要有⾮法数据就可以了. 1/*为各表插⼊数据*/
2 insert into grade (gradeName) VALUES('T15')
3 insert into subject (subjectName,classHour,gradeID) VALUES('语⽂',60,1),('数学',60,1)
4 desc student
5 insert into student(loginPwd,studentName,sex,gradeID,phone,address,bornDate,email,identifyCard) VALUES
6 ('000000','强哥','⼥',1,'120','新加坡',now(),'qq@126','410523************')
7 desc `result`
8 insert into `result`(studentNo,subjectNo,examDate,studentResult) VALUES(1,1,now(),90)
9 insert into `result`(studentNo,subjectNo,examDate,studentResult) VALUES(1,2,now(),90)
最后附上表图.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。