MySQL数据库板书


一、课程介绍

《数据库的原理和应用》是一个前导课程,也是一个基础课程。是《应用程序开发》类的课程的基础课程。

二、数据库产品介绍

目前主流的数据库有:

Oracle(美国甲骨文公司),大中型应用程序。(java+Oracle)

SQL Server(美国微软公司),.NET应用程序。(C#+SQL Server)

MySQL(美国甲骨文公司),中小型网站。(Java+MySQL,PHP+MySQL)

三、MySQL基础

1、创建数据库

数据库是一个容器,里面有表、视图、存储过程等。

格式:create  database  <数据库名>;

查看数据库:show databases;

使用数据库:use  <数据库名>;

2、创建表

表是用来存储数据,表是数据库中最重要的一个对象。

格式:create  table  <表名>(

  <字段名>  <字段类型>(宽度) ,

  ...

);

  auto_increment:

    auto_increment表示自增,即自动编号,只有整型字段才可以设置,一个表只能有一个自增字段。

示例:

create table product(
  id int auto_increment primary key, --auto_increment表示自增,primary key表示主键。
  name varchar(50),
  price float,
  image varchar(255)
);

查看表结构:

desc <表名>

查看表数据(查询):

select  *  from <表名>

插入数据:

insert into <表名>(<字段名1>,<字段名2>,...)   values(<值1>,<值2>,...)

 

一、查询语句(select)

1、基本格式:select   <字段列表>   from    <表名>

说明:

  *表示所有字段。

  如果查部分字段,需要指定,字段间用逗号隔开。

  指定标题使用as,如:select  id  as  '编号', name  as  '名称'  from product;

  去重的关键字:distinct

  例如:select distinct teamid from player where chinesename like '%杰克逊%'

 2、条件子句where

  格式:where  <条件>

  说明:条件是一个逻辑表达式。

  (1)比较运算符:>  <  >=  <=  !=

  (2)逻辑运算符:not   and    or

  (3)范围运算符:<字段> between <值1> and <值2>

  (4)in运算符:<字段> in (<值1>,<值2>,...)

  (5)like运算符:like '含通配符的字符串',主要作模糊查询

    mysql的通配符:

      %表示任意个字符(0~n)

      _表示任意1个字符(0~1)

        []表示范围

  (6)is null运算符:<字段> is [not] null

3、排序子句

  格式:order by <字段> [desc | asc]

  说明: desc表示降序(值由大到小),asc表示升序(值由小到大),默认为升序。

4、limit子句

  格式:limit([偏移量],<记录个数>)

  说明:如果省略偏移量,则表示从第1条开始取,

    如:limit 10  --从开始取前10条。

    如:limit 20,10  --则表示从第20+1条开始取10条,即(21~30)。

5、分组子句

  格式:group by <字段> [having <条件>]

  说明:having <条件>表示限定分组,即对分组后的结果进行筛选。

  聚合函数(统计函数):

    count(<字段>):记录个数

    sum(<数值字段>):求和

    avg(<数值字段>):求平均值

    max(<数值字段>):求最大值

    min(<数值字段>):求最小值

 6、多表的连接查询

  (1)全连接查询

  格式:select <字段列表> from <表1>,<表2> where <表1>.<连接字段>=<表2>.<连接字段>

  功能:从多张表查询数据

   (2)join连接

    a、内连接

    格式:select <字段列表> from <表1> t1 inner join <表2> t2 on <表1>.<连接字段>=<表2>.<连接字段>

    说明:格式中t1和t2分别表示表1和表2的别名;inner join也简写为join。

    b、外连接

      左外连接

       格式:select <字段列表> from <表1>left join <表2> on <表1>.<连接字段>=<表2>.<连接字段>

       说明:左表中所有的记录都显示

      右外连接

       格式:select <字段列表> from <表1>right join <表2> on <表1>.<连接字段>=<表2>.<连接字段>

       说明:右表中所有的记录都显示

    c、交叉连接

    格式:select <字段列表> from <表1>cross join <表2>

 7、子查询

  概念:子查询就是一个SQL语句中嵌套的一个select语句。  

  (1)比较子查询

  格式:select <字段列表> from <表名> where <字段>  <比较运算符>  <子查询>

  说明:此时子查询的结果必须是单值。

  举例:查询身高最高的球员的中文名和身高。

    查询超过平均身高的球员的中文名和身高。

  (2)in子查询

  格式:select <字段列表> from <表名> where <字段>  in  <子查询>

  说明:该子查询结果应是一个单列的结果集。

  (3)exists子查询

  格式:select <字段列表> from <表名> where  exists <子查询>

 

二、数据库的基本操作:增、删、改 

  1、增(insert)

  格式:insert | replace into <表名>[(<字段列表>)] values(<值列表>)

  说明:

    replace into :表示如果有该主键的记录,则进行替换;没有的话,则和insert into相同,插入新的一条。

    如果一次要插入多行,则数据行之间用","分隔。

  2、删(delete)

  格式:delete from <表名> where <条件>

  说明:还可以加上order by 子句和limit子句

  举例:delete from score order by maths limit 3; --删除成绩表中数学成绩最低的3行记录。

  3、改(update)

  格式:update <表名> set <字段1>=<值1>,...where <条件>

    说明:可以加上order by 子句和limit子句

三、约束(constraint)

1、主键约束(Primary Key)

  主键是用来唯一地表示一个实体,为了防止出现重复的记录。

  一个表只能有一个主键。

  例如:学生(学号,姓名,……)

  (1)在创建表时候创建主键约束

    create table <表名>(

            <字段1> <类型1>  primary key,  --列的完整性约束

            <字段2> <类型2>  ,

            ...

             )

 

    

    create table <表名>(

            <字段1> <类型1> 

            <字段2> <类型2>  ,

            primay key(<字段1>)  --表的完整性约束

             )

    (2)在表创建后添加主键约束

      alter table <表名>  add primary key(<字段名>)

2、唯一约束(unique)

  限制某个字段不要出现重复值

(1)在创建表时候创建唯一约束

    create table <表名>(

            <字段1> <类型1> unique,  --列的完整性约束

            <字段2> <类型2>  ,

            ...

             )

    

    create table <表名>(

            <字段1> <类型1> 

            <字段2> <类型2>  ,

            unique(<字段1>)  --表的完整性约束

             )

(2)在表创建后添加唯一约束

    alter table <表名>  add unique(<字段名>)

 

3、检查约束(check)

  设置某个字段取值范围。  

(1)在创建表时候创建检查约束

    create table <表名>(

            <字段1> <类型1> check(<条件>),  --列的完整性约束

            <字段2> <类型2>  ,

            ...

             )

(2)在表创建后添加检查约束

      alter table <表名>  add check(<条件>)

  MySQL的存储引擎均能对check子句进行分析,但会忽略check子句,即check子句约束还不起作用。

4、外键约束(参照完整性约束Foreign key)

   外键不是当前表的主键,是别的表的主键。

  外键一定要取自于父表的主键。

   (1)在创建表的时候定义外键约束

    create table <表名>(

            <字段1> <类型1> ,

            <字段2> <类型2>  ,

            foreign key(<外键字段>) references <父表>(<主键字段>)  --表的完整性约束

             )

      说明:外键的定义应放在所有字段定义的后面,不能放在某列的定义里面

    (2)在表创建后添加外键约束

      alter table <表名>  add foreign key(<外键字段>) references <父表>(<主键字段>) 

    说明:

      在外键的定义的最后可加上以下几种选项:

 

      on update cascade  --级联更新,即更新了父表的主键值,子表中对应的外键值也会随之更新。

      on delete cascade   --级联删除,即删除了父表中某主键对应的记录,那么子表中外键值和主键相同的记录也会随之删除。

      on update ristrict  --禁止更新,即如果父表中有和外键值相同的主键值,则禁止修改此外键值

      on delete ristrict  --禁止删除,即如果父表中有和外键值相同的主键值,则禁止删除该记录

 5、默认值

  default <值>

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

作业:

  (一)导入数据

  (1)下载study.sql文件。

    链接: https://pan.baidu.com/s/1aAYSHZ-C32DsaLG3PeSJNw

    提取码: wj5x  

  (2)将study.sql脚本文件复制到p盘。

  (3)登录mysql服务器,进入mysql提示符状态。

    提示:

    (a)通过navicat修改root密码为123456

    (b)找到mysql命令所在位置,如:C:\Program Files\MySQL\MySQL Server 5.7\bin,在此窗口空白处按下shift键的同时右键,选择“在此处打开命令窗口”,进入windows命令行。

    (c)在windows命令行状态,输入:mysql -h localhost -P 3308 -u root -p123456

    说明:因为机房修改了mysql的端口号为3308,如果采用默认端口3306,登录本机的话,只需要指定用户名和密码即可登录 ,即:mysql -u root -p123456

  (4)mysql>create database study;

  (5)mysql>use study;

  (6)mysql>source  p:/study.sql;

  (7)mysql>show tables;

  (8)mysql>select * from player;

  (二)完成以下查询并截图

  (1)查询身高(height)220以上的球员的编号(id),姓名(chinesename),身高(height)信息。

  (2)使用between..and..运算符查询球龄(playAge)10~15之间(含10和15)的球员的编号(id),姓名(chinesename),球龄(playAge)信息。

  (3)查询位置(position)是'中锋'的球员的编号(id),姓名(chinesename),位置(position)信息。

  (4)使用in运算符查询球队编号(teamid)为13或15或17的球队的球员的编号(id),姓名(chinesename),球队编号(teamid)信息。

  (5)从player表中查询中文姓名以"杰克逊"结尾的所有球员的编号(id),姓名(chinesename),英文名(englishname)。

  (6)从player表查询英文名为"Chris Paul"的球员的编号(id),姓名(chinesename),英文名(englishname)。

  (7)从player表中查询中文姓名含"詹姆斯"的所有球员的编号(id),姓名(chinesename),英文名(englishname)。

  (8)如果以20条记录为1页对所有球员的记录进行分页,请查询第11页的球员的编号(id),姓名(chinesename),英文名(englishname)。

  -------分组查询--------

  (9)查询身高(height)由高到低的前10位球员的编号(id),姓名(chinesename),身高(height)信息。

  (10)从球员表player中查询全联盟现役球员的年龄age最大值和最小的值。

  (11)从球员表player中查询全联盟现役球员的平均身高。

  (12)分别统计每个球队的球员数,结果字段有球队编号teamid和球员数。

  (13)统计球员数大于或等于20的球队编号teamid和球员数。

 

  ------多表的连接查询-----

    数据准备:

    提示:先使用use study;切换数据库

    (a)向球队表team中添加一支球队

      insert into team(id,name) values(31,'啦啦队');

    (b)向球员表player中添加一名球员

      insert into player(id,chinesename) values(540,'周琦');

    (c)分别对两表进行全连接、内连接、左外连接、右外连接和交叉连接查询,只查球员编号id,球员中文名chinesename和球队名name,并提交相应的结果截图(共5张)。

    

  --------子查询---------

  (1)查询球员中文名chinesename含“杰克逊”的球队的队名name。

  (2)查询身高height最高的球员所在的球队的球队编号id和球队名称name。

  (3)查询身高height高于全联盟平均身高的球员的球员编号id,球员中文名chinesename和身高height。

 

  --------增、删、改-------

  创建数据库和表:

  (a)数据库sanguo

  (b)国家表country

  

 

   (c)武将表person

  

 

   (d)添加记录

  

 

  

 

   (e)删除姓名为空的记录

     (f)将“关云长”的姓名改成“关羽”。

   

  -----------约束-------------

  (1)创建数据库:school
  (2)创建班级表bj,班级编号cid作主键约束且自动编号, 班级名cname作唯一约束

  (3)创建学生表xs,学生编号sid作主键约束且自动编号,学生姓名sname字符串,学生的年龄sage整型作检查约束,取值范围(10-99),班级编号cid作外键约束参照班级表的班级编号

  (4)输入记录

      班级表bj

      

 

      学生表xs

       

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM