mysql数据库和表的基础操作

饭宝  论坛元老 | 2022-12-15 10:34:43 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1036|帖子 1036|积分 3108

MySQL数据模型

关系型数据库是建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的 二维表 组成的数据库 
关系型数据库的优点:


  • 都是使用表结构,格式一致,易于维护。
  • 使用通用的 SQL 语言操作,使用方便,可用于复杂查询。

    • 关系型数据库都可以通过SQL进行操作,所以使用方便。
    • 复杂查询。现在需要查询001号订单数据,我们可以看到该订单是1号客户的订单,而1号订单是李聪这个客户。以
    • 后也可以在一张表中进行统计分析等操作。

  • 数据存储在磁盘中,安全。 
SQL分类 


  • DDL(Data Definition Language) : 数据定义语言,用来定义数据库对象:数据库,表,列等
    DDL简单理解就是用来操作数据库,表等

  • DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改
    DML简单理解就对表中数据进行增删改

  • DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据)
    DQL简单理解就是对数据进行查询操作。从数据库表中查询到我们想要的数据。

  • DCL(Data Control Language) 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户
    DML简单理解就是对数据库进行权限控制。比如我让某一个数据库表只能让某一个用户进行操作等。
注意: 以后我们最常操作的是 DML 和 DQL ,因为我们开发中最常操作的就是数据。 
DDL:操作数据库 

查询所有的数据库


  • 运行上面语句效果如下:
  1. SHOW DATABASES;
复制代码

创建数据库


  • 创建数据库
  1. CREATE DATABASE 数据库名称;
复制代码

 
而在创建数据库的时候,我并不知道datastu数据库有没有创建,直接再次创建名为db1的数据库就会出现错误。

  • 创建数据库(判断,如果不存在则创建)
  1. CREATE DATABASE IF NOT EXISTS 数据库名称;
复制代码
删除数据库


  • 删除数据库
  1. DROP DATABASE 数据库名称;
复制代码

  • 删除数据库(判断,如果存在则删除)
  1. DROP DATABASE IF EXISTS 数据库名称;
复制代码
使用数据库

数据库创建好了,要在数据库中创建表,得先明确在哪儿个数据库中操作,此时就需要使用数据库。

  • 使用数据库
  1. USE 数据库名称;
复制代码

  • 查看当前使用的数据库
  1. SELECT DATABASE();
复制代码
DDL:操作表

查询表


  • 查询当前数据库下所有表名称
  1. SHOW TABLES;
复制代码

  • 查询表结构
  1. DESC 表名称;
复制代码
表的增删改查


  • 创建表
  1. CREATE TABLE 表名 (
  2.     字段名1  数据类型1,
  3.     字段名2  数据类型2,
  4.     …
  5.     字段名n  数据类型n
  6. );
复制代码
注意:最后一行末尾,不能加逗号
  1. create table tb_user (
  2.         id int,
  3.     username varchar(20),
  4.     password varchar(32)
  5. );
复制代码
数据类型

MySQL 支持多种类型,可以分为三类:

  • 数值
    1. tinyint : 小整数型,占一个字节
    2. int :    大整数类型,占四个字节
    3.     eg : age int
    4. double : 浮点类型
    5.     使用格式: 字段名 double(总长度,小数点后保留的位数)
    6.     eg : score double(5,2)
    复制代码
  • 日期
    1. date :     日期值。只包含年月日
    2.     eg :   birthday date :
    3. datetime : 混合日期和时间值。包含年月日时分秒
    复制代码
  • 字符串
    案例:
    需求:设计一张学生表,请注重数据类型、长度的合理性
        1. 编号
        2. 姓名,姓名最长不超过10个汉字
        3. 性别,因为取值只有两种可能,因此最多一个汉字
        4. 生日,取值为年月日
        5. 入学成绩,小数点后保留两位
        6. 邮件地址,最大长度不超过 64
        7. 家庭联系电话,不一定是手机号码,可能会出现 - 等字符
        8. 学生状态(用数字表示,正常、休学、毕业...)
    语句设计如下:
  
  1. create table student (
  2.         id int,
  3.     name varchar(10),
  4.     gender char(1),
  5.     birthday date,
  6.     score double(5,2),
  7.     email varchar(15),
  8.     tel varchar(15),
  9.     status tinyint
  10. );
复制代码
删除表


  • 删除表
  1. DROP TABLE 表名;
复制代码

  • 删除表时判断表是否存在
  1. DROP TABLE IF EXISTS 表名;
复制代码
修改表


  • 修改表名
  1. ALTER TABLE 表名 RENAME TO 新的表名;
  2. -- 将表名student修改为stu
  3. alter table student rename to stu;
复制代码

  • 添加一列
  1. ALTER TABLE 表名 ADD 列名 数据类型;
  2. -- 给stu表添加一列address,该字段类型是varchar(50)
  3. alter table stu add address varchar(50);
复制代码

  • 修改数据类型
  1. ALTER TABLE 表名 MODIFY 列名 新数据类型;
  2. -- 将stu表中的address字段的类型改为 char(50)
  3. alter table stu modify address char(50);
复制代码

  • 修改列名和数据类型
  1. ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
  2. -- 将stu表中的address字段名改为 addr,类型改为varchar(50)
  3. alter table stu change address addr varchar(50);
复制代码

  • 删除列
  1. ALTER TABLE 表名 DROP 列名;
  2. -- 将stu表中的addr字段 删除
  3. alter table stu drop addr;
复制代码
DML

DML主要是对数据进行增(insert)删(delete)改(update)操作。
添加数据


  • 给指定列添加数据
  1. INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);
复制代码

  • 给全部列添加数据
  1. INSERT INTO 表名 VALUES(值1,值2,…);
复制代码

  • 批量添加数据
  1. INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
  2. INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
复制代码
 

  • 练习
为了演示以下的增删改操作是否操作成功,故先将查询所有数据的语句介绍给大家:
  1. select * from stu;
复制代码
 
  1. -- 给指定列添加数据
  2. INSERT INTO stu (id, NAME) VALUES (1, '张三');
  3. -- 给所有列添加数据,列名的列表可以省略的
  4. INSERT INTO stu (id,NAME,sex,birthday,score,email,tel,STATUS) VALUES (2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1);
  5. INSERT INTO stu VALUES (2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1);
  6. -- 批量添加数据
  7. INSERT INTO stu VALUES
  8.     (2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1),
  9.     (2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1),
  10.     (2,'李四','男','1999-11-11',88.88,'lisi@itcast.cn','13888888888',1);
复制代码
修改数据


  • 修改表数据
  1. UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 条件] ;
复制代码
注意:

  • 修改语句中如果不加条件,则将所有数据都修改!
  • 像上面的语句中的中括号,表示在写 sql 语句中可以省略这部分
 

  • 练习

    • 将张三的性别改为女
      1. update stu set sex = '女' where name = '张三';
      复制代码
    • 将张三的生日改为 1999-12-12 分数改为99.99
      1. update stu set birthday = '1999-12-12', score = 99.99 where name = '张三';
      复制代码
    • 注意:如果update语句没有加where条件,则会将表中所有数据全部修改!
      1. update stu set sex = '女';
      复制代码

删除数据


  • 删除数据
  1. DELETE FROM 表名 [WHERE 条件] ;
复制代码

  • 练习
  1. -- 删除张三记录
  2. delete from stu where name = '张三';
  3. -- 删除stu表中所有的数据
  4. delete from stu;
复制代码
基础查询

语法


  • 查询多个字段
  1. SELECT 字段列表 FROM 表名;
  2. SELECT * FROM 表名; -- 查询所有数据
复制代码

  • 去除重复记录
  1. SELECT DISTINCT 字段列表 FROM 表名;
复制代码

  • 起别名
  1. AS: AS 也可以省略
复制代码
 
 练习


  • 查询name、age两列
    1. select name,age from stu;
    复制代码
  • 查询所有列的数据,列名的列表可以使用 * 替代
    1. select * from stu;
    复制代码
  • 查询地址信息
    1. select address from stu;
    复制代码
    从上面的结果我们可以看到有重复的数据,我们也可以使用 distinct 关键字去重重复数据。
  • 去除重复记录
    1. select distinct address from stu;
    复制代码
  • 查询姓名、数学成绩、英语成绩。并通过as给math和english起别名(as关键字可以省略)
    1. select name,math as 数学成绩,english as 英文成绩 from stu;
    2. select name,math 数学成绩,english 英文成绩 from stu;
    复制代码
条件查询

 语法
  1. SELECT 字段列表 FROM 表名 WHERE 条件列表;
复制代码

  • 条件
    
条件查询练习


  • 查询年龄大于20岁的学员信息
    1. select * from stu where age > 20;
    复制代码
  • 查询年龄大于等于20岁的学员信息
    1. select * from stu where age >= 20;
    复制代码
  • 查询年龄大于等于20岁 并且 年龄 小于等于 30岁 的学员信息
    1. select * from stu where age >= 20 &&  age <= 30;
    2. select * from stu where age >= 20 and  age <= 30;
    复制代码
  • 查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的
    1. select * from stu where age BETWEEN 20 and 30;
    复制代码
     
where 和 having 区别:

  • 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
  • 可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。
 
分页查询

语法
  1. select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';
复制代码
注意: 上述语句中的起始索引是从0开始
 
练习


  • 从0开始查询,查询3条数据
    1. select * from stu where age = 18;
    复制代码
  • 每页显示3条数据,查询第1页数据
    1. select * from stu where age = 18;
    复制代码
  • 每页显示3条数据,查询第2页数据
    1. select * from stu where age = 18 or age = 20 or age = 22;
    2. select * from stu where age in (18,20 ,22);
    复制代码
  • 每页显示3条数据,查询第3页数据
    1. select * from stu where english = null; -- 这个语句是不行的
    2. select * from stu where english is null;
    3. select * from stu where english is not null;
    复制代码
从上面的练习推导出起始索引计算公式:
  1. select * from stu where name like '马%';
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表