MySQL基础

本文深入讲解MySQL数据库基础知识,包括关系型数据库概念、行式存储、基础命令、数据类型及建表约束,涵盖主键、自增、外键、唯一、默认和非空约束。并介绍查询技巧,如联表查询,帮助理解数据一致性与查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一. 基础概念

  1. 关系型数据库
  2. 行式存储

二. 基础命令

  1. 命令分类
  2. 基础命令
  3. 数据库中常用的数据类型
  4. 修改数据基本命令

三. MySQL建表约束

  1. 主键约束
  2. 自增约束
  3. 外键约束
  4. 唯一约束
  5. 默认约束
  6. 非空约束

四. MySQL查询

一. 基础概念

1. 关系型数据库

关系型数据库又称为关系型数据库管理系统(RDBMS),它是利用数据概念实现对数据处理的算法,达到对数据及其快速的增删改查操作。

既然被称为关系型数据库,那么它的关系在哪里体现呢?

比如有表单A 和 表单B

其中:

表单A 中有一个名为user_id的字段

表单B 中也有一个名为user_id的字段

可以将他们建立一种联系,当修改表单A的user_id的值时,表单B 中的user_id的值也会自动进行修改,因为他们建立的关系,使得数据具有一致性。这就是所谓的关系型

非关系型数据库正如它的名字,每条数据间都是独立存在的,没有什么关系。

2. 行式存储

nameagesex

二. 基础命令

1. 命令分类

  • DML|数据库操控语言|对表中的数据进行增删改|insert delete update
  • DQL|数据库查询语言|对表中的数据进行查询|select
  • DDL 数据库定义语言|对数据库,数据表结构进行处理|create alter drop

2. 基础命令

  • 创建数据库:
    create database yolanda;
  • 查看数据库:
    show databases;
  • 引用数据库:
    use yolanda;
  • 创建表:
    create table stu(name varchar(10),age int);
  • 描述表的结构:
    desc stu;
  • 查看创建了多少张表:
    show tables;
  • 删除表:
    drop table stu;
  • 修改表:
    • 加一列:alter table 表名 add 列名
    • 修改列名:alter table 表名 change 列名
    • 删除列:alter table 表名 drop 列名

3. 数据库当中常用的数据类型

  • char/varchar:字符串
  • int:整型
  • float:浮点型
  • date:yyyy-mm-dd 日期值
  • year:年份

char和varchar

  1. char的长度是不可变的,而varchar的长度是可变的

    字段b:类型char(10),值为:abc,存储为:abc (abc+7个空格)

    字段d:类型varchar(10),值为:abc,存储为:abc (自动变为3个的长度)

  2. 超出长度自动截取

    字段c:类型char(3),值为:abcdefg,存储为:abc(defg自动删除)

    字段e:类型varchar(3), 值为:abcdefg,存储为:abc (defg自动删除)

  3. var(10)和char(10),都表示可存10个字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放10个

  4. char最多可以存放255个字符
    varchar的最大长度为65535个字节,varchar可存放的字符数跟编码有关
    字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766个字符
    字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845个字符

  5. char和varchar的最大长度限制是mysql规定的

4. 修改数据基本命令

  • 增加 insert
  • 删除 delete
  • 修改 update
  • 查询 select

三. MySQL建表约束

1. 主键约束

  • 能唯一确定一张表中的一条数据,给某个字段添加约束,使得该字段不重复且不为空。
  • 创建一张表table:
    create table user(id int primary key #在id添加主键约束,name varchar(20));
    插入数据:
    insert into user values(1,‘xiaoming’);
    再插入
    insert into user values(1,‘xiaoming2’);
    报错:因为我们设置了主键,可以使这个字段不重复
  • 在id和name上添加主键:
    create table user2(id int ,name varchar(20),passwd varchar(20),primary key(id,name))
    插入数据:
    insert into user2 values(1,‘xiaoming’,‘123’);
    再插入数据:
    insert into user2 values(2,‘xiaoming’,‘234’);
    不报错:因为这个叫做联合主键,只要联合的主键加起来不重复即可,它可以唯一确定一条数据,所以不报错

2. 自增约束

  • 创建一张表:
    create table user3(id int primary key auto_increment,name varchar(20));
  • 插入数据:
    insert into user3(name)values(‘zhangsan’);
    select * from user3;
    没有指定id的情况下会自动加上id

自增约束和主键约束联合起来用,会自动的去管控主键的值,使主键的值不唯一。

3. 外键约束

  • 涉及到两个表:父表,子表,父表中没有的数据不能在子表中使用
  • 创建两个表:
    create table classes(id int primary key,name varchar(20));
    create table students(id int primary key,name varchar(20),class_id int,foreign key(class_id)references classes(id));
  • 在父表插入数据:
    insert into classes values(1,‘yiban’);
    insert into classes values(2,‘erban’);
    insert into classes values(3,‘sanban’);
    insert into classes values(4,‘siban’);
  • 在子表插入数据:
    insert into students values(1001,‘aa’,1);
    insert into students values(1002,‘bb’,2);
    insert into students values(1003,‘cc’,3);
    insert into students values(1004,‘dd’,4);
  • 再插入以下数据
    insert into students values(1005,‘ee’,5);
    报错,因为父表中没有5这个class id

父表中的记录如果被子表引用,是不能被删除的。

4. 唯一约束

  • 修饰的字段的值不可以重复
  • 创建一张表
    create table user5(id int,name varchar(20)unique/unique(name));
  • 添加唯一性约束:
    alter table user5 add unique(name);
  • 通过修改字段的方式添加唯一性约束:
    alter table user5 modify name varchar(20) unique;
  • 插入内容
    insert into user5 values(1,‘zhangsan’);
    insert into user5 values(1,‘lisi’);
  • 再插入以下内容
    insert into user5 values(2,‘zhangsan’);
    报错:因为这个名字已经有了,不可以重复。
  • 如何删除唯一性约束?
    alter table user5 drop index name;

5. 默认约束

  • 当我们插入字段值的时候,如果没有设置,就会使用默认值
  • 创建一张表
    create table user6(id int,name varchar(20),age int default 10);
  • 插入数据
    insert into user6(id,name) values(1,‘aa’);
  • 查看表
    select * from user6;
    会发现age有默认的值

6. 非空约束

  • 修饰的字段不能为空
  • 创建表
    create table user7(id int not null,name varchar(20));
  • id字段不能为空

四. MySQL查询

  • 创建以下两张表

    • 学生表:stuinfo
      ssno:学号
      sname:姓名
      sage:年龄

    create table stuinfo(ssno int primary key,sname varchar(20),sage int);

    • 分数表:score
      sno:学号
      cno:课程编号
      score:分数

    create table score(sno int primary key,cno int,score int);

  • 给学生表中插入数据
    insert into stuinfo values(1001,‘aa’,12);
    insert into stuinfo values(1002,‘bb’,15);
    insert into stuinfo values(1003,‘cc’,13);
    insert into stuinfo values(1004,‘dd’,14);
    insert into stuinfo values(1005,‘ee’,16);

  • 给分数表中插入数据
    insert into score values(1001,2003,59);
    insert into score values(1002,2003,53);
    insert into score values(1003,2004,78);
    insert into score values(1004,2004,90);
    insert into score values(1005,2003,87);

  • 查出选修了2003这门课(score),不及格的同学的名字(stuinfo)
    sname------>ssno------>sno
    A.查出选修了2003这门课不及格的学生的学号(score)
    select sno from score where cno=‘2003’ and score<60;
    B.查出学生姓名
    select sname from stuinfo where ssno=‘sno’;
    C.查出选修了2003这门课,不及格的同学的名字
    select sname from stuinfo where ssno in(select sno from score where cno=‘2003’ and score<60);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值