数据库多表查询+事务+数据引擎+字符集

数据库多表查询+事务+数据引擎+字符集

多表关系 1对多,多对1 在多的一方加入另一方的外键 多对多 使用中间表,分别引用两方的ID 1对1 主键同步 两个表中有关系的记录id一致 在一方加入 另一方的外键 在另一方加入外键 左连接 left join [crayon-5d8552a9de42b806724584/] 右连接 right join [crayon-5d8552a9de433458149623/] 内连接 join [crayon-5d8552a9de436787595538/] 多表查询 [crayon-5d8552a9de439297466682/] 事务 事务就是一段sql 语句的批处理 特性 1、原子性:一组事务,要么成功;要么撤回。 2、稳定性:有非法数据(外键约束之类),事务撤回。 3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。 4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。 可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。 现在的很多软件都是多用户,多程序,多线程的,对同一个表可能同时有很多人在用,为保持数据的一致性,所以提出了事务的概念。 支持 只有InnoDB /BDB 的之类的transaction_safe table 才能支持。 show engines 查看支持的和默认的engine。 事务使用 [crayon-5d8552a9de43d641316775/] 直接用set来改变mysql的自动提交模式,MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过 [crayon-5d8552a9de440448592210/] // 默认都不提交,只有手动键入commit 时候才上述都提交 --回滚 如果出现不回滚情况 表的id字段 是否有自增 数据引擎 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的。要添加一个新的引擎,就必须重新编译MYSQL。在缺省情况下,MYSQL支持三个引擎:ISAM、MYISAM和HEAP。另外两种类型INNODB和BERKLEY(BDB),也常常可以使用。介绍几种数据库引擎: ISAM 是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到 数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不 支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实 时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。 MyISAM 是MySQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的大量功能,MyISAM还使用一种表格锁定的机制,来优化多个并发的读写操作,其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MyISAM还有一些有用的扩展,例如用来修复数据库文件的MyISAMCHK工具和用来恢复浪费空间的 MyISAMPACK工具。MYISAM强调了快速读取操作,这可能就是为什么MySQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。MyISAM格式的一个重要缺陷就是不能在表损坏后恢复数据。 HEAP 允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MYISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住,在用完表格之后就删除表格。 InnoDB 数据库引擎都是造就MySQL灵活性的技术的直接产品,这项技术就是MYSQL+API。在使用MYSQL的时候,你所面对的每一个挑战几乎都源于ISAM和MyISAM数据库引擎不支持事务处理(transaction process)也不支持外来键。尽管要比ISAM和 MyISAM引擎慢很多,但是InnoDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者 或者两者,那你就要被迫使用后两个引擎中的一个了。 字符集 查看 MySQL 数据库服务器和数据库字符集。 [crayon-5d8552a9de445021083740/] 查看 MySQL...
案例-多表查询、子查询实例03(有答案)

案例-多表查询、子查询实例03(有答案)

一、设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)所示。用SQL语句创建四个表并完成相关题目。 [crayon-5d8552a9deeec739784558/] 1、 查询Student表中的所有记录的Sname、Ssex和Class列。 [crayon-5d8552a9deef4684757791/] 2、 查询教师所有的单位即不重复的Depart列。 [crayon-5d8552a9deef7083286592/] 3、 查询Student表的所有记录。 [crayon-5d8552a9deefa958380521/] 4、 查询Score表中成绩在60到80之间的所有记录。 [crayon-5d8552a9deefd889080901/] 5、 查询Score表中成绩为85,86或88的记录。 [crayon-5d8552a9def00956262571/] 6、 查询Student表中“95031”班或性别为“女”的同学记录。 [crayon-5d8552a9def03914695415/] 7、 以Class降序查询Student表的所有记录。 [crayon-5d8552a9def05110489543/] 8、 以Cno升序、Degree降序查询Score表的所有记录。 [crayon-5d8552a9def08421299223/] 9、 查询“95031”班的学生人数。 [crayon-5d8552a9def0b619846224/] 10、 查询Score表中的最高分的学生学号和课程号。(子查询或者排序) [crayon-5d8552a9def0e636943827/] 11、 查询每门课的平均成绩。 [crayon-5d8552a9def10790012281/] 12、 查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。 [crayon-5d8552a9def13643996564/] 13、 查询分数大于70,小于90的Sno列。 [crayon-5d8552a9def16718093764/] 14、 查询所有学生的Sname、Cno和Degree列。 [crayon-5d8552a9def19174839965/] 15、 查询所有学生的Sno、Cname和Degree列。 [crayon-5d8552a9def1c329400768/] 16、 查询所有学生的Sname、Cname和Degree列。 [crayon-5d8552a9def1e616304413/] 17、 查询“95033”班学生的平均分。 [crayon-5d8552a9def23379219410/] 18、 假设使用如下命令建立了一个grade表: [crayon-5d8552a9def26411760176/] 19、查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。 [crayon-5d8552a9def29673150620/] 21、查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。 [crayon-5d8552a9def2c633032542/] 22、查询和学号为108、101的同学同年出生的所有学生的Sno、Sname和Sbirthday列。 [crayon-5d8552a9def30269673424/] 23、查询“张旭“教师任课的学生成绩。 [crayon-5d8552a9def33425087834/] 24、查询选修某课程的同学人数多于5人的教师姓名。 [crayon-5d8552a9def36791415021/] 25、查询95033班和95031班全体学生的记录。 [crayon-5d8552a9def38876692313/] 26、 查询存在有85分以上成绩的课程Cno. [crayon-5d8552a9def3b651094287/] 27、查询出“计算机系“教师所教课程的成绩表。 [crayon-5d8552a9def3e425489513/] 28、查询“计算 机系”与“电子工程系“不同职称的教师的Tname和Prof。 [crayon-5d8552a9def41667454614/] 29、查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。 any:代表括号中任意一个成绩就可以 [crayon-5d8552a9def44261251578/] 30、查询选修编号为“3-105”且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree....
案例-多表查询、子查询实例02(有答案)

案例-多表查询、子查询实例02(有答案)

以下所有操作在查询管理器中手工书写sql语句完成 1、按下列步骤创建数据库和表 1.2、在这个数据库中创建一个名为[学生表]的表,由[学号]、[姓名]、[专业]、[班级] 字段组成。[学号] 字段为主键,类型为int;[姓名] 和 [专业] 字段类型为varchar, 长度为6和20;[班级] 字段类型为char,长度为4。这些字段均不允许NULL值。 [crayon-5d8552a9df7a2824774942/] 1.3、在这个数据库中创建一个名为 [成绩表] 的表,由 [学号] 、[课程编号]、 [成绩] 字段组成。 [学号] 为外键。[学号] 类型为int; [课程编号] 类型为char,长度为2; [成绩] 类型为int 这些字段均不允许NULL值。 [crayon-5d8552a9df7a9533081718/] 2、在学生表中添加以下记录: 学号 姓名 专业 班级 2001001 吴小亮 计算机及应用 0101 2001002 刘京生 计算机及应用 0101 2001003 李向名 计算机及应用 0102 2001004 高大山 计算机及应用 0102 2001005 王前 网络应用 0103 2001006 李云飞 网络应用 0103 全部添加完毕后,显示该表中的所有记录 [crayon-5d8552a9df7ad190103379/] 3、在成绩表中添加以下记录: 学号 课程编号 成绩 2001001 01 73 2001001 02 88 2001002 01 95 2001002 02 64 2001003 01 75 2001003 02 90...
案例-多表查询、子查询实例(有答案)

案例-多表查询、子查询实例(有答案)

1.创建student和score表 [crayon-5d8552a9dfd2e833486211/] 创建score表。SQL代码如下: [crayon-5d8552a9dfd34108084298/] 2.为student表和score表增加记录 [crayon-5d8552a9dfd37291376193/] 3.查询student表的所有记录 [crayon-5d8552a9dfd3b960881346/] 4.查询student表的第2条到4条记录 [crayon-5d8552a9dfd3e106266374/] 5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息 [crayon-5d8552a9dfd40123560360/] 6.从student表中查询计算机系和英语系的学生的信息 [crayon-5d8552a9dfd43491342584/] 7.从student表中查询年龄18~22岁的学生信息 [crayon-5d8552a9dfd46742751844/] 8.从student表中查询每个院系有多少人 [crayon-5d8552a9dfd49806391292/] 9.从score表中查询每个科目的最高分 [crayon-5d8552a9dfd4c625691572/] 10.查询李四的考试科目(c_name)和考试成绩(grade) [crayon-5d8552a9dfd4e547116609/] 11.查询所有学生的信息和考试信息 [crayon-5d8552a9dfd51853107024/] 12.计算每个学生的总成绩 [crayon-5d8552a9dfd54332669625/] 13.计算每个考试科目的平均成绩 [crayon-5d8552a9dfd57799682327/] 14.查询计算机成绩低于95的学生信息 [crayon-5d8552a9dfd59544806127/] 15.查询同时参加计算机和英语考试的学生的信息 [crayon-5d8552a9dfd5c013872896/] 16.将计算机考试成绩按从高到低进行排序 [crayon-5d8552a9dfd61563850695/] 17.从student表和score表中查询出学生的学号,然后合并查询结果 [crayon-5d8552a9dfd64982174565/] 18.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩 [crayon-5d8552a9dfd66542425908/] 19.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩 [crayon-5d8552a9dfd69010666247/]
数据库-外键+视图+存储过程+触发器

数据库-外键+视图+存储过程+触发器

外键 定义:如果某一实体的某个字段指向另一个主体的主键,就称为外键. 被指向的实体称为主实体(父实体) 负责指向的实体,称为从实体(子实体) ==只有InnoDB类型的表才可以使用外键==,mysql默认是MyISAM,这种类型不支持外键约束 外键的好处: [crayon-5d8552a9e0132018380974/] 外键的作用: [crayon-5d8552a9e0139077049067/] 指定外键关键字: foreign key(列名) 引用外键关键字: references <外键表名>(外键列名) 创建外键的前提 两个表必须是innodb表类型 使用在外键关系的域必须为索引型 使用在外键关系的域必须与数据类型相似 事件触发限制 on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action [crayon-5d8552a9e013c744248960/] 视图 为什么使用视图 1.安全性。一般是这样做的:创建一个视图,定义好该视图所操作的数据。之后将用户权限与视图绑定。这样的方式是使用到了一个特性:grant语句可以针对视图进行授予权限。 2.查询性能提高。 3.有灵活性的功能需求后,需要改动表的结构而导致工作量比较大。那么可以使用虚拟表的形式达到少修改的效果。 4.复杂的查询需求。可以进行问题分解,然后将创建多个视图获取数据。将视图联合起来就能得到需要的结果了。 视图的工作机制 当调用视图的时候,才会执行视图中的sql,进行取数据操作。视图的内容没有存储,而是在视图被引用的时候才派生出数据。这样不会占用空间,由于是即时引用,视图的内容总是与真实表的内容是一致的。 [crayon-5d8552a9e0140831008601/] 删除视图 [crayon-5d8552a9e0143743306800/] 存储过程 修改MySQL定界符 delimiter 定界符[后面无 ; ] 存储过程是==主动调用==的,且功能比触发器更加强大,触发器是某件事触发后自动调用; 存储过程的优点: 增强SQL语句的功能和灵活性 实现较快的执行速度 减少网络流量 创建 create procedure pr_name(a int) begin //代码块 end 变量 1.定义变量 DECLARE my_sql INT DEFAULT 10; 2.为变量赋值 SET my_sql=30; [crayon-5d8552a9e0147319576940/] 调用: [crayon-5d8552a9e014b995490234/] 控制语句 IF语句: [crayon-5d8552a9e014e887132203/] CASE语句: [crayon-5d8552a9e0151121683129/] 循环while语句: [crayon-5d8552a9e0154526285031/]...
数据库的简单操作03-函数

数据库的简单操作03-函数

[crayon-5d8552a9e0461635458360/] 统计count [crayon-5d8552a9e0467857842692/] 求和sum [crayon-5d8552a9e046a803298070/] 平均值avg [crayon-5d8552a9e046d725587097/] 最大最小值 [crayon-5d8552a9e0470378647856/] 比较运算符 [crayon-5d8552a9e0473254622983/] 逻辑运算符 [crayon-5d8552a9e0475903463982/] 去重 distinct只能跟要去重的字段 #select distinct 去重字段 from 表名; [crayon-5d8552a9e0478499027662/] 分组 group by [crayon-5d8552a9e047b078399619/] in() 和 not in() 相当于或的关系 [crayon-5d8552a9e047e588624548/] like 模糊查询 我% 前面匹配 %我 后面匹配 %我% 全匹配 [crayon-5d8552a9e0481902671946/] limit limit限制显示个数,要放到最后 [crayon-5d8552a9e0484170475835/] 排序order by ==排序== 默认正序asc 倒序desc [crayon-5d8552a9e0486546248323/] union UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 [crayon-5d8552a9e0489462558491/] 多表查询 [crayon-5d8552a9e048d238614063/] 子查询 [crayon-5d8552a9e0490946821890/]
数据库-表引擎

数据库-表引擎

引擎 [crayon-5d8552a9e0785588292245/] myisam和innodb区别: http://blog.csdn.net/xifeijian/article/details/20316775 [crayon-5d8552a9e078e297589882/]
数据库数据类型

数据库数据类型

数据表的数据列的属性 [crayon-5d8552a9e094e094006560/] [crayon-5d8552a9e0954762148492/] 数据类型 整数类型 [crayon-5d8552a9e0957428710610/] [crayon-5d8552a9e095b601455553/] 浮点类型 [crayon-5d8552a9e095e195617648/] [crayon-5d8552a9e0961356022364/] 字符串 varchar(n) 定长 char(n)变长 [crayon-5d8552a9e0964141798189/] text类型 [crayon-5d8552a9e0967328524933/] ENUM类型 [crayon-5d8552a9e0969876970320/] [crayon-5d8552a9e096d565626274/] SET类型 [crayon-5d8552a9e0970174852323/] [crayon-5d8552a9e0973281591147/] 以下 了解即可: 二进制类型 [crayon-5d8552a9e0976331710132/] 日期与时间类型 [crayon-5d8552a9e0979045046650/] [crayon-5d8552a9e097d575134058/] [crayon-5d8552a9e0980922881759/]
数据库的简单操作02

数据库的简单操作02

一次插多条 [crayon-5d8552a9e0d14529614134/] 修改字段 alter table 表名 change 要修改的字段名 改后的字段名 [crayon-5d8552a9e0d1a626156377/] modify只能修改字段的属性不能修改字段名称 [crayon-5d8552a9e0d1d396344452/] 添加字段 alter table 表名 add 字段名 [crayon-5d8552a9e0d20545953268/] 删除字段 alter table 表名 drop 字段名; [crayon-5d8552a9e0d23679130006/] 修改表名 rename table 原名 to 新名; [crayon-5d8552a9e0d26691553082/] Alter table 表的旧名称 rename as 表的新名称; [crayon-5d8552a9e0d29957479436/] 删除主键索引 (先去除自增再删除) [crayon-5d8552a9e0d2c766697400/] 添加索引 alter table 表名 add 索引类型 索引名称(字段名称); [crayon-5d8552a9e0d2f613656767/] 删除唯一索引 alter table t11 drop index 索引名; [crayon-5d8552a9e0d31661971774/] 添加普通索引 [crayon-5d8552a9e0d34512520622/] 查看表中的索引 [crayon-5d8552a9e0d37934336704/] 在MySQL中,主要有四类索引: 1. 主键索引(PRIMARY KEY) 1. 唯一索引(UNIQUE) 1. 常规索引(INDEX) 1. 全文索引(FULLTEXT)
数据库的简单操作01

数据库的简单操作01

1.进入数据库 [crayon-5d8552a9e0fc2672114486/] 2.数据库 [crayon-5d8552a9e0fc9047666792/] 3.数据表 [crayon-5d8552a9e0fcc332249221/] 4.表数据 [crayon-5d8552a9e0fcf156331929/] [crayon-5d8552a9e0fd2769134208/] 操作 数据库 表 内容 查看 show databases show tables select*from 表名 打开 use database 数据库名 插入 create database if not exists 数据库名 create table 表名(ID int)engin=innodb default charset=utf8; insert into 表名(id)value(1); 修改 update 表名 set username="修改值"where id=1; 删除 drop database 数据库名 drop table 表名 delete from 表名 where id=1;