ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:23.46KB ,
资源ID:4956149      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4956149.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(day16mysql编程提高.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

day16mysql编程提高.docx

1、day16mysql编程提高1. 课程回顾mysql基础 1)mysql存储结构: 数据库 - 表 - 数据 sql语句 2)管理数据库: 增加: create database 数据库 default character utf8; 删除: drop database 数据库; 修改: alter database 数据库 default character gbk; 查询: show databases / show create database 数据库; 3) 管理表: 选择数据库:use 数据库; 增加: create table 表(字段名1 字段类型,字段名2 字段类型.); 删

2、除: drop table 表; 修改: 添加字段: alter table 表 add column 字段名 字段类型; 删除字段: alter table 表 drop column 字段名; 修改字段类型: alter table 表 modify 字段名 新的字段类型; 修改字段名称 : alter table 表 change 旧字段名 新字段名 字段类型; 修改表名称: alter table 表 rename to 新表名; 查询: show tables / desc student; 4) 管理数据: 增加: insert into 表(字段1,字段2,。) values(值

3、1,值2.。); 删除: delete from 表 where 条件; 修改: update 表 set 字段1=值1,字段2=值2. where 条件; 查询: 4.1)所有字段: select * from 表; 4.2)指定字段: select 字段1,字段2. from 表; 4.3)指定别名: select 字段1 as 别名 from 表; 4.4 )合并列: select (字段1+字段2) from 表; 4.5)去重: select distinct 字段 from 表; 4.6)条件查询: a)逻辑条件 :and(与) or(或) select * from 表 wher

4、e 条件1 and/or 条件2 b)比较条件: = = = between and(在。之间) select * from 表 where servlet=90; c)判空条件: 判断null: is null / is not null 判断空字符串: = / d)模糊条件: like %: 替换任意个字符 _: 替换一个字符 4.7 分页查询:limit 起始行,查询行数 起始行从0开始 4.8 排序: order by 字段 asc/desc asc: 正序,顺序 desc:反序,倒序 4.9 分组查询:group by 字段 4.10: 分组后筛选: having 条件 SQL语句的

5、分类: DDL: 数据定义语言 create / drop / alter DML:数据操作语句 insert / delete /update / truncate DQL: 数据查询语言: select / show 今天的目标: 大纲: 1)数据约束 2)数据库设计(表设计) 3)存储过程 4)触发器 5)mysql权限问题2 数据约束 2.1什么数据约束 对用户操作表的数据进行约束 2.2 默认值 作用: 当用户对使用默认值的字段不插入值的时候,就使用默认值。 注意: 1)对默认值字段插入null是可以的。 2)对默认值字段可以插入非null- 1.1 默认值CREATE TABLE

6、student( id INT, NAME VARCHAR(20), address VARCHAR(20) DEFAULT 广州天河 - 默认值)DROP TABLE student;- 当字段没有插入值的时候,mysql自动给该字段分配默认值INSERT INTO student(id,NAME) VALUES(1,张三);- 注意:默认值的字段允许为nullINSERT INTO student(id,NAME,address) VALUE(2,李四,NULL);INSERT INTO student(id,NAME,address) VALUE(3,王五,广州番禺); 2.3 非空 作

7、用: 限制字段必须赋值 注意: 1)非空字符必须赋值 2)非空字符不能赋null- 1.2 非空- 需求: gender字段必须有值(不为null)CREATE TABLE student( id INT, NAME VARCHAR(20), gender VARCHAR(2) NOT NULL - 非空)- 非空字段必须赋值INSERT INTO student(id,NAME) VALUES(1,李四);- 非空字符不能插入nullINSERT INTO student(id,NAME,gender) VALUES(1,李四,NULL); 2.4 唯一 作用: 对字段的值不能重复 注意:

8、1)唯一字段可以插入null 2)唯一字段可以插入多个null - 1.3 唯一CREATE TABLE student( id INT UNIQUE, - 唯一 NAME VARCHAR(20)INSERT INTO student(id,NAME) VALUES(1,zs);INSERT INTO student(id,NAME) VALUES(1,lisi); - ERROR 1062 (23000): Duplicate entry 1 for key idINSERT INTO student(id,NAME) VALUES(2,lisi); 2.5 主键 作用: 非空+唯一 注意:

9、 1)通常情况下,每张表都会设置一个主键字段。用于标记表中的每条记录的唯一性。 2)建议不要选择表的包含业务含义的字段作为主键,建议给每张表独立设计一个非业务含义的 id字段。- 1.4 主键(非空+唯一)DROP TABLE student;CREATE TABLE student( id INT PRIMARY KEY, - 主键 NAME VARCHAR(20)INSERT INTO student(id,NAME) VALUES(1,张三);INSERT INTO student(id,NAME) VALUES(2,张三);- INSERT INTO student(id,NAME)

10、VALUES(1,李四); - 违反唯一约束: Duplicate entry 1 for key PRIMARY- insert into student(name) value(李四); - 违反非空约束: ERROR 1048 (23000): Column id cannot be null 2.6 自增长 作用: 自动递增 - 1.5 自增长CREATE TABLE student( id INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT, - 自增长,从0开始 ZEROFILL 零填充 NAME VARCHAR(20)- 自增长字段可以不赋值,自

11、动递增INSERT INTO student(NAME) VALUES(张三);INSERT INTO student(NAME) VALUES(李四);INSERT INTO student(NAME) VALUES(王五);SELECT * FROM student;- 不能影响自增长约束DELETE FROM student;- 可以影响自增长约束TRUNCATE TABLE student; 2.7 外键 作用:约束两种表的数据 出现两种表的情况: 解决数据冗余高问题: 独立出一张表 例如: 员工表 和 部门表 问题出现:在插入员工表数据的时候,员工表的部门ID字段可以随便插入! 使用

12、外键约束:约束插入员工表的部门ID字段值 解决办法: 在员工表的部门ID字段添加一个外键约束 - 部门表(主表)CREATE TABLE dept( id INT PRIMARY KEY, deptName VARCHAR(20)- 修改员工表(副表/从表)CREATE TABLE employee( id INT PRIMARY KEY, empName VARCHAR(20), deptId INT,- 把部门名称改为部门ID - 声明一个外键约束 CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) - 外键名

13、称 外键 参考表(参考字段) 注意: 1)被约束的表称为副表,约束别人的表称为主表,外键设置在副表上的! 2)主表的参考字段通用为主键! 3)添加数据: 先添加主表,再添加副表 4)修改数据: 先修改副表,再修改主表 5)删除数据: 先删除副表,再删除主表- 1.6 外键约束- 员工表CREATE TABLE employee( id INT PRIMARY KEY, empName VARCHAR(20), deptName VARCHAR(20) - 部门名称)INSERT INTO employee VALUES(1,张三,软件开发部);INSERT INTO employee VALU

14、ES(2,李四,软件开发部);INSERT INTO employee VALUES(3,王五,应用维护部);SELECT * FROM employee;- 添加员工,部门名称的数据冗余高INSERT INTO employee VALUES(4,陈六,软件开发部);- 解决数据冗余高的问题:给冗余的字段放到一张独立表中- 独立设计一张部门表CREATE TABLE dept( id INT PRIMARY KEY, deptName VARCHAR(20)DROP TABLE employee;- 修改员工表CREATE TABLE employee( id INT PRIMARY KEY

15、, empName VARCHAR(20), deptId INT,- 把部门名称改为部门ID - 声明一个外键约束 CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE - ON CASCADE UPDATE :级联修改 - 外键名称 外键 参考表(参考字段)INSERT INTO dept(id,deptName) VALUES(1,软件开发部);INSERT INTO dept(id,deptName) VALUES(2,应用维护部);IN

16、SERT INTO dept(id,deptName) VALUES(3,秘书部);INSERT INTO employee VALUES(1,张三,1);INSERT INTO employee VALUES(2,李四,1);INSERT INTO employee VALUES(3,王五,2);INSERT INTO employee VALUES(4,陈六,3);- 问题: 该记录业务上不合法,员工插入了一个不存在的部门数据INSERT INTO employee VALUES(5,陈六,4); - 违反外键约束: Cannot add or update a child row: a

17、foreign key constraint fails (day16.employee, CONSTRAINT emlyee_dept_fk FOREIGN KEY (deptId) REFERENCES dept (id)- 1)当有了外键约束,添加数据的顺序: 先添加主表,再添加副表数据- 2)当有了外键约束,修改数据的顺序: 先修改副表,再修改主表数据- 3)当有了外键约束,删除数据的顺序: 先删除副表,再删除主表数据- 修改部门(不能直接修改主表)UPDATE dept SET id=4 WHERE id=3;- 先修改员工表UPDATE employee SET deptId=2

18、WHERE id=4; - 删除部门DELETE FROM dept WHERE id=2;- 先删除员工表DELETE FROM employee WHERE deptId=2;SELECT * FROM dept;SELECT * FROM employee; 2.8 级联操作 问题: 当有了外键约束的时候,必须先修改或删除副表中的所有关联数据,才能修改或删除主表!但是,我们希望直接修改或删除主表数据,从而影响副表数据。可以使用级联操作实现! 级联修改: ON UPDATE CASCADE 级联删除: ON DELETE CASCADE CREATE TABLE employee( id

19、INT PRIMARY KEY, empName VARCHAR(20), deptId INT,- 把部门名称改为部门ID - 声明一个外键约束 CONSTRAINT emlyee_dept_fk FOREIGN KEY(deptId) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE - ON CASCADE UPDATE :级联修改 - 外键名称 外键 参考表(参考字段)注意: 级联操作必须在外键基础上使用- 级联修改(修改)- 直接修改部门UPDATE dept SET id=5 WHERE id=4;- 级联删除- 直接删

20、除部门 DELETE FROM dept WHERE id=1;3 数据库设计 3.1 引入 需求分析 - 需求分析师 - 原始需求- 抽取业务模型 图书模型:图书名称,版本号,作者 学生模型: 学号,学生姓名 手机号码 . 角色:学生 老师,图书管理员 需求说明书 需求设计 - 概要设计: 抽取实体:业务模型 - 实体模型(java 类 c+类)内存 class Book name, bookNo,author 数据库设计: 业务模型/实体模型 - 数据模型 (硬盘) 数据库表设计 问题: 如何设计? 详细设计 类详细,属性和方法 3.2 三大范式 设计原则: 建议设计的表尽量遵守三大范式。

21、 第一范式: 要求表的每个字段必须是不可分割的独立单元 student : name - 违反第一范式 张小名|狗娃 sutdent : name old_name -符合第一范式 张小名 狗娃 第二范式: 在第一范式的基础上,要求每张表只表达一个意思。表的每个字段都和表的主键有依赖。 employee(员工): 员工编号 员工姓名 部门名称 订单名称 -违反第二范式 员工表:员工编号 员工姓名 部门名称 订单表: 订单编号 订单名称 - 符合第二范式 第三范式: 在第二范式基础,要求每张表的主键之外的其他字段都只能和主键有直接决定依赖关系。 员工表: 员工编号(主键) 员工姓名 部门编号 部

22、门名 -符合第二范式,违反第三范式 (数据冗余高) 员工表:员工编号(主键) 员工姓名 部门编号 -符合第三范式(降低数据冗余) 部门表:部门编号 部门名4 关联查询(多表查询)- *二、关联查询(多表查询)*- 需求:查询员工及其所在部门(显示员工姓名,部门名称)- 2.1 交叉连接查询(不推荐。产生笛卡尔乘积现象:4 * 4=16,有些是重复记录)SELECT empName,deptName FROM employee,dept;- 需求:查询员工及其所在部门(显示员工姓名,部门名称)- 多表查询规则:1)确定查询哪些表 2)确定哪些哪些字段 3)表与表之间连接条件 (规律:连接条件数量

23、是表数量-1)- 2.2 内连接查询:只有满足条件的结果才会显示(使用最频繁)SELECT empName,deptName - 2)确定哪些哪些字段 FROM employee,dept - 1)确定查询哪些表 WHERE employee.deptId=dept.id - 3)表与表之间连接条件 - 内连接的另一种语法SELECT empName,deptName FROM employee INNER JOIN dept ON employee.deptId=dept.id; - 使用别名SELECT e.empName,d.deptName FROM employee e INNER

24、JOIN dept d ON e.deptId=d.id;- 需求: 查询每个部门的员工- 预期结果: - 软件开发部 张三 - 软件开发部 李四 - 应用维护部 王五 - 秘书部 陈六 - 总经办 null - 2.2 左外连接查询: 使用左边表的数据去匹配右边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null - (注意: 左外连接:左表的数据一定会完成显示!)SELECT d.deptName,e.empName FROM dept d LEFT OUTER JOIN employee e ON d.id=e.deptId;- 2.3 右外连接查询: 使用右边表的数

25、据去匹配左边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null - (注意: 右外连接:右表的数据一定会完成显示!)SELECT d.deptName,e.empName FROM employee e RIGHT OUTER JOIN dept d ON d.id=e.deptId;- 2.4 自连接查询- 需求:查询员工及其上司- 预期结果: - 张三 null - 李四 张三 - 王五 李四 - 陈六 王五SELECT e.empName,b.empName FROM employee e LEFT OUTER JOIN employee b ON e.bossId

26、=b.id;5 存储过程 5.1 什么是存储过程 存储过程,带有逻辑的sql语句 之前的sql没有条件判断,没有循环 存储过程带上流程控制语句(if while) 5.2 存储过程特点 1)执行效率非常快!存储过程是在数据库的服务器端执行的! 2)移植性很差!不同数据库的存储过程是不能移植。 5.3 存储过程语法- 创建存储过程DELIMITER $ - 声明存储过程的结束符CREATE PROCEDURE pro_test() -存储过程名称(参数列表)BEGIN - 开始 - 可以写多个sql语句; - sql语句+流程控制 SELECT * FROM employee;END $ - 结

27、束 结束符- 执行存储过程CALL pro_test(); - CALL 存储过程名称(参数);参数:IN: 表示输入参数,可以携带数据带存储过程中OUT: 表示输出参数,可以从存储过程中返回结果INOUT: 表示输入输出参数,既可以输入功能,也可以输出功能 - *三、存储过程*- 声明结束符- 创建存储过程DELIMITER $CREATE PROCEDURE pro_test()BEGIN - 可以写多个sql语句; SELECT * FROM employee;END $- 执行存储过程CALL pro_test();- 3.1 带有输入参数的存储过程- 需求:传入一个员工的id,查询员工信息DELIMITER $CREATE PROCEDURE pro_findById(IN eid INT) - IN: 输入参数BEGIN SELECT * FROM employee WHERE id=eid;END $ - 调用CALL pro_findById(4);- 3.2 带有输出参数的存储过程DELIMITER $CREATE PR

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1