免费网站的软件网站开发任务需求书

pingmian/2026/1/23 6:13:06/文章来源:
免费网站的软件,网站开发任务需求书,大型网站开发用什么语言,网站图片引导页怎么做Mysql 数据库是所有软件体系中最核心的存在 DBA 1.1什么是数据库 数据库#xff08;DB#xff0c;DataBase#xff09; 概念#xff1a;数据仓库#xff0c;软件#xff0c;安装在操作系统上#xff08;window#xff0c;linux...#xff09; 作用#xff1a;存…Mysql 数据库是所有软件体系中最核心的存在 DBA 1.1什么是数据库 数据库DBDataBase 概念数据仓库软件安装在操作系统上windowlinux... 作用存储数据 1.2DBMS数据库管理系统 数据库分类 关系型数据库 1.Mysql ,Oracel,SqlServer,DB2,SQLlite 2.通过表和表之间行和列之间的关系进行数据的存储 非关系型数据库(NoSQL) 1.Redis MongDB 2.非关系型数据库对象存储通过对象的自身属性来决定 DBMS 数据库的管理软件维护和获取数据 1.3MySQL(开源的数据库软件) MySQL 是最流行的关系型数据库管理系统在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System关系数据库管理系统)应用软件之一。 sc delete mysql,清空mysql然后重新安装 C:\Windows\System32mysql -u root -p123456 --在命令提示符里连接数据库 ​ --所有的语句都用分号结尾 show databases;--查看所有的数据库 use school--切换数据库使用use命令 Database changed show tables--查看数据库中所有的表 describe student;--显示数据库中所有表的信息 create databbase westos;--创建一个数据库 exit--退出连接 --   单行注释 /* */ 多行注释 数据库xxx语言 DDL 定义 DML 操作 DQL 查询 DCL 控制 2.操作数据库 操作数据库操作数据库中的表操作数据库中表的数据 2.1操作数据库(了解) mysql关键字不区分大小写 1.创建数据库 CREATE DATABASE [IF NOT EXISTS] westos -- []代表可选 2.删除数据库 DROP DATABASE [IF EXISTS] westos 3.使用数据库 USE school -- tab上面的键 如果你的表明或者字段名是一个特殊字符就需要带 飘 4.查看数据库 SHOW DATABASES 2.2数据库列的数据类型 1.数值 tinyint 十分小的数据 1个字节 smallint 较小的数据 2个字节 mediumint 中等大小的数据 3个字节 int 标准的整数 4个字节 bigint 较大的数据 8个字节 float 浮点数 4个字节 double 浮点数 8个字节(精度问题) decimal 字符串形式的浮点数 (金融) char 字符串固定大小的 0-255 varchar 可变字符串 0-65535 常用的变量 String tinytext 微型文本 2^8-1 text 文本串 2^16-1 保存大文本 3.时间日期 date YYYY-MM-DD,日期格式 time HHmmss时间格式 datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式 timestamp 时间戳1970.1.1到现在的毫秒数 较为常用 4.null 不要用null进行结算结果为null 2.3数据库的字段属性 1.Unsigned: 无符号的整数 声明了该列不能声明为负数 2.zerofill: 0填充的 不足的位数使用0来填充 int(3) 5 005 3.自增 通常理解为自增自动在上一条记录的基础上1(默认) 通常用来设计唯一的主键必须是整数类型 可以自定义设计主键自增的起始值和步长 4.非空 如果选上非空 如果不给她赋值就会报错 null如果不填写值默认就是null 5.默认 默认的值 6.拓展 每个表都必须存在的5个字段 /*   id 主键 version 乐观锁 is_delete   伪删除 gmt_create 创建时间 gmt_update   修改时间 ​ ​ */ ​ ​ 2.4创建数据库表 -- 表的名称和字段尽量使用括起来 -- AUTO_INCREMENT自增 -- 字符串使用单引号括起来 -- 所有的语句后面加,最后一句不加 --PRIMARY KEY 一般一个表只有一个唯一的主键 CREATE TABLE IF NOT EXISTS student( id INT(4) NOT NULL AUTO_INCREMENT COMMENT 学号 , name VARCHAR(30) NOT NULL DEFAULT 匿名 COMMENT 姓名, sex VARCHAR (20) NOT NULL DEFAULT 女 COMMENT 性别, birthday DATETIME DEFAULT NULL COMMENT出生日期, address VARCHAR(100) DEFAULT NULL COMMENT地址, email VARCHAR (50) DEFAULT NULL COMMENT 邮件,PRIMARY KEY(id) ​ ​ )ENGINEINNODB DEFAULT CHARSET utf8 ​ ​ ​ 格式create table [if not exists] 表名(字段名 列类型[属性][索引][注释],字段名 列类型[属性][索引][注释],字段名 列类型[属性][索引][注释],......字段名 列类型[属性][索引][注释] ​ ​ )[表类型][字符集设置][注释] 2.4.1常用命令 SHOW CREATE DATABASE school -- 查看创建数据库的语句 CREATE DATABASE school /*!40100 DEFAULT CHARACTER SET utf8 */ ​ ​ SHOW CREATE TABLE student -- 查看数据表student的定义语句 CREATE TABLE student (id INT(4) NOT NULL AUTO_INCREMENT COMMENT 学号 ,name VARCHAR(30) NOT NULL DEFAULT 匿名 COMMENT 姓名,sex VARCHAR(20) NOT NULL DEFAULT 女 COMMENT 性别,birthday DATETIME DEFAULT NULL COMMENT 出生日期,address VARCHAR(100) DEFAULT NULL COMMENT 地址,email VARCHAR(50) DEFAULT NULL COMMENT 邮件,PRIMARY KEY (id) ) ENGINEINNODB DEFAULT CHARSETutf8 ​ ​ DESC student -- 显示表的结构 2.5数据表的类型 /*  关于数据库引擎INNOB 默认使用~ 安全性高事务的处理多表多用户操作MYISAM   早些年使用的 节约空间速度较快*/ MYISAMINNODB事务支持不支持支持数据行锁定不支持支持外键约束不支持支持全文索引支持不支持表空间的大小较小较大约为2倍 所有的数据库文件都存在data目录下一个文件夹就对应一个数据库 本质还是文件的存储 MySQL引擎在物理文件上的区别 INNODB在数据库表中只有一个.frm文件以及data目录下的ibdata1文件 MYISAM对应文件 .frm 表结构的定义文件 .MYD 数据文件(data) .MYI 索引文件(index) 2.5.1设置数据库表的字符集编码 CHARSET utf8 也可以在my.ini中配置默认的编码 character -set-server utf8 2.6修改数据表 -- 修改表名 ALTER TABLE 旧表名 RENAME AS 新表名 ALTER TABLE teacher RENAME AS teacher1 -- 增加表的字段 ALTER TABLE 表名 ADD 字段名 列属性 ALTER TABLE teacher1 ADD age INT(11) -- 修改表的字段(重命名修改约束) ALTER TABLE teacher1 MODIFY age VARCHAR(11) -- modify 只能修改字段的数据类型 ALTER TABLE teacher1 CHANGE age age1 INT(2)  -- change既能重命名也可以改约束 -- 删除表的字段 ALTER TABLE teacher1 DROP age1 -- 删除表 DROP TABLE IF EXISTS teacher1 ​ ​ 3.MySQL数据管理 3.1外键 CREATE TABLE grade (gradeid INT(10) NOT NULL AUTO_INCREMENT COMMENT 年纪id,gradename VARCHAR(50) NOT NULL COMMENT 年纪名称,PRIMARY KEY (gradeid) ) ENGINEINNODB DEFAULT CHARSETutf8 ----------------------------------------------------- 定义外键key ​ ​ ​ CREATE TABLE student (id INT(4) NOT NULL AUTO_INCREMENT COMMENT 学号 ,name VARCHAR(30) NOT NULL DEFAULT 匿名 COMMENT 姓名,sex VARCHAR(20) NOT NULL DEFAULT 女 COMMENT 性别,birthday DATETIME DEFAULT NULL COMMENT 出生日期,gradeid INT(10) NOT NULL COMMENT 学生年纪,address VARCHAR(100) DEFAULT NULL COMMENT 地址,email VARCHAR(50) DEFAULT NULL COMMENT 邮件,PRIMARY KEY (id),KEY FK_gradeid(gradeid),CONSTRAINT FK_gradeid FOREIGN KEY (gradeid) REFERENCES grade(gradeid) ) ENGINEINNODB DEFAULT CHARSETutf8 ​ ​ ----------------------------------------------------- 在表外面创建外键 alter table student add CONSTRAINT FK_gradeid FOREIGN KEY (gradeid) REFERENCES grade(gradeid); alter table 表名 add CONSTRAINT 约束名 FOREIGN KEY(作为外键的列) REFERENCES (引用哪一个表)(哪一个字段) 3.2DML语言全部记住 数据库意义 数据存储数据管理 DML语言数据操作语言 3.2.1添加(insert) ​ INSERT INTO student1 (email) VALUES (119)-- INSERT INTO 表名 ( 字段) values (数据) ​ ​ INSERT INTO student1 (email)  VALUES(222),(666) -- 一个字段插入多个数据 ​ INSERT INTO student1 (sex ,email,address) VALUES (女,9999,**)-- 多个字段插入多个数据 ​ --字段可以省略但是后面的数据要一一对应 ​ 3.2.2修改update UPDATE student1 SET name长江一号 -- 不指定会改变所有 UPDATE student1 SET name长江二号 WHERE id1 -- where 指定改哪里 UPDATE student1 SET name长江二号 ,sex 男 WHERE id1 -- 修改多个属性用逗号隔开 ​ ​ update 表名 set 字段 值或变量 where ​ UPDATE student1 SET name长江5号 ,sex 男 WHERE id3 AND name长江一号 逻辑运算符含义范围结果等于56false或!不等于56trueBETWEEN....and...在某个范围内闭区间[2,5]AND 与我和你OR 或||not ! 非not a ! a 操作符会返回布尔值 3.2.3删除(delete) DELETE FROM student1 WHERE id1  -- 删除指定数据 truncate 作用 完全清空一个数据库表 表的结构和索引约束不会变 TRUNCATE student1  -- 清空表 相同点都能删除不会删除表结构 不同 truncate 重新设置自增列计数器会归零 delete自增不会归零 CREATE TABLE test( id INT(4) NOT NULL AUTO_INCREMENT, coll VARCHAR(20) NOT NULL,PRIMARY KEY (id) ​ )ENGINEINNODB DEFAULT CHARSETutf8 INSERT INTO test (coll)  VALUES (1),(2) ​ TRUNCATE TABLE test-- 自增归零 了解 delete删除以后重启数据库 引擎是innodb自增会从1开始存在内存当中的断电即失 是myisam 继续从上一个自增量开始(存在文件中的不会丢失) 4.DQL查询数据最重点 4.1DQL (Data Query LANGUAGE数据查询语言) 1.所有的查询操作都用它 Select 2.简单的查询 复杂的查询都能做 3.数据库中最核心的语言最重要的语句 4.使用频率最高的语句 4.2查询 -- select 字段,... from 表名SELECT *FROM student  -- 查询全部的学生SELECT studentno ,studentname FROM student  -- 查询指定的字段 SELECT studentno AS 学号,studentname AS 学生姓名 FROM student AS s-- 别名给结果起一个名字 as 字段表名都可以SELECT CONCAT ( 姓名 ,studentname) AS 新名字 FROM student   -- 函数 concatab ​ 去重 distinct SELECT *FROM resultSELECT studentno FROM resultSELECT   DISTINCT studentno FROM result -- 发现重复数据 去重 SELECT VERSION() -- 查询系统版本 函数 SELECT  100*2-1 AS 计算结果  -- 用来计算 表达式 SELECT auto_increment_increment  -- 查询自增的步长变量 4.3where条件返回布尔值 作用 检索数据中符合条件的值 见3.2.2 逻辑与算符 模糊查询比较运算符 运算符语法描述is nulla is null如果操作符为null结果为真is not nulla is not null如果操作符不为null结果为真betweena between b and c若a在b和c之间结果为真likea like b 小红lile小红1真sql匹配如果a能匹配到b结果为真ina in a1a2a3...如果a在a1或者a2其中的某一个值结果为真 -- 查询姓刘的同学 -- like结合 %(代表0到任意一个字符) _一个字符 SELECTstudentno,studentnameFROM student WHERE studentname LIKE 刘%-- 查询姓刘的同学 名字后面只有一个字 SELECTstudentno,studentnameFROM student WHERE studentname LIKE 刘_-- 查询姓刘的同学 名字后面只有2个字 SELECTstudentno,studentnameFROM student WHERE studentname LIKE 刘__ -- 查询名字中有楠的SELECTstudentno,studentnameFROM student WHERE studentname LIKE %楠% -------------------------------------------------------------------------------------- in (具体的精确的一个或者多个值)---- 查询 100110021003学员 SELECT studentnostudentname FROM student WHERE IN (1001,1002,1003) -- null   not null         -- -- 查询地址为空的学生 SELECT studentnostudentname FROM student WHERE address  OR address IS NULL -- 查询有出生日期的同学 SELECT studentnostudentname FROM student WHERE borndate IS NOT NULL 4.4联表查询 join on 连接查询 语法 where 等值查询 JOIN 操作描述Inner join交集left join会返回左表中所有的值即使右表中是空值right join返回右表中所有的值即使左表是空值 SELECT s.studentno,studentname, subjectno,studentresult FROM student AS s   INNER JOIN result AS r WHERE s.studentno r.studentno   -- 两个表的交集 ​ ​ ​ SELECT s.studentno,studentname, subjectno,studentresult FROM student AS s   RIGHT JOIN result AS r ON s.studentno r.studentno   ​ SELECT s.studentno,studentname, subjectno,studentresult FROM student AS s   LEFT JOIN result AS r ON s.studentno r.studentno   SELECT s.studentno,studentname, subjectname,studentresult FROM student AS s RIGHT JOIN result AS r ON s.studentno r.studentno   INNER JOIN subject AS sub ON r.subjectno sub.subjectno -- 要查 学号 学生姓名 科目名 分数 /* 从三张表查 student result subject SELECT s.studentno,studentname, subjectname,studentresult FROM student AS s RIGHT JOIN result AS r ON s.studentno r.studentno   这里查询到 student和result中学号姓名 分数 内联一个 从subject表中找到和result表中学科名一样的 就找到了 ​ */ ​ from表 xxx join 连接的表  on 交叉条件 /* 思路 分析查询的字段来自那几张表 确定使用哪种连接查询 7种 确定交叉点 (这两个表中那个数据是相同的) 判断条件s.studentno r.studentno   ​ */ 4.5自连接 自己的表和自己的表连接核心一张表实际上是两张表组成的 SELECT a.categoryName AS 父栏目 ,b.categoryName AS 子栏目 FROM category AS a ,category AS b WHERE a.categoryidb.pid 4.6分页和查询 -- 排序 升序asc 降序desc​ SELECT s.studentno,studentname, subjectname,studentresult FROM student AS s RIGHT JOIN result AS r ON s.studentno r.studentno   INNER JOIN subject AS sub ON r.subjectno sub.subjectno WHERE subjectname 数据库结构 ORDER BY studentresult ASC -- 排序 升序asc 降序desc -- limit 分页 (起始值页面的大小) -- limit 05 表示1-5的数据 页面大小都是5 -- limit 15 表示2-6的数据 页面大小都是5   -- limit 65 SELECT s.studentno,studentname, subjectname,studentresult FROM student AS s RIGHT JOIN result AS r ON s.studentno r.studentno   INNER JOIN subject AS sub ON r.subjectno sub.subjectno WHERE subjectname 数据库结构 ORDER BY studentresult ASC LIMIT 0,5 -- pagesize 页面大小 n当前页 -- 第n页 (n-1)*5,5                   (当前页-1)*页面大小页面大小 -- 数据总数/页面大小总页数 有余数1 4.7子查询 本质在where语句中嵌套一个子查询语句 where( select *from) -- 查询 学号 学科号 学生成绩并且科目为数据库结构的学生成绩降序排序 -- 联表查询 SELECT studentno,r.subjectno,studentresult FROM result r INNER JOIN subject sub ON r.subjectno sub.subjectno WHERE subjectname数据库结构 ORDER BY studentresult DESC -- 子查询 (由里及外) ​ SELECT studentno,r.subjectno,studentresult FROM result r WHERE (SELECT subjectnameFROM subjectWHERE subjectname z数据库结构) ORDER BY studentresult DESC 4.8 分组和过滤 ----------------查询不同课程的平均分最高分最低分平均分80 核心;(根据不同的课程进行分组)-------SELECT subjectname,AVG(studentresult) AS 平均分,MAX(studentresult),MIN(studentresult)FROM result r INNER JOIN subject sub ON r.subjectno sub.subjectnoGROUP BY r.subjectno  -- 通过什么字段来分组HAVING 平均分80 5.MySQL函数 5.1常用函数 -- 数学运算 SELECT ABS(-8)  -- 绝对值 SELECT CEILING(9.4) -- 向上取整 SELECT FLOOR(9.4) -- 向下取整 SELECT RAND() -- 返回一个0-1之间的随机数 SELECT SIGN(5)  --返回参数的符号 0是0 负数是-1 正数是1 -- 字符串函数 SELECT CHAR_LENGTH (我爱你)  -- 字符串长度 3 SELECT CONCAT (老鼠,爱,大米)   -- 拼接字符串 SELECT INSERT(我非常热爱编程,2,4,特别特别)  -- 结果是 我特别特别编程   从某个位置开始替换某个长度 SELECT LOWER (qiannan) -- 转为小写 SELECT UPPER(qiannan)  -- 转为大写 SELECT INSTR (qiannan,n)  -- 返回第一次出现的字串的索引 SELECT REPLACE (我说坚持就能成功,坚持,努力)-- 替换出现的指定字符串 SELECT SUBSTR (狂神说坚持就能成功,4,6) -- 返回指定的字符串46 起始位置截取长度SELECT REVERSE (狂神说坚持就能成功)  -- 反转------------------------ 时间和日期函数 ----------SELECT CURRENT_DATE()  -- 获取当前日期SELECT NOW()  -- 获取当前的时间SELECT LOCALTIME () -- 本地时间SELECT SYSDATE() -- 系统十几件SELECT YEAR (NOW())SELECT MONTH (NOW())SELECT DAY (NOW())SELECT HOUR (NOW())SELECT MINUTE (NOW())SELECT SECOND (NOW())--------- 系统 --------SELECT USER() ​ ​ 5.2聚合函数常用 函数名称描述count()计数sum()求和avg()平均值max()最大值min()最小值 -------------------------- 计数 ----------------SELECT COUNT(borndate) FROM student  -- count(字段)会忽略所有的null值SELECT COUNT(*) FROM student  -- count(*) 不会忽略null值本质 计算行数SELECT COUNT(1) FROM student  -- count(1) 不会忽略null值本质 计算行数SELECT SUM(studentresult) AS 总和 FROM result  -- 总分SELECT AVG(studentresult) AS 总和 FROM result  -- 平均分SELECT MAX(studentresult) AS 总和 FROM result  -- 最高分SELECT MIN(studentresult) AS 总和 FROM result  -- 最低分 数据库级别的MD5数据加密 不可逆 CREATE TABLE testmd5( id  INT(4)  NOT NULL,name VARCHAR(20) NOT NULL,pwd VARCHAR(50) NOT NULL,PRIMARY KEY (id)​ )ENGINEINNODB DEFAULT CHARSETutf8 ​INSERT INTO testmd5 VALUES(1,zhangsan,123456),(2,lisi,123456),(3,wangwu,123456)-- 加密全部的密码-- UPDATE testmd5  SET pwdMD5(pwd) -- 插入的时候加密 -- INSERT INTO testmd5 VALUES(4,zhangsan,MD5(123456)) 6.事务 要么都成功要么都失败 事务原则 ACID原则 原子性 一致性最终一致性 隔离性 持久性 (脏读幻读.. 原子性要么都成功要么都失败 一致性事务前后的数据完整性要保证一致 持久性 事务提交 事务一旦提交则不可逆被持久化到数据库中 隔离性事务的隔离性是多个用户并发访问数据库时数据库为每一个用户开启的事务不能被其他事务的操作数据所干扰多个并发事务之间要相互隔离。 脏读指一个事务读取了另外一个事务未提交的数据 不可重复读在一个事务内读取表中的某一行数据多次读取结果不同。这个不一定是错误只是某些场合不对 虚读(幻读)是指在一个事务内读取到了别的事务插入的数据导致前后读取数量总量不一致。多了一行 -- 模拟转账 事务SET autocommit 0; -- 关闭自动提交 START TRANSACTION  -- 开启一个事务 ​ UPDATE ACCOUNT SET moneymoney-50  WHERE name A -- A-500 UPDATE ACCOUNT SET moneymoney50  WHERE name B -- A500 ​COMMIT -- 提交事务 就被持久化ROLLBACK   -- 回滚 SET autocommit 1  -- 恢复默认值 7.索引 索引是帮助MySQL高效获取数据的数据结构 索引的分类: 1.主键索引(primary key) 唯一的标识主键不可重复只能有一个列作为主键 非空且唯一 2.唯一索引 (unique key) 避免重复的列出现唯一索引可以重复多个列都可以标识为唯一索引 索引列的值必须唯一可以出现空值 3.常规索引 (key/index) 默认的indexkey关键字来设置 4.全文索引 (fulltext) 在特定的数据库引擎下才有 myism 快速定位数据 -- 显示所有的索引信息 SHOW INDEX FROM student -- 增加一个全文索引 (索引名) 列名 ALTER TABLE school.student ADD FULLTEXT INDEX studentname(studentname) -- explain 分析sql执行情况 EXPLAIN SELECT * FROM student  -- 非全文索引 EXPLAIN SELECT * FROM student WHERE MATCH(studentname)AGAINST(刘)  -- 非全文索引 -- id_表名_字段名 -- create index 索引名 on 表名 (字段) -- 创建完索引以后在查找 速度就很快 因为给每一条数据都创建了一个btreeCREATE INDEX id_appuser_name ON appuser(name) ​ SELECT *FROM appuser WHERE name 用户9999 ​ EXPLAIN SELECT *FROM appuser WHERE name 用户9999 索引原则 1.索引不是越多越好 2.不要对进程变动数据加索引 3.小数据量的表不需要加索引 4.索引一般加在常用来调查的字段上 索引的数据结构 Hash类型的索引 Btree InnoDB的默认数据结构 8.权限管理和备份 8.1用户管理 SQLyog可视化管理 SQL命令操作 用户表 mysql.user ​ -- 创建用户 CREATE USER 用户名 IDENTIFIED BY 密码 CREATE USER kuangshen IDENTIFIED BY 123456 -- 修改密码 修改当前用户密码 SET PASSWORD PASSWORD(123456) ​ ​ ​ -- 修改密码 修改指定用户密码 SET PASSWORD FOR kuangshen PASSWORD(111111) ​ -- 重命名 RENAME USER 原名字 TO 新名字 RENAME USER kuangshen TO kuangshen2 ​ -- 用户授权 ALL PRIVILEGES 全部的权限 库.表 -- ALL PRIVILEGES 除了给别人授权其他都能干GRANT ALL PRIVILEGES ON *.* TO kuangshen2-- 查询权限SHOW GRANTS FOR kuangshen2 -- 查看指定用户的权限-- GRANT ALL PRIVILEGES ON *.* TO kuangshen2%SHOW GRANTS FOR rootlocalhost-- root用户权限     GRANT ALL PRIVILEGES ON *.* TO rootlocalhost WITH GRANT OPTION-- 撤销权限 revoke哪些权限 在哪个库撤销给谁撤销REVOKE ALL PRIVILEGES ON *.*FROM kuangshen2-- 删除用户DROP USER kuangshen2 8.2数据库备份 为什么要备份 1.保证重要的数据不丢失 2.数据转移 MySQL数据库备份的方式 1.直接拷贝物理文件 2.在sqlyog这种可视化工具中手动导出 3.使用管理员身份命令行导出 mysqldump 命令行使用 mysqldump -hlocalhost -uroot -p123456 school student D:/a.sql mysqldump -h主机 -u 用户名 -p密码 数据库 表1 表2 磁盘位置/文件名 ​ ​ 导入 登录的情况下切换到指定的数据库 source D/a.sql ​ mysql -u用户名   -p密码 库名备份文件 ​ 9.规范数据库设计 软件开发之中关于数据库的设计 1.分析需求分析业务和需要处理的数据库的需求 2.概要设计设计关系图E-R图 9.1三大范式 为什么需要数据规范化 信息重复 更新异常 插入异常 无法正常显示信息 删除异常 丢失有效的信息 三大范式 第一范式(1NF) 原子性保证每一列不可再分 第二范式(2NF) 满足原子性 每张表只描述一件事情 第三范式(3NF) 满足第一范式和第二范式 确保每一列数据和主键直接相关不能间接相关 规范性和性能问题 关联查询的表不得超过3张表 1.考虑商业化的需求和目标成本用户体验数据库的性能更加重要 2.在规范性能问题的时候需要适当的考虑一下规范性 3.故意给某些表增加一些冗余的字段从多表查询变为单表查询 4.故意增加一些计算列从大数据量降低为小数据列的查询 索引 10.JDBC 数据库驱动 我们的程序会通过数据库驱动和数据库打交道 SUN公司为了简化开发人员的(对数据库的统一)操作提供了一个(java操作数据库的)规范俗称JDBC这些规范的实现由具体的厂商去做 对于开发人员来说我们只需要掌握JDBC接口的操作即可 框架没有什么是加一层解决不了的 //1.加载驱动// DriverManager.registerDriver(new com.mysql.jdbc.Driver());Class.forName(com.mysql.jdbc.Driver) ; //固定写法//2.用户信息和url//useUnicodetruecharacterEncodingutf8useSSLtrueString url jdbc:mysql://localhost:3306/jdbcstudy?useUnicodetruecharacterEncodingutf8useSSLtrue;String username  root;String password 123456; // mysql -- 3306 //协议//主机地址端口号/数据库名?参数1参数2参数3 // oralce --1521 //jdbc:oracle:thin:localhost:1521:sid//3.连接成功数据库对象   Connection代表数据库Connection connection DriverManager.getConnection(url, username, password);//connection.commit();//事务提交// connection.rollback();//事务回滚// connection.setAutoCommit();//数据库设置自动提交//4.执行sql的对象 Statement执行sql的对象Statement statement connection.createStatement();//statement.executeQuery();//查询操作返回ResultSet//statement.execute();//执行任何sql//statement.executeUpdate();//更新插入删除都是用这个返回一个受影响的行数 ​//5.执行sql的对象去 执行sql 可能存在结果查看返回结果String sql SELECT *FROM users ;ResultSet resultSet statement.executeQuery(sql); //返回的结果集封装了我们所有查询的结果while (resultSet.next()){System.out.println(id resultSet.getObject(id));System.out.println(name resultSet.getObject(Name));} ​//6.释放连接resultSet.close();statement.close();connection.close(); 10.1statement对象详解 1.编写工具类 package lesson02.util; ​ import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties; ​ public class jdbcutils { ​private  static  String driver null;private  static  String url null;private  static  String username null;private  static  String password null;static{try{InputStream inputStream jdbcutils.class.getClassLoader().getResourceAsStream(db.properties);Properties properties new Properties();properties.load(inputStream); ​driver   properties.getProperty(driver);url   properties.getProperty(url);username   properties.getProperty(username);password   properties.getProperty(password);//驱动只用加载一次Class.forName(driver); ​ ​} catch (IOException e) {throw new RuntimeException(e);} catch (ClassNotFoundException e) {throw new RuntimeException(e);}}//获取连接public static Connection  getConnection() throws SQLException {return DriverManager.getConnection(url, username, password);} ​//释放连接public static void  release(Connection co, Statement st, ResultSet rs) throws SQLException {if(rs!null){rs.close();}if(st!null){st.close();}if(co!null){co.close();}} } 2.代码实现 都用 executeUpdate 增删改 public class Testinsert {public static void main(String[] args) throws SQLException {Connection co null;Statement st null;ResultSet rs null; ​co jdbcutils.getConnection();  //获取数据库连接st co.createStatement();  //获取执行sql的对象String sql INSERT INTO users(id,NAME,PASSWORD,email,birthday) VALUES (4,qiannan,123456,1196691345qq.com,2003-02-25);int i st.executeUpdate(sql);if(i0){System.out.println(插入成功);}jdbcutils.release(co,st,rs); ​} } 查 executeQuery public class TestSlect {public static void main(String[] args) throws SQLException {Connection co null;Statement st null;ResultSet rs null; ​co jdbcutils.getConnection();st co.createStatement();//sqlString sql select * from users where id1;rs st.executeQuery(sql);//查询完毕while(rs.next()){System.out.println(rs.getString(NAME));}jdbcutils.release(co,st,rs); ​ ​} } sql注入问题 sql存在漏洞会被攻击导致数据泄露 sql会被拼接or ​ public class TestSlect {public static void main(String[] args) {//login(kuangshen,123456)login( or11, or 11); //空或者为1}public static void login (String username,String password) throws SQLException {Connection co null;Statement st null;ResultSet rs null; ​co jdbcutils.getConnection();st co.createStatement();//sqlString sql select * from users where id1;rs st.executeQuery(sql);//查询完毕while(rs.next()){System.out.println(rs.getString(NAME));}jdbcutils.release(co,st,rs); ​ ​} } ​ 10.2PreparedStatement对象 PreparedStatement可以防止SQL注入并且效率更高 本质是把传递进来的参数当作字符假设其中存在转义字符比如说会被直接转义 插入 public class Testinsert02 {public static void main(String[] args) throws SQLException {Connection co null;PreparedStatement st null; ​ ​co jdbcutils.getConnection();//区别//使用占位符代替参数String sql INSERT INTO users(id,NAME,PASSWORD,email,birthday)values(?,?,?,?,?);st co.prepareStatement(sql); //预编译sql 先写sql然后不执行//手动给参数赋值st.setInt(1,4);st.setString(2,qiannan);st.setString(3,123456);st.setString(4,1196691345qq.com);//注意点// sql.date 数据库 java.sql.Date时间戳// util.date java   new Date().getTime() 获得时间戳st.setDate(5,new java.sql.Date(new Date().getTime()));//执行int i st.executeUpdate();if(i0){System.out.println(插入成功);}jdbcutils.release(co,st,null);} ​ } 删除 public class TestDelete {public static void main(String[] args) throws SQLException {Connection co null;PreparedStatement st null; ​ ​co jdbcutils.getConnection();//区别//使用占位符代替参数String sql delete from users where id?;st co.prepareStatement(sql); //预编译sql 先写sql然后不执行//手动给参数赋值st.setInt(1,4); ​//注意点// sql.date 数据库 java.sql.Date时间戳// util.date java   new Date().getTime() 获得时间戳st.setDate(5,new java.sql.Date(new Date().getTime()));//执行int i st.executeUpdate();if(i0){System.out.println(删除成功);}jdbcutils.release(co,st,null);} } 改 public class Testupdate {public static void main(String[] args) throws SQLException {Connection co null;PreparedStatement st null; ​ ​co jdbcutils.getConnection();//区别//使用占位符代替参数String sql update users set name? where id?;st co.prepareStatement(sql); //预编译sql 先写sql然后不执行//手动给参数赋值 ​st.setString(1,qiannan);st.setInt(2,1); ​//注意点// sql.date 数据库 java.sql.Date时间戳// util.date java   new Date().getTime() 获得时间戳st.setDate(5,new java.sql.Date(new Date().getTime()));//执行int i st.executeUpdate();if(i0){System.out.println(更新成功);}jdbcutils.release(co,st,null);} } 查 public class TestSelect {public static void main(String[] args) throws SQLException {Connection co null;PreparedStatement st null;ResultSet rs null;co jdbcutils.getConnection();String sql select *from users where id?; //编写sqlst co.prepareStatement(sql);  //预编译st.setInt(1,1);//传递参数//执行rs   st.executeQuery();//执行if(rs.next()){System.out.println(rs.getString(NAME));}jdbcutils.release(co,st,rs);//释放 ​ ​} } 10.3事务 要么都成功要么都失败 ACID原则 原子性 要么全部完成要么都不完成 一致性总数不变 隔离性多个进程互不干扰 问题 脏读 一个事务读取了另一个没有提交的事务 不可重复读在同一个事务内重复读取表的数据表数据发生了改变 虚读(幻读) 在一个事务内读取到了别人插入的数据导致前后读出来的结果不一致 持久性:一旦提交不可逆 ​ public class TestTransaction {public static void main(String[] args) throws SQLException {Connection co null;PreparedStatement st null;ResultSet rs null;co jdbcutils.getConnection();//关闭数据库的自动提交自动会开启事务co.setAutoCommit(false);String sql1 update account set money money-100 where name A;st co.prepareStatement(sql1);st.executeUpdate(); ​String sql2 update account set money money100 where name B;st co.prepareStatement(sql2);st.executeUpdate();//业务完毕提交事务co.commit();System.out.println(成功);jdbcutils.release(co,st,rs);} } ​ 10.4数据库连接池 数据库连接 - 执行完毕-释放 连接--释放 十分浪费系统资源 池化技术准备一些预先的资源过来就连接预先准备好的 最小连接数 最大连接数 等待超时 编写连接池实现一个接口 DataSource DBCP C3P0 Druid 阿里巴巴 使用了这些数据库连接池后我们在项目开发中就不需要编写连接数据库的代码了 DBCP 无论使用什么数据源本质还是一样的 DataSource不会变方法也不变

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/86578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十大中国网站制作门户网站英文

文章目录一、 编辑配置文件1.1. 进入tomcat的conf目录1.2. 编辑tomcat-users.xml文件1.3. 添加配置信息二、 配置说明三、 启动tomcat服务3.1. 启动tomcat3.2. 浏览器访问3.3. 点击Manager App访问4033.4. 编辑配置文件3.5. 注释value部分3.6. 浏览器再次请求四、新建任务&…

网上做论文的网站软件工程师是做什么的

一.DDT简介 Data Driven Testing,数据驱动,简单来说就是测试数据的参数化 Python数据驱动模块DDT,包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据) 通常情况下,data中的数据按照一个参数传递给…

什么情况下需要建设网站安卓手机网页视频怎么下载

多线程中,锁用于确保同一时间只有一个线程可以访问共享资源,从而避免并发访问导致的数据不一致或者竞争条件等问题。 常见的锁有两种:互斥锁和读写锁。互斥锁的作用是保护共享资源,同时只允许一个线程访问,其他线程需…

店铺外卖网站怎么做wordpress网站源码分享

目录 一、协同过滤(Collaborative Filtering, CF)1. 基于用户的协同过滤2. 基于物品的协同过滤 二、深度学习在推荐系统中的应用1. 深度学习模型的优势2. 深度学习在推荐系统中的应用实例 三、总结与展望 推荐系统是现代信息处理和传播中不可或缺的技术&…

精品课程网站的建设初中做网站的软件

文章目录 从零开始学Go web——第一天一、Go与web应用简介1.1 Go的可扩展性1.2 Go的模块化1.3 Go的可维护1.4 Go的高性能 二、web应用2.1 工作原理2.2 各个组成部分2.2.1 处理器2.2.2 模板引擎 三、HTTP简介四、HTTP请求4.1 请求的文本数据4.2 请求方法4.2.1 请求方法类型4.2.2…

盐步网站制作开网页慢

陆家建伟国际汽车城,均价 7500 元/㎡美吉特家居广场,均价 17000 元/㎡美吉特灯都,均价 17000 元/㎡花桥绿地象屿苏河公园,均价 22950 元/㎡凯德都会新峰,均价 21500 元/㎡越洋国际,均价 18000 元/㎡浦西玫瑰…

深圳网站建设定制开发服务简洁的企业网站

个人主页:仍有未知等待探索-CSDN博客 专题分栏:C_仍有未知等待探索的博客-CSDN博客 目录 一、C关键字 二、命名空间 1、区别 1. C语言 ​编辑 2. C 2、命名空间定义 3、命名空间的使用 三、C输入&输出 四、缺省参数 五、函数重载 六、引用 …

旅游管理网站业务模块东莞关键词自动排名

Intellij 的Java/安卓工具链有着一种不可持续性,这种不可持续性体现在多个方面。 首先是不可持续运行。IDEA 使用时间越长,内存占用越大,从不主动释放。运行时间越长,日志越多,从不主动清理。 然后是不完整的开源&am…

云南建设网站首页视频网站如何做弹幕

• 高性能 XBurst 1 CPU,主频1.0GHz • 超低功耗 • 内置LPDDR2(X1600:32MB,X1600E:64MB) • 实时控制核XBurst 0,面向安全管理和实时控制 • 丰富的外设接口 应用领域 • 基于二维码的智能商业 • 智能物联网 • 高端…

wordpress 网站的占有wordpress下载验证码

近日,艾瑞咨询发布《2023年中国保险业数字化转型研究报告》,摩斯隐私计算解决方案被报告入选,并获得“保险业数字化卓越服务商”奖。 蚂蚁摩斯是隐私计算行业的领先布局者:早在2017年,蚂蚁集团启动了隐私计算项目&…

爱企业 查询怎么来自己做网站优化

视频哈工大李治军老师:https://www.bilibili.com/video/BV1d4411v7u7?p12 参考文档:https://blog.csdn.net/SakuraA6/article/details/108810916 学长在我大一推荐我看,p12和p13的内容真的有那么难吗,现在已经是我看的第三遍了还…

专业做甜点的网站手套外包加工网

aconda 是做什么用的这里就不说了,一般玩Python的都知道这东西,最早接触这东西是因为它把NVIDIA中cuda计算和Python互连的一个库拿下了,是买下来了还是专业,还是唯一合作的也就记不清了,那就是 numba , 那些年头Python…

微网站建设报价方案专业的制作网站开发公司

题目 给你两个单词 w o r d 1 word1 word1 和 w o r d 2 word2 word2, 请返回将 w o r d 1 word1 word1 转换成 w o r d 2 word2 word2 所使用的最少操作数 。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 方法—动…

做360网站中保存的图片存在哪里的红尘直播

一.有两角夹一边分别相等的两个三角形全等 数学证明: 设△ A B C 与△ A 1 B 1 C 1 ∠ B ∠ B 1 , ∠ C ∠ C 1 , B 1 C 1 B C 设△ABC与△A_1B_1C_1∠B∠B_1,∠C∠C_1,B_1C_1BC 设△ABC与△A1​B1​C1​∠B∠B1​,∠C∠C1​,B1​C1​BC ①移动 ∠ B 1 与 ∠ B 重合 , 边 B…

最新网站开发工具可以用wordpress的什么文件大小

开源最前线(ID:OpenSourceTop) 猿妹综合整理项目地址:https://github.com/SaekiRaku/vscode-rainbow-fart最近,Github上有一个名为Rainbow Fart的VSCode 插件被玩坏了,有了这个插件,程序员鼓励师这个物种就要灭绝了。为…

wordpress全站开启ssl一对一做的好的网站

1. 多项式回归模型的基本原理 多项式回归是线性回归的一种扩展,用于分析自变量 X X X与因变量 Y Y Y之间的非线性关系。与简单的线性回归模型不同,多项式回归模型通过引入自变量的高次项来增加模型的复杂度,从而能够拟合数据中的非线性模式。…

网站项目建设与管理论文中山市文联灯饰有限公司网站谁做的

SpringBoot 默认选择的是slf4j做日志门面&#xff0c;logback做日志实现。由于log4j有性能问题&#xff0c;不建议使用。 由于log4j2的表现性能更好&#xff0c;我们需要集成log4j2&#xff0c;同时排除旧的日志实现包。 <!-- Spring Boot 启动器 --> <dependency>…

seo网站建设厦门郑州网上车管所官网

一、简介 迭代器模式&#xff08;Iterator Design Pattern&#xff09;&#xff0c;也叫作游标模式&#xff08;Cursor Design Pattern&#xff09;。 在通过迭代器来遍历集合元素的同时&#xff0c;增加或者删除集合中的元素&#xff0c;有可能会导致某个元素被重复遍历或遍…

河南住房和城乡建设厅网站资质胡先煦回复秦海璐网页链接

Midjourney参数提示与用法。 常见的命令有: --seed:种子值 --q:品质 --c:混乱 --no:负面提示 --iw:权重(0.5-2) ::(多重提示) -- repeat(重复) --stop(停止) --title(无缝贴图:适用于模型版本 1、2、3、5) --video(过程动画,适用于模型版本 1、2…

做网站用的主机多少合适哈尔滨网页制作

Python在平时写写小工具真是方便快捷&#xff0c;Pyhon大法好。以下所有代码都是找了好多网上的大佬分享的代码按照自己的需求改的。 调用的库为Python-docx、win32com、PyPDF2、xlwings&#xff08;操作excel&#xff09;。 因为公司的任务要对上千个word文件进行批量操作&a…