MySql + JDBC 数据库基础的操作(防止sql注入的方法)

本文介绍了MySQL数据库的基础操作,包括DML和DQL,强调了SQL注入问题及其预防。详细讲述了JDBC的使用,从数据库驱动到Statement和PreparedStatement对象,展示了如何通过PreparedStatement防止SQL注入。此外,还涵盖了数据库设计规范和索引的重要性。
摘要由CSDN通过智能技术生成

1.数据库的基本组成

cmd操作数据库时出现系统错误193时

找到安装目录bin目录mysqld空文件删除即可

D:\mysql\mysql-5.7.19-win32\bin 有个mysqld的空文件,删除他即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OdtnoICM-1582730576577)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200217195503003.png)]

-- 目标:创建一个school数据库
-- 创建一个学生表(列,字段) 使用SQL创建
-- 学号int 登录密码varchar(20) 姓名,性别varchar(2) ,出生日期(datetime),家庭住址(email)
-- 注意点,使用英文,表的名称和字段尽量使用``括起来
-- AUTO_INCREMENT 自增
-- 字符串使用单引号括起来
-- 所有的语句后面加,(英文的),最后一个不用加
-- comment 注解/解释/描述
-- DEFAULT 默认值
CRETE DATABASE IF NOT EXISTS school
CREATE TABLE IF NOT EXISTS `student1`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT'学号',
`name` VARCHAR(30) NOT NULL DEFAULT'匿名' COMMENT'姓名',
`sex` VARCHAR(2) NOT NULL DEFAULT'男' COMMENT'性别',
`pwd` VARCHAR(20) NOT NULL DEFAULT'123456'COMMENT'登录密码',
`birthday`  DATETIME DEFAULT NULL COMMENT'出生日期', 
`address` VARCHAR(20) NOT NULL COMMENT'家庭住址',
`email` VARCHAR(20) NOT NULL COMMENT'邮件',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

SHOW CREATE DATABASE school  -- 查看创建数据库语句
SHOW CREATE TABLE student1  -- 看表的建表语句 

1.1 添加,修改,删除

DESC student1 -- 显示表的结构

-- 修改表名alter table 旧表名 rename as 新表名
ALTER TABLE student1 RENAME AS student2

-- 增加表的字段 alter table 表名 add 字段名 列属性
ALTER TABLE student1 ADD age INT(11)

-- 修改表的字段(重命名,修改约束)
ALTER TABLE student1 MODIFY age VARCHAR(20) -- 修改约束
ALTER TABLE student1 CHANGE age age2 INT(3)  -- 字段重命名

-- 删除表的字段
ALTER TABLE student1 DROP age2

-- 删除表(如果存在在删除)
DROP TABLE IF  EXISTS student

2.添加外键

2.1方式一:

在创建表的时候,添加约束 (麻烦,复杂不建议使用)

-- 学生表的gradeid字段 要去引用年级表的gradeid
-- 定义一个外键
-- 给这个外键添加一个约束(执行引用) references引用`grade`
CREATE DATABASE IF NOT EXISTS school
CREATE TABLE `student1`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT'学号',
`name` VARCHAR(30) NOT NULL DEFAULT'匿名' COMMENT'姓名',
`sex` VARCHAR(2) NOT NULL DEFAULT'男' COMMENT'性别',
`pwd` VARCHAR(20) NOT NULL DEFAULT'123456'COMMENT'登录密码',
`birthday`  DATETIME DEFAULT NULL COMMENT'出生日期', 
`gradeid` INT(10) NOT NULL COMMENT'学生的年级',
`address` VARCHAR(20) NOT NULL COMMENT'家庭住址',
`email` VARCHAR(20) NOT NULL COMMENT'邮件',
PRIMARY KEY(`id`),
KEY `FK_gradeid`(`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

CREATE TABLE IF NOT EXISTS `grade`(
`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT'年级id',
`gradename` VARCHAR(20) NOT NULL COMMENT'年级名字',
PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

2.2方式二:

创建表成功后,添加外键约束

CREATE TABLE `grade2`(
`gradeid` INT(2) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradename` VARCHAR(10) NOT NULL DEFAULT '匿名' COMMENT '年级姓名',
PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

CREATE TABLE `student2`(
`id` INT(10) NOT NULL AUTO_INCREMENT COMMENT'学号',
`name` VARCHAR(20) NOT NULL DEFAULT'匿名' COMMENT'姓名',
`sex` VARCHAR(20) NOT NULL DEFAULT'男' COMMENT'性别',
`birthday` DATETIME DEFAULT NULL COMMENT'出生日期',
`gradeid` INT(2) NOT NULL COMMENT'学生年级',
`email` VARCHAR(20) NOT NULL COMMENT'邮件',
PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

-- 创建表的时候没有外键关系
ALTER TABLE `student2`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade2`(`gradeid`)

3.DML(数据库操作语言)

语句:

  • inset 添加
  • update 修改
  • delete 删除

3.1添加:修改 : 删除

-- 添加数据
-- insert into `表名`(`字段名1`,`字段名2`,`...`) values (`值1`),(`值2`),(`...`) 
-- 字段和字段之间使用英文隔开
-- 字段是可以省略的,但是后面的必须要一一对应
-- 同时插入多条数据values(),()逗号隔开即可
INSERT INTO `grade2`(`gradename`) VALUES('大五')
INSERT INTO `student2`(`name`,`sex`,`gradeid`,`email`) VALUES ('李四','女','2','2151252'),('旺财','女','3','2151252'),('发财','男','5','2151252')


-- 修改 upate 修改谁(条件) set 原来的值=新值
UPDATE `student2` SET `name`='张dsfc' WHERE id = 3

-- 不错的条件的情况下,会改动所有的表
UPDATE `student2` SET `name`='进宝' 

-- 修改多个属性,逗号隔开
UPDATE `student2` SET `name`='进宝',`email`='65651531@qq.com' WHERE id=1 
-- 语法
-- update `表名` set `字段`='新值' where 条件

-- 通过多个条件定位数据
UPDATE `student2` SET `name`='奔月' WHERE `name`='进宝' AND `sex`='男'
UPDATE `student2` SET `birthday`= CURRENT_TIME WHERE id=3 

-- 删除delete 删除所有的信息,不会影响自增
DELETE FROM `student2` WHERE id='1'
-- truncate 截断 删除表自增会归零
TRUNCATE grade2

4.DQL:(数据查询语言)

(Date Query Language)数据查询语言

  • 所用到的表的SQL建库,建表 语句(数据库school,表 student ,category,grade,student

  • ,subject)

    /*
    SQLyog Ultimate v12.08 (64 bit)
    MySQL - 5.7.19 : Database - school
    *********************************************************************
    */
    /*!40101 SET NAMES utf8 */;
    
    /*!40101 SET SQL_MODE=''*/;
    
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    CREATE DATABASE /*!32312 IF NOT EXISTS*/`school` /*!40100 DEFAULT CHARACTER SET utf8 */;
    
    USE `school`;
    
    /*Table structure for table `grade` */
    
    DROP TABLE IF EXISTS `grade`;
    
    CREATE TABLE `grade` (
      `GradeID` int(11) NOT NULL AUTO_INCREMENT COMMENT '年级编号',
      `GradeName` varchar(50) NOT NULL COMMENT '年级名称',
      PRIMARY KEY (`GradeID`)
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
    
    /*Data for the table `grade` */
    
    insert  into `grade`(`GradeID`,`GradeName`) values (1,'大一'),(2,'大二'),(3,'大三'),(4,'大四'),(5,'预科班');
    
    /*Table structure for table `result` */
    
    DROP TABLE IF EXISTS `result`;
    
    CREATE TABLE `result` (
      `StudentNo` int(4) NOT NULL COMMENT '学号',
      `SubjectNo` int(4) NOT NULL COMMENT '课程编号',
      `ExamDate` datetime NOT NULL COMMENT '考试日期',
      `StudentResult` int(4) NOT NULL COMMENT '考试成绩',
      KEY `SubjectNo` (`SubjectNo`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    
    /*Data for the table `result` */
    
    insert  into `result`(`StudentNo`,`SubjectNo`,`ExamDate`,`StudentResult`) values (1000,1,'2013-11-11 16:00:00',94),(1000,2,'2012-11-10 10:00:00',75),(1000,3,'2011-12-19 10:00:00',76),(1000,4,'2010-11-18 11:00:00',93),(1000,5,'2013-11-11 14:00:00',97),(1000,6,'2012-09-13 15:00:00',87),(1000,7,'2011-10-16 16:00:00',79),(1000,8,'2010-11-11 16:00:00',74),(1000,9,'2013-11-21 10:00:00',69),(1000,10,'2012-11-11 12:00:00',78),(1000,11,'2011-11-11 14:00:00',66),(1000,12,'2010-11-11 15:00:00',82),(1000,13,'2013-11-11 14:00:00',94),(1000,14,'2012-11-11 15:00:00',98),(1000,15,'2011-12-11 10:00:00',70),(1000,16,'2010-09-11 10:00:00',74),(1001,1,'2013-11-11 16:00:00',76),(1001,2,'2012-11-10 10:00:00',93),(1001,3,'2011-12-19 10:00:00',65),(1001,4,'2010-11-18 11:00:00',71),(1001,5,'2013-11-11 14:00:00',98),(1001,6,'2012-09-13 15:00:00',74),(1001,7,'2011-10-16 16:00:00',85),(1001,8,'2010-11-11 16:00:00',69),(1001,9,'2013-11-21 10:00:00',63),(1001,10,'2012-11-11 12:00:00',70),(1001,11,'2011-11-11 14:00:00',62),(1001,12,'2010-11-11 15:00:00',90),(1001,13,'2013-11-11 14:00:00',97),(1001,14,'2012-11-11 15:00:00',89),(1001,15,'2011-12-11 10:00:00',72),(1001,16,'2010-09-11 10:00:00',90),(1002,1,'2013-11-11 16:00:00',61),(1002,2,'2012-11-10 10:00:00',80),(1002,3,'2011-12-19 10:00:00',89),(1002,4,'2010-11-18 11:00:00',88),(1002,5,'2013-11-11 14:00:00',82),(1002,6,'2012-09-13 15:00:00',91),(1002,7,'2011-10-16 16:00:00',63),(1002,8,'2010-11-11 16:00:00',84),(1002,9,'2013-11-21 10:00:00',60),(1002,10,'2012-11-11 12:00:00',71),(1002,11,'2011-11-11 14:00:00',93),(1002,12,'2010-11-11 15:00:00',96),(1002,13,'2013-11-11 14:00:00',83),(1002,14,'2012-11-11 15:00:00',69),(1002,15,'2011-12-11 10:00:00',89),(1002,16,'2010-09-11 10:00:00',83),(1003,1,'2013-11-11 16:00:00',91),(1003,2,'2012-11-10 10:00:00',75),(1003,3,'2011-12-19 10:00:00',65),(1003,4,'2010-11-18 11:00:00',63),(1003,5,'2013-11-11 14:00:00',90),(1003,6,'2012-09-13 15:00:00',96),(1003,7,'2011-10-16 16:00:00',97),(1003,8,'2010-11-11 16:00:00',77),(1003,9,'2013-11-21 10:00:00',62),(1003,10,'2012-11-11 12:00:00',81),(1003,11,'2011-11-11 14:00:00',76),(1003,12,'2010-11-11 15:00:00',61),(1003,13,'2013-11-11 14:00:00',93),(1003,14,'2012-11-11 15:00:00',79),(1003,15,'2011-12-11 10:00:00',78),(1003,16,'2010-09-11 10:00:00',96),(1004,1,'2013-11-11 16:00:00',84),(1004,2,'2012-11-10 10:00:00',79),(1004,3,'2011-12-19 10:00:00',76),(1004,4,'2010-11-18 11:00:00',78),(1004,5,'2013-11-11 14:00:00',81),(1004,6,'2012-09-13 15:00:00',90),(1004,7,'2011-10-16 16:00:00',63),(1004,8,'2010-11-11 16:00:00',89),(1004,9,'2013-11-21 10:00:00',67),(1004,10,'2012-11-11 12:00:00',100),(1004,11,'2011-11-11 14:00:00',94),(1004,12,'2010-11-11 15:00:00',65),(1004,13,'2013-11-11 14:00:00',86),(1004,14,'2012-11-11 15:00:00',77),(1004,15,'2011-12-11 10:00:00',82),(1004,16,'2010-09-11 10:00:00',87),(1005,1,'2013-11-11 16:00:00',82),(1005,2,'2012-11-10 10:00:00',92),(1005,3,'2011-12-19 10:00:00',80),(1005,4,'2010-11-18 11:00:00',92),(1005,5,'2013-11-11 14:00:00',97),(1005,6,'2012-09-13 15:00:00',72),(1005,7,'2011-10-16 16:00:00',84),(1005,8,'2010-11-11 16:00:00',79),(1005,9,'2013-11-21 10:00:00',76),(1005,<
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值