精华内容
下载资源
问答
  • 我们可以使用sqlyog以系统用户登录 点击创建用户→把把用户名、主机、密码都输入不要急着点确认 →然后我们把mysql服务断开→再回到mysql点确定。这个时候 就会报错,而其中的报错语句就是我们想要的mys

    当安装mysql时,以默认的系统用户创建的,没有创建自己的用户

    就知道net start mysql开启mysql服务器和net stop mysql关闭服务器时


    我们可以使用sqlyog以系统用户登录

    点击创建用户→把把用户名、主机、密码都输入不要急着点确认

    →然后我们把mysql服务断开→再回到mysql点确定。这个时候

    就会报错,而其中的报错语句就是我们想要的mysql中创建用户

    要使用的语句。

    有没有感觉到印象很深刻。

    找出创建数据库和创建表的方法也是一样的,包括使用数据库语

    句和创建视图、存储过程、函数、触发器、事件

    当然这也很鸡肋的,太麻烦了,无聊有兴趣的可以尝尝。。

    展开全文
  • 一、MySQL概述 1.什么是数据库? 数据库就是一个按照某种规则来组织,存储和管理数据的仓库 2.MySQL简介 MySQL数据库是一个关系型数据库管理系统 最早属于瑞典MySQL AB ...SQLyog 是一个快速而简洁的图形化管理MYSQL...

    一、MySQL概述

    1.什么是数据库?

    数据库就是一个按照某种规则来组织,存储和管理数据的仓库

    2.MySQL简介

    MySQL数据库是一个关系型数据库管理系统

    最早属于瑞典MySQL AB 公司
    现在是 Oracle 旗下产品

    MySQL数据库的特点:开源、体积小、速度快、总体拥有成本低
    这些特点导致了MySQL的流行

    3.什么是SQLyog?

    SQLyog 是一个快速而简洁的图形化管理MYSQL数据库的工具,它能够在任何地点有效地管理你的数据库
    在这里插入图片描述
    4.使用SQLyog对数据库进行操作

    下载安装好SQLyog后,双击打开,然后连接数据库
    在这里插入图片描述
    新建一个school数据库
    在这里插入图片描述
    拟定数据库的名称,字符集选择utf8,目的是为了使中文不乱码,排序规则选择utf8_general_ci,如果不选则默认也是utf8_general_ci
    在这里插入图片描述
    school数据库创建完成后,接着在school数据库下创建一张student表
    一个数据库是由一张张的表构成的,我们的数据也存储在这一张张表中
    在这里插入图片描述
    在这里插入图片描述
    刚刚创建的student表
    在这里插入图片描述
    查看刚刚创建的student表
    在这里插入图片描述
    在这里插入图片描述

    二、代码操作表

    1.使用SQL代码创建表

    -- 需求:使用SQL创建学生表
    -- 学号int 登录密码varchar(20) 姓名,性别varchar(2),出生日期(datatime),家庭住 址,email
    CREATE TABLE IF NOT EXISTS `student1` (
      `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
      `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
      `pwd` VARCHAR(30) NOT NULL DEFAULT '123456' COMMENT '密码',  
      `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
      `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
      `adress` VARCHAR(100) DEFAULT NULL COMMENT '住址',
      `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY(`id`)
    )ENGINE=INNODB DEFAULT CHARSET=utf8
    

    怎样运行写好的代码?
    在这里插入图片描述
    结果:
    在这里插入图片描述

    2.修改表

    -- 修改表名
    ALTER TABLE student1 RENAME AS teacher2

    在这里插入图片描述

    -- 添加表的字段
    ALTER TABLE student1 ADD age INT(3)
    

    在这里插入图片描述

    -- 修改约束
    ALTER TABLE student1 MODIFY age VARCHAR(11) 

    在这里插入图片描述

    -- 字段重命名
    ALTER TABLE student1 CHANGE age age1 INT(3) 

    在这里插入图片描述

    -- 删除表
    DROP TABLE IF EXISTS teacher2

    在这里插入图片描述
    插入一张年级表

    -- 插入一张年级表
    CREATE TABLE `grade1`(
    `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
    `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
    PRIMARY KEY (`gradeid`) 
    )ENGINE=INNODB DEFAULT CHARSET=utf8
    • 插入语句 insert into
    -- 插入语句  insert into
    INSERT INTO `grade`(`gradename`)VALUES('大四')
    INSERT INTO `grade`(`gradename`)VALUES('大三')
    INSERT INTO `grade`(`gradename`)
    VALUES('大三'),('大四')

    在这里插入图片描述

    INSERT INTO `student1`(`name`)VALUES('张三')
    INSERT INTO `student1`(`name`,`pwd`,`sex`)VALUES('李四','aaaaaa','男')
    INSERT INTO `student1`(`name`,`pwd`,`sex`)
    VALUES('王五','bbbbbb','男'),('赵六','cccccc','男')

    在这里插入图片描述

    • 修改语句 update
    UPDATE `student` SET `name`='czx' WHERE id=1
    UPDATE `student` SET `name`='长江七号' -- 不指定条件的情况下,会将所有人的名字都改成‘长江七号’
    UPDATE `student` SET `name`='菜鸡',`adress`='阿拉伯联合酋长国' WHERE id=1

    在这里插入图片描述

    • 删除语句 delete from
    DELETE FROM `student1` WHERE id=1

    在这里插入图片描述

    3.查询

    • 查询student中的所有学生信息
    SELECT * FROM `student`

    在这里插入图片描述
    在student表中查询StudentNo,StudentName

    SELECT `StudentNo`,`StudentName` FROM `student`

    在这里插入图片描述

    • 为了列名更易理解,可以给列重新起名字
    -- 给字段起别名 查询
    SELECT `StudentNo` AS 学号,`StudentName` AS 姓名 FROM `student` AS s

    在这里插入图片描述

    • 拼接查询
    SELECT CONCAT('姓名:',`StudentName`,'性别:',`Sex`) AS 新名字 FROM `student`

    在这里插入图片描述

    • 在我们查询的信息中由很多重复的,我们只需要显示一次,这就需要去重
    -- 去重查询
    SELECT `StudentNo` FROM `result`
    SELECT DISTINCT `StudentNo` FROM `result` -- 去重

    在这里插入图片描述

    • where语句 固定了查询的范围
    -- where 语句
    SELECT `StudentNo`,`StudentResult` FROM `result`
    WHERE `StudentResult`>=95 AND `StudentResult`<=100

    在这里插入图片描述

    • 按名字查询
    -- 学生名字查询 所有姓刘的学生
    SELECT `StudentNo`,`StudentName` FROM `student`
    WHERE `StudentName` LIKE '刘%'
    
    -- 查询姓刘的同学,名字后面只有一个字的 
    SELECT `StudentNo`,`StudentName` FROM `student`
    WHERE StudentName LIKE '刘_'
    
    -- 查询姓刘的同学,名字后面只有两个字的
    SELECT `StudentNo`,`StudentName` FROM `student`
    WHERE StudentName LIKE '刘__'

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    • 如果想要查询显示的内容在两张表里,我们需要将其一起显示出来时,就需要联表查询
    -- 联表查询
    SELECT s.`StudentNo`,`StudentName`,`SubjectNo`,`StudentResult`
    FROM `student` AS s
    INNER JOIN `result` AS r
    ON s.`StudentNo`=r.`StudentNo`

    在这里插入图片描述
    例一:查询参加考试的同学信息: 学号,学生姓名,科目名,分数

    -- 查询了参加考试的同学信息: 学号,学生姓名,科目名,分数
    SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
    FROM `student` s
    INNER JOIN `result` r
    ON s.`StudentNo`=r.`StudentNo`
    INNER JOIN `subject` sub
    ON sub.`SubjectNo`=r.`SubjectNo`

    在这里插入图片描述
    例二:查询学员所属的年级 (学号,学生的姓名,年级名称)

    -- 查询学员所属的年级 (学号,学生的姓名,年级名称) 
    SELECT `StudentNo`,`StudentName`,`GradeName`
    FROM `student` s
    INNER JOIN `grade` g
    ON s.`GradeId`=g.`GradeID`

    在这里插入图片描述
    例三:查询科目所属的年级 (科目名称,年级名称)

    -- 查询科目所属的年级 (科目名称,年级名称) 
    SELECT `SubjectName`,`GradeName`
    FROM `subject` sub
    INNER JOIN `grade` g
    ON sub.`GradeID`=g.`GradeID`

    在这里插入图片描述
    例四:查询参加 数据库结构-1 考试的同学信息: 学号,学生姓名,科目名,分数

    -- 查询了参加 数据库结构-1 考试的同学信息: 学号,学生姓名,科目名,分数 
    SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
    FROM `student` s
    INNER JOIN `result` r
    ON s.`StudentNo`=r.`StudentNo`
    INNER JOIN `subject` sub
    ON sub.`SubjectNo`=r.`SubjectNo`
    WHERE `SubjectName`='数据库结构-1'

    在这里插入图片描述
    例五:排序 ASC升序 DESC降序

    -- 排序 ASC升序 DESC降序
    SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
    FROM `student` s
    INNER JOIN `result` r
    ON s.`StudentNo`=r.`StudentNo`
    INNER JOIN `subject` sub
    ON sub.`SubjectNo`=r.`SubjectNo`
    WHERE `SubjectName`='数据库结构-1'
    ORDER BY `StudentResult` ASC

    在这里插入图片描述
    例六:分页

    -- 分页
    SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
    FROM `student` s
    INNER JOIN `result` r
    ON s.`StudentNo`=r.`StudentNo`
    INNER JOIN `subject` sub
    ON sub.`SubjectNo`=r.`SubjectNo`
    WHERE `SubjectName`='数据库结构-1'
    ORDER BY `StudentResult` ASC
    LIMIT 5,5

    在这里插入图片描述

    展开全文
  • 回顾上次知识 下列语句实现了什么功能? SELECT * FROM student WHERE EXISTS( ...实现了---查询参加考试的学生! 能否使用IN 子查询改写上述语句? SELECT * FROM `student` WHERE `studentNo` ...
    1. 回顾上次知识

    下列语句实现了什么功能?

    SELECT * FROM student

    WHERE EXISTS(

    SELECT *FROM result

    WHERE studentno=student.studentno );

    实现了---查询参加考试的学生!

    能否使用IN 子查询改写上述语句?

    SELECT * FROM `student`  

    WHERE `studentNo` IN (SELECT `studentNo` FROM `result`);

    请使用连接查询改写上述语句:

    SELECT * FROM `student` INNER JOIN `result`

    ON `student`.`studentNo` = `result`.`studentNo`;

    1. 本章任务
      1. 批量插入学生考试成绩
      2. 办理毕业学生离校手续
      3. 查看学生各科目考试成绩平均分
      4. 创建学生表和成绩表索引并查看索引
      5. myschool数据库的备份和恢复
      6. 科目表数据的导出和导入
    2. 本章目标
      1. 使用事务保证操纵数据的完整性
      2. 掌握如何创建并使用视图
      3. 掌握如何创建并使用索引
      4. 掌握如何进行数据库的备份和恢复
    3. 什么是事务?
      1. 事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作
      2. 多个操作作为一个整体向系统提交,要么都执行、要么都不执行
      3. 事务是一个不可分割的工作逻辑单元

    注意:

    转账过程就是一个整体

    它需要两条UPDATE语句来完成,这两条语句是一个整体

    如果其中任一条出现错误,则整个转账业务也应取消,两个账户中的余额应恢复到原来的数据,从而确保转账前和转账后的余额不变,即都是1001元。

    1. 事务的特性

    事务必须具备以下四个属性,ACID属性!

      1. 原子性(Atomicity)

    事务是一个完整的操作,事务的各步操作是不可分的(原子的),要么都执行,要么都不执行

      1. 一致性(Consistency)

    当事务完成时,数据必须处于一致状态

      1. 隔离性(Isolation)

    并发事务之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务

      1. 持久性(Durability)

    事务完成后,它对数据库的修改被永久保持

    1. 如何创建事务

    MySQL中支持事务的存储引擎有InnoDBBDB

    语法:

    开始事务

    BEGIN ;

    START TRANSACTION;

    提交事务

    COMMIT ;

    回滚(撤销)事务

    ROLLBACK ;

    1. 使用事务解决银行转账问题3-1

    实战示例:

    情况一:转账成功

    从张三的账户转出500元,存入李四的账户中

    BEGIN;    ----开始事务(指定事务从此处开始,后续的SQL语句都是一个整体)

    /*--转账:张三的账户减少500元,李四的账户增加500元--*/

    UPDATE `bank` SET `currentMoney`=`currentMoney`-500

         WHERE `customerName`='张三';

    UPDATE `bank` SET `currentMoney`=`currentMoney`+500

         WHERE `customerName`='李四';

    COMMIT;    ----提交事务,事务结果

    COMMIT:是自动保存事务,如果没有执行,则只是保存临时文件,其他重新打开的文件不可见。

    情况二:转账失败,钱全部退还

    BEGIN;

    UPDATE `bank` SET `currentMoney`=`currentMoney`-1000 WHERE `customerName`='张三';

    ROLLBACK;  ---回滚事务,数据恢复到原始状态

    1. 自动关闭和开启事务-1
      1. 默认情况下,每条单独的SQL语句视为一个事务
      2. 关闭默认提交状态后,可手动开启、关闭事务

    语法:

    关闭/开启自动提交状态

     SET autocommit = 0|1;

        • 值为0:关闭自动提交
        • 值为1:开启自动提交

    注意:

    关闭自动提交后,从下一条SQL语句开始则开启新事务,需使用COMMITROLLBACK语句结束该事务。

    1. 自动关闭和开启事务2-2

    示例: -----关闭自动提交

    SET autocommit=0; ----关闭自动 提交,以下视为一个事务

    /*--转账:张三的账户减少500元,李四的账户增加500元--*/

    UPDATE `bank` SET `currentMoney`=`currentMoney`-500

         WHERE `customerName`='张三';

    UPDATE `bank` SET `currentMoney`=`currentMoney`+500

         WHERE `customerName`='李四';

    COMMIT; -----提交事务

    UPDATE `bank` SET `currentMoney`=`currentMoney`-1000 WHERE `customerName`='张三';

    ROLLBACK; ----回滚事务

    SET autocommit = 1;-----开启自动 提交,恢复默认状态

    1. 为什么需要视图?
      1. 不同的人员关注不同的数据
      2. 保证信息的安全性

    1. 什么是视图
      1. 视图是一张虚拟表
        • 表示一张表的部分数据或多张表的综合数据
        • 其结构和数据是建立在对表的查询基础上
      2. 视图中不存放数据
        • 数据存放在视图所引用的原始表中
      3. 一个原始表,根据不同用户的不同需求,可以创建不同的视图
    2. 视图的用途
      1. 筛选表中的行
      2. 防止未经许可的用户访问敏感数据
      3. 降低数据库的复杂程度
      4. 将多个物理数据库抽象为一个逻辑数据库
    3. 如何创建视图2-1

    语法:

    使用SQL语句创建视图

    CREATE VIEW view_name  (myschool  .  banzhuren)

       AS

        <SELECT 语句>;

    语法:

    使用SQL语句删除视图

    DROP VIEW [IF EXISTS] view_name;

      [IF EXISTS]  ---删除前,判断视图是否存在

    语法:

    使用SQL语句查看视图

    SELECT 字段1, 字段2, …… FROM  view_name;

    1. 如何创建视图--实战演习

    示例:

    创建方便教师查看成绩的视图

    USE myschool;

    DROP VIEW IF EXISTS `view_student_result`;   --作用:删除视图

    CREATE VIEW `view_student_result`       --作用:创建视图

    AS

       ……

    SELECT * FROM `view_student_result`; --作用:查看视图

    1. 使用视图注意事项
      1. 视图中可以使用多个表
      2. 当视图数据来自多个表时,不允许添加和删除数据
      3. 一个视图可以嵌套另一个视图
      4. 对视图数据进行添加、更新和删除操作直接影响所引用表中的数据

    提示:

      1. 查看所有视图

    USE information_schema ;

    SELECT * FROM views\G ;

    经验:

    使用视图修改数据会有许多限制,一般在实际开发中视图仅用作查询

    1. 什么是索引-1?
      1. 汉语字典中的汉字按存放,一般都有汉语拼音目录(索引)、偏旁部首目录等
      2. 我们可以根据拼音或偏旁部首,快速查找某个字词
    2. 什么是索引-2?

      

    1. 什么是索引-3
      1. 索引是一种有效组合数据的方式,为快速查找到指定记录
      2. 作用
        • 大大提高数据库的检索速度
        • 改善数据库性能
      3. MySQL索引按存储类型分类
        • B-树索引:InnoDB、MyISAM均支持
        • 哈希索引
    2. 常用索引类型
      1. 普通索引-------基本索引类型

    允许在定义索引的列中插入重复值空值

      1. 唯一索引-------索引列数据不重复

    允许有空值

      1. 主键索引-------主键列中的每个值是非空、唯一的

    一个主键将自动创建主键索引

      1. 复合索引-------将多个列组合作为索引
      2. 全文索引-------支持值的全文查找

    允许重复值和空值

      1. 空间索引-------对空间数据类型的列建立的索引
    1. 如何创建/删除索引-1

    语法:

    创建索引: 唯一索引、全文索引、空间索引--------可选

    CREATE [ UNIQUE | FULLTEXT | SPATIAL ] INDEX  index_name

           ON  table_name (column_name [length]…);

    语法:

    删除索引:

    DROP  INDEX index_name ON table_name;

    注意:

    删除表时,该表的所有索引同时会被删除

    1. 如何创建/删除索引--------实战演习

    示例:  ON ---根据

    在student表的studentName列创建普通索引

    USE myschool;

    CREATE  INDEX  `index_student_studentName`

       ON  `student`(`studentName`);

    1. 创建索引的指导原则
      1. 按照下列标准选择建立索引的列
        • 频繁搜索的列
        • 经常用作查询选择的列
        • 经常排序分组的列
        • 经常用作连接的列(主键/外键)
      2. 请不要使用下面的列创建索引
        • 仅包含几个不同值的列
        • 表中仅包含几行
        • 小数据量的表建议不要加索引
        • 索引不是越多越好
        • 不要对经常变动的数据加索引

     

    1. 使用索引时注意事项
      1. 查询时减少使用*(返回全部列),不要返回不需要的列
      2. 索引应该尽量小,在字节数小的列上建立索引
      3. WHERE子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前
      4. 避免在ORDER BY子句中使用表达式
    2. 查看索引

    语法: SHOW INDEX FROM table_name;

    示例:

    查看myschool数据库中全部索引信息:

    USE myschool;

    SHOW INDEX FROM `student`\G;

    注释:

    Table:创建索引的表

    Non_unique:索引是否非唯一

    Key_name:索引的名称

    Column_name:定义索引的列字段

    Seq_in_index:该列在索引中的位置

    Null:该列是否能为空值

    Index_type:索引类型

    1. 为什么进行数据库备份?
      1. 数据库故障
      2. 突然断电
      3. 病毒入侵
      4. 误操作导致数据丢失
      5. ……各种意外状况
    2. 使用mysqldump命令备份数据库-1

    mysqldump命令——MySQL一个常用的备份工具

    mysqldump 是和MySQL同级别的命令,可以直接在MySQL后面使用

    将CREATE和INSERT INTO语句保存到文本文件

    属于DOS命令

    1. 使用mysqldump命令备份数据库-2

    示例:

    使用root账户登录到MySQL服务器,备份myschool数据库下的student表

    mysqldump –u root –p myschool student > d:\20160808.sql

    注意:

    为保证账户密码安全,命令中可不写密码,但参数“-p”必须有,回车后根据提示写密码。

    1. 使用mysqldump命令备份数据库-3

    常用参数选项

    参数

    描述

    -add-drop-table

     

    在每个CREATE TABLE语句前添加DROP TABLE语句,默认是打开的,可以用-skip-add-drop-table来取消

    --add-locks

     

    该选项会在INSERT 语句中捆绑一个LOCK TABLE 和UNLOCK TABLE 语句

    好处:防止记录被再次导入时,其他用户对表进行的操作

    -t或-no-create-info

     

    只导出数据,而不添加CREATE TABLE语句

     

    -c或--complete-insert

     

    在每个INSERT语句的列上加上列名,在数据导入另一个数据库时有用

    -d或--no-data

     

    不写表的任何行信息,只转储表的结构

     

    1.  备份文件包含的主要信息
        • 备份后文件包含信息MySQL及mysqldump工具版本号
        • 备份账户的名称
        • 主机信息
        • 备份的数据库名称
        • SQL语句注释和服务器相关注释
        • CREATE和INSERT语句
        • 备份文件
    2. 恢复备份

    恢复数据库-1 ---恢复之前,一定要先创建新数据库?

     

    方法一:使用mysql命令恢复数据库

    mysql –u username –p [dbname] < filename.sql

    用户名             数据库名    备份文件名

    注意:

    1. mysql为DOS命令

    2.在执行该语句之前,必须在MySQL服务器中创建新数据库,如果不存在恢复数据库过程将会出错

    3.   mysqldump --help|more  帮助你查看mysqldump统计的命令

    或者,

    使用mysqldump命令来实现:

    恢复以及备份出去了的数据库(h:...),到新数据库里面(test)

    #方法一:

    mysql>USE test;

    DATABASE CHANGED mysql >source h:/chenxuan/school.sql

    #方法二:

    mysql-uroot -pkgc  test<脚本路径(h:/chenxuan/school.sql)

     

    #将school数据库中,student表中的学号、姓名两列备份出去

    USE school;

    SELECT id,`name`

    #注意:备份出去的文件不能提前存在,他会自动创建

    INTO OUTFILE'h:/chenxuan/student.sql'

    FROM account;

     

    #将备份出去的数据恢复到test数据库的student表中来

    USE test;

    CREATE TABLE stutab(

    id INT(4),

    NAME VARCHAR(20)

    )

    LOAD DATA INFILE 'h:/chenxuan/student.sql' INTO TABLE stutab(id,sname);

     

    SELECT * FROM stutab;

     

     

     

    恢复数据库-2

    方法二: ----使用SQLyog工具来备份和恢复

    示例:

    使用备份文件将myschool数据库中student表信息恢复到schoolDB数据库中

     mysql –u root –p schoolDB < d:\20160808.sql

     

    mysql>USE test;

    mysql>source 脚本路径

     

    mysql命令恢复

    mysql -uroot -pkgc test<脚本路径

     

    恢复数据库-3

    方法三:使用source命令恢复数据库

    语法: source filename;

    注意:

    登录MySQL服务后使用

    执行该命令前,1.创建2.选择恢复后的目标数据库3.使用source命令

    示例:

    CREATE DATABASE myschoolDB2;  #创建数据库

    USE myschoolDB2;  #选择数据库

    source d:\20160808.sql; #恢复后的目标数据库导入到~~

    注意:

    备份过程中,打勾的选项看清楚,别影响恢复

     

    1. 通过复制文件实现数据备份和恢复

    直接复制MySQL数据库的存储目录及文件进行备份

    1. 表数据导出到文本文件

    导出/导入数据——可实现数据库服务器间移动数据

    语法:

    SELECT  *  

    FROM tablename   

    [WHERE 条件]        

    INTO OUTFILE 'filename' [OPTION]

    filename'  ------------导出到的目标文件

    将成绩表中“Logic Java”课程的成绩信息导出到文本文件

    示例:

    SELECT * FROM `result`

    WHERE `subjectNo` =

    (SELECT `subjectNo` FROM `subject`

    WHERE `subjectName` = 'Logic Java')

    INTO OUTFILE 'd:/Java.txt';

    1. 文本文件导入到数据表

    语法:

     LOAD DATA  INFILE filename INTO TABLE tablename [OPTION]

    将数据从文本文件导入到myschoolDB的result表

    LOAD DATA INFILE 'd:/back/result_Java.txt' INTO TABLE result;

    注意: 导入数据前应确保目标表已存在!

    1. 总结

     

     

    展开全文
  • 注意sno,cno,在每张中的格式要一致,就是我们所说的学号和课程号是固定的,一个学生只能有一个学号,一个课程只能有一个课程号。 插入后的数据格式如下(可以自行改变): course: score: stude
    创建表

    我们先创建三个表,之后的查询均以这三个表为例
    在这里插入图片描述

    根据如图所示的字段及属性建立三张表,建立过程省略。注意sno,cno,在每张表中的格式要一致,就是我们所说的学号和课程号是固定的,一个学生只能有一个学号,一个课程只能有一个课程号。
    插入后的数据格式如下(可以自行改变):
    course:
    在这里插入图片描述

    score表:
    在这里插入图片描述

    student表:
    在这里插入图片描述

    表和表之间的对应关系
    • 一对一
      在一对一关系中,关系表的每一边都只能存在一条记录,每个数据表中的关键字在 对应的关系表中只能存在一条记录或者没有对应的记录。这种关系类似于现实生活中配 偶的关系,如果一个人已经结婚,那么只有一个配偶,如果没有结婚,那么没有配偶。
      假设我们已经创建如图所示的两张表
      在这里插入图片描述

    从图6.1中可以看到,user表和user_text表是一对一的关系。此处使用一对一的意 义实际上是数据库优化,用户备注字段utext–般有比较多的文字,属于大文本字段,但 这个字段又不是每次都要用到,如果存放到user表中,在查询用户数据的时候会影响user表的查询效率,因此将utext字段单独拆分出来,放到从表中,当需要utext字段时 进行两张表的关联查询即可。

    • 一对多和多对一
      在一对多关系中,主键数据表中只能含有一个记录,而在其关系表中这条记录可以 与一个或者多个记录相关,也可以没有记录与之相关。这种关系类似于现实生活中父母 与子女的关系,每个孩子都有一个父亲,但一个父亲可能有多个孩子,也可能没有孩子。 多对一是从不同的角度来看问题,例如从孩子的角度来看,一个孩子只能有一个父亲, 多个孩子也可能是同一个父亲。
      假设创建如图所示的表:
      在这里插入图片描述

    从图6.2中可以看到,student表和score表是一对多的关系,每个学生可能有多个 成绩,但一个成绩只能属于一个学生,这就是一对多的关系。如果从score表来看问题, 多个成绩可以属于一个学生,但一个成绩不能属于多个学生,这就是多对一的关系。

    • 多对多的关系
      在多对多关系中,两个数据表里的每条记录都可以和另一个数据表里任意数量的记 录相关。这种关系类似于现实生活中学生与选修课的关系,一个学生可以选择多门选修 课,一门选修课也可以供多个学生选择。
      假设已创建如下图所示的表:
      在这里插入图片描述

    从图6.3中可以看到,teacher表和stu表都与中间表tea stu关联,且都是一对多的关系,因此teacher表和stu表是多对多的关系,即一个老师可以有多个学生,一个学生 也可以有多个老师,这就是多对多关系的应用场景。

    合并结果集
    • 使用UNION关键字合并
      在多表查询中,有时可能需要将两条查询语句的结果合并到一起,MySQL提供了 UNION关键字用于合并结果集。
      (注意:UNION只能合并两个表中相同的字段及类型,对于两个表中不同的字段UNION将无法使用)
      例:
    SELECT tname FROM student UNION SELECT tname FROM course 
    

    结果:
    在这里插入图片描述

    由合并结果可知,两表中均有小明和小胡,但是合并后自动过滤掉了重复的数据。

    • 使用UNION ALL 合并
      前面学习了 UNION关键字的用法,UNION ALL关键字与之类似,但使用UNION ALL关键字查询出两张表的数据合并结果集后不会过滤掉重复的数据。
      例:
    SELECT tname FROM student UNION ALL SELECT tname FROM course 
    

    在这里插入图片描述

    可以看到并没有过滤掉重复部分。

    连接查询

    在关系型数据库中建立数据表时不必确定各个数据之间的关系,通常将每个实体的 所有信息存放在一个表中。当两个或多个表中存在相同意义的字段时,便可以通过这些 字段对不同的表进行连接查询。

    • 笛卡尔积
      笛卡儿积在SQL中的实现方式是交叉连接(cross join),所有连接方式都会先生成 临时笛卡儿积表。笛卡儿积是关系代数里的一个概念,表示两个表中的每一行数据任意 组合。接下来通过一个案例演示笛卡儿积问题,此处使用交叉査询来演示,其语法格式 如下。
    SELECT 査询所属表字段 FROM 表 1 CROSS JOIN 表 2;
    

    例:

    SELECT s.Sno,s.Sname,ss.Cno,ss.Degree FROM score ss CROSS JOIN student s 
    

    (score ss,是给score字段起别名,方便书写用的)
    通过查询我们可以查询到两个表的数据组合,但这并没有实际意义,因为得到的数据是随意排列的。
    只有加上限制条件才会有实际意义。
    例:

    SELECT s.Sno,s.Sname,ss.Cno,ss.Degree FROM score ss CROSS JOIN student s 
    WHERE ss.sno=s.sno
    

    需要两个表中有相同的字段类型,这样才能建立关系来加上限制条件。
    结果如图:
    在这里插入图片描述

    可以看到此时查询的数据已经有了对应关系

    内连接

    内连接的连接杳询结果集中仅包含满足条件的行,在MySQL中默认的连接方式就是内连接。前面学习了交叉连接的语法,但该语法并不是SQL标准中的查询方式,可以 理解为方言。SQL标准中的内连接的语法格式如下。

    SELECT 査询所属表字段 FROM 表 1 [INNER] JOIN 表 2
    ON表1.关系字段=表2 .关系字段      WHERE查询条件;
    

    在以上语法格式中,INNER JOIN用于连接两个表,其中INNER可以省略,因为 MySQL默认的连接方式就是内连接,ON用来指定连接条件,类似于WHERE关键字。
    例:查询一名学生的课程名、课程号、成绩。

    SELECT c.Cno,c.Cname,s.Degree FROM course c JOIN score s 
    ON c.`Cno`=s.Cno
    

    分析,该查询 要求查询课成名,课称号以及成家,分别分布在score表和course表中,通过观察两个表中有相同字段CNO,这样我们就可以建立关系来实现内连接。
    查询结果:
    在这里插入图片描述

    外连接

    检面讲解了内连接的查询,返回的结果只包含符合査询条件和连接条件的数据,然 而有时还需要包含没有关联的数据,返回的查询结果中不仅包含符合条件的数据,还包 含左表或右表或两个表中的所有数据,此时就需要用到外连接查询。外连接查询包括左 外连接和右外连接两种查询类型,接下来进行详细讲解。

    • 左外连接
      左外连接是以左表中的数据为基准,若左表中有数据且右表中没有数据,则显示左表中的数据,右表中的数据显示为空。左外连接的语法格式如下。
    SELECT 查询字段 FROM 表 1 LEFT [OUTER] JOIN 表 2
    ON表1.关系字段=表2 .关系字段WHERE查询条件;
    

    例:
    查询学生的姓名,学号,成绩,所学课程的课程号

    SELECT stu.Sno,stu.Sname,s.Degree,s.Cno FROM student stu LEFT JOIN score s 
    ON stu.Sno=s.Sno
    

    结果:
    在这里插入图片描述

    其中student为左表,所以最后一行显示左表的数据而右表的数据为空。

    • 右外连接,和左外连接相似,只是右外连接显示多余的右表中的数据,左表中没有的数据显示为空。
      格式:
    SELECT 查询字段 FROM 表 1 RIGHT [OUTER] JOIN 表 2
    ON表1.关系字段=表2 .关系字段WHERE查询条件;
    

    例:

    SELECT stu.Sno,stu.Sname,s.Degree,s.Cno FROM student stu RIGHT JOIN score s 
    ON stu.Sno=s.Sno
    

    结果:
    在这里插入图片描述

    多表连接

    前面学习了内连接和外连接,它们都是两张表之间的连接查询。实际上随着业务的 复杂,可能需要连接更多的表(3张、4张甚至更多),但表若连接过多会严重影响查询 效率,因此连接查询一般不超出7张表的连接。多表连接的语法格式如下。

    SELECT査询字段FROM表1 [别名]
    JOIN表2 [别名]ON 表1 .关系字段=表2 .关系字段  JOIN 表 m  ON—;
    

    多表的连接方式可以类比内连接,内连接的建立需要两个表中有相同的字段及类型这样才能建立关系。而多表,比如3个表中,若要建立起关系,就需要三个表有相同的字段或者至少有一个表包含其他两个表的字段。
    比如我们的例子中,score表中既有student表的Sno,又有course表中的cno,所有就可以通过score这个表将三个表联系起来。
    例:
    查询一个学生的姓名、出生年月、所学课程名称、成绩。

    SELECT stu.Sname,stu.Sbirthday,s.Degree,c.Cname FROM student stu  JOIN score s 
    ON stu.Sno=s.Sno JOIN course c ON s.Cno=c.Cno
    

    结果:
    在这里插入图片描述

    自然连接

    前面学习了表的连接查询,需要指定表与表之间的连接字段。在SQL标准中还有一种自然连接,不需要指定连接字段,表与表之间列名和数据类型相同的字段会被自动匹 配。自然连接默认按内连接的方式进行查询,语法格式如下。

    SELECT查询字段FROM表1 [别名]NATURAL JOIN表2 [别名];
    

    在以上语法格式中,通过NATURAL关键字使两张表进行自然
    连接,默认按内连接 的方式进行查询。
    例:

    SELECT stu.Sname,stu.Sbirthday,s.Cno FROM student stu NATURAL JOIN  score s
    

    结果:
    在这里插入图片描述

    子查询

    子查询就是嵌套査询,即在SELECT中包含SELECT,子查询可以在WHERE关键字后面作
    为査询条件,也可以在FROM关键字后面作为表来使用。
    例1:
    查询学生出生日期大于1997年的所有信息:

    SELECT * FROM student 
    WHERE YEAR(Sbirthday)> YEAR((SELECT Sbirthday FROM student WHERE YEAR(Sbirthday)=1997))
    

    该语句会先执行括号里的语句,及查询出生日期在1997年----的学生,然后利用year函数转化为整型后再执行下一个查询语句并执行where条件。
    结果:
    在这里插入图片描述

    例2:查询和姓名为“li”同学同一个班级同学的所有信息

    SELECT * FROM student 
    WHERE class= (SELECT class FROM student WHERE Sname ='li')
    
    子查询作为表

    前面讲解了将子查询作为査询条件来使用,子査询还可以作为表来使用,即把 SELECT子句放在FROM关键字的后面。在执行查询语句时,首先会执行子查询中的语句,然后将返回结果作为外层查询的数据源使用。
    例:
    查询学号为103学生的姓名,性别,成绩,以及所学课程的课程号

    SELECT stu.Sname ,stu.Ssex,s.Cno,s.Degree FROM student stu,(SELECT Cno,Sno, Degree FROM score) s
    WHERE  stu.Sno=s.Sno AND stu.Sno='103'
    

    结果:
    在这里插入图片描述

    但是这样不如直接用内连接方便,其实原理是是相似的

    展开全文
  • 据英国广播公司3月21日报道,英国上议院最新报告指出,对儿童而言,学会在网络主导的世界中生存和阅读与写作等基本技能一样重要。 据报道,上议院通讯委员会认为,和网络有关的责任、风险...报道称,产业界领导者...
  • 初识MySQL 什么是数据库 数据库(DataBase,简称DB) 概念 : 长期存放在计算机内,有组织,可共享的大量数据的集合,是一个数据"仓库" ...关系型数据库通过外键关联来建立之间的关系 非关系型数据库(NOSQ...
  • SQL笔记-中没有主键让sqlyog等软件带来的问题

    千次阅读 多人点赞 2019-09-27 12:34:46
    这里使用sqlyog等软件,修改内容并保存时候可能会发现! 保存没有报错,但刷新后又变回以前的样子了! 原因是没设置主键,把增加主键,即可!!!!! ...
  • -- 创建学生表 drop table if exists tb_student; -- 如果存在student的表就先删除 create table tb_student ( stuid int not null comment '学号', -- 学生id 是整数 不能为空,并指定描述为'学号' stuname ...
  • SQLyog和字段编码方式修改

    万次阅读 2017-04-26 17:19:09
    SQLyog创建表时默认的的编码方式为latin1,但通常我们在插入和修改数据时会用到中文,所以通常会修改的编码格式,编码格式的修改方式有两种,一种是在创建表的同时修改的编码格式,另一种时创建后再修改编码...
  • 创建 宿舍表 的时候是可以正常创建的,但到创建 学生表的时候就报错了,不知道是哪里出了问题
  • mysql系列(三)创建表和删除

    千次阅读 2018-05-23 15:27:03
    2.创建表 2.1表创建基础 2.2使用NULL值 2.3 主键 2.4 使用AUTO_INCREMENT 2.5指定默认值 2.6 引擎类型 3.更新 4.重命名 5.删除 6.小结 前言 之前对mysql数据库做了一个简要的讲解,也讲了怎么...
  • sqlyog各种搜索方法

    千次阅读 2018-12-11 21:39:00
    -- 创建员工 create table emp( empno int primary key auto_increment, ename varchar(50) not null, job varchar(50), mgr int, hiredate date, sal decimal(7,2),-- 7 保留7位有效...
  • [更新中...]MySQL题目练习及答案(使用SQLyog

    千次阅读 多人点赞 2018-12-21 16:07:45
    /*学生表 Student*/ create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10)); insert into Student values('01' , '赵雷' , '1990-01-01' , '男'); insert into Student values('...
  • SQLyog将mysql字符编码改成utf-8

    千次阅读 2020-06-26 15:17:51
    第一步,右键需要更改的数据库,点击改变数据库, 然后,把下面的基字符集改成utf-8就好了,一般的中文字符问题就可以解决了。 另外,贴两个直接用mysql语句改变字符集的博客链接: 添加链接描述 添加链接描述 ...
  • SQLyog数据库操作

    2021-04-12 08:17:08
    SQLyog语句 新建表单 显示语句 SELECT * FROM 表名; 添加数据 INSERT INTO 表名(列1,列n) VALUES (值1,'值n'); 删除数据和删除所有数据(删除所有数据还在) DELETE FROM 表名 WHERE 列1=值1; TRUNCATE ...
  • 数据的复制与创建数据Table是实现数据存储与管理的基础,也是使用数据库技术进行数据存储的核心对象之一。本节主要介绍数据的定义、的复制等语法与实例。(课程配套视频教程请关注后查阅视频资源)。创建数据...
  • 学生成绩sql示例

    千次阅读 2017-04-20 10:43:03
    a是学生表 b是成绩表 */ 查询学号为1245名字为张三的语文成绩 SELECT s_name,s_ubject,s_core FROM a,b WHERE a.s_id=b.s_id AND s_name=’张三’ AND s_ubject=’语文’ 按学号统计每个学生的总成绩 ...
  • 15---Mysql的多+事务

    2019-08-02 17:21:16
    typora-root-url: img typora-copy-images-to: img ...能够使用SQL语句操作结构 能够使用SQL语句进行数据的添加修改和删除的操作 能够使用SQL语句简单查询数据 学习内容 数据库的基本知识 目标 学习数据库...
  • 1.3 分组统计(group by 、having) -- 创建部门 CREATE TABLE dept( deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,-- 部门编号 dname VARCHAR(20)NOT NULL DEFAULT"",-- 部门名称 loc VARCHAR(13)NOT NULL ...
  • SQLyog的基本使用

    千次阅读 2018-04-12 14:42:00
    SQLyog是mysql数据库的客户端软件 【基本使用】 1、连接mysql数据库 2、SQLyog的页面使用介绍 3、基本的数据库命令 1) use命令 切换数据库 2) unsigned 命令 tinyint、smallint、mediumint、int、bigint...
  • mysql sqlyog(上)

    2017-08-03 22:02:05
    操作 创建表 修改 删除  3.操作列 添加列 修改列 删除列  -如何操作库   0.利用数据库管理软件(mysql) 登录数据库!    1.保证mysql服务开启状态...
  • 使用sqlyog进行check列 ...创建表时,要求定义其主码、外码约束,同时要求学生的年龄在 15 到 45岁之间。 建表如 而后在需要定义check的列右键打开筛选器(无法截图)。 可自定义过滤 如 即可 ...
  • 本文尝试用实际开发中常见的电商场景来厘清其背后需要的数据库中之间的关系,目的在于能够分析出常见购物网站的中实体间的关系,并能创建出对应的。 文章目录1.实体间常见关系2.数据库实现(一对多)2.1一对...
  • 笔试的时候是看一张成绩,包括姓名,课程,成绩,学号。三个问题,第一,查询某科成绩大于80分的学生。二,学生成绩统计并排名。三,展示一个表格,增加一列,展示每一个学生低于60分就算不及格的,高于60算及格。...
  • 首先创建两个(用作测试):tb_student、tb_class CREATE TABLE tb_class( cid INT PRIMARY KEY AUTO_INCREMENT, cname VARCHAR(20) NOT NULL ); CREATE TABLE tb_student( sid INT PRIMARY KEY AUTO_INCREMENT...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,004
精华内容 801
关键字:

sqlyog创建学生表