mysql

mysql

数据库的基本概念

  1. 数据库的英文单词: DataBase 简称 : DB

  2. 什么数据库?

    • 用于存储和管理数据的仓库。

  3. 数据库的特点

    • 持久化存储数据的。其实数据库就是一个文件系统

    • 方便存储和管理数据

    • 使用了统一的方式操作数据库 -- SQL

  4. 常见的数据库软件:mysql、oracle、sqlserver 等

MySQL数据库

  • MySQL服务启动

    1. 手动 cmd --> services.msc 打开服务的窗口

    2. 使用管理员打开cmd

      # 启动mysql的服务
      net start mysql
      ​
      # 关闭mysql服务
      net stop mysql
  • MySQL 登录

    mysql -u root -p密码
    ​
    mysql -h ip -uroot -p连接目标的密码
    ​
    mysql --host=ip --user=root --password=连接目标的密码
  • MySQL 退出

    mysql> exit;
    # 或
    mysql> quit;
  • 几个概念

    • 数据库:文件夹

    • 表:文件

    • 数据:表记录

SQL

  1. 什么是SQL? Structured Query Language:结构化查询语言 其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。

  2. SQL通用语法

    • SQL 语句可以单行或多行书写,以分号结尾。

    • 可使用空格和缩进来增强语句的可读性。

    • MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。

    • 2 种注释

      • 单行注释

        -- 注释内容
        # 注释内容(mysql特有)
      • 多行注释

         /* 
         多行注释 
         可换行
         */

  3. SQL分类

    • DDL(Data Definition Language)数据定义语言 用来定义数据库对象:数据库,表,列等。关键字:createdropalter

    • DML(Data Manipulation Language)数据操作语言 用来对数据库中表的数据进行增删改。关键字:insertdeleteupdate

    • DQL(Data Query Language)数据查询语言 用来查询数据库中表的记录(数据)。关键字:selectwhere

    • DCL(Data Control Language)数据控制语言 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANTREVOKE

DDL:操作数据库、表

  1. 操作数据库(CRUD

  • C(Create):创建

    -- 创建数据库
    create database 数据库名称;
    ​
    -- 创建数据库,判断不存在,再创建
    create database if not exists 数据库名称;
    ​
    -- 创建数据库,并指定字符集
    create database 数据库名称 character set 字符集名;
  • R(Retrieve):查询

    -- 查询所有数据库的名称:
    show databases;
    ​
    -- 查询某个数据库的字符集:查询某个数据库的创建语句
    show create database 数据库名称;
  • U(Update):修改

    -- 修改数据库的字符集
    alter database 数据库名称 character set 字符集名称;
  • D(Delete):删除

    -- 删除数据库
    drop database 数据库名称;
    ​
    -- 判断数据库存在,存在再删除
    drop database if exists 数据库名称;

  • 使用数据库

    -- 查询当前正在使用的数据库名称
    select database();
    ​
    -- 使用数据库
    use 数据库名称;

  1. 操作表

    在数据库中,数据表是最重要,最基本的操作对象,是数据存储的基本单位。数据在表中是按照行和列的格式来存储的。

    MySQL 支持多种数据类型:

    • 数值类型:包括整数类型 intsmallintbigint 等,浮点类型包括 floatdouble,定点类型decimal

    浮点类型和定点类型都可以使用 (m,n) 形式定义,m 表示总位数、n 表示小数的位数。

    • 字符串类型

      • char(M) :为固定长度字符串,在定义时指定字符串列长,当保存时在右侧填充空格以达到指定长度。M 的范围是 0~255​ 个字符。

      • varchar(M) : 是长度可变的字符串,M 表示最大列长度,范围是 0~65535​

      • Text :保存非二进制字符串,如文章内容,评论等

    • 日期/时间类型

      • date :日期,只包含年月日 yyyy-MM-dd

      • datetime : 日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss

      • timestamp : 时间戳类型,包含年月日时分秒 yyyy-MM-dd HH:mm:ss

        如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值

    • C(Create):创建

      基本语法:

      create table 表名(
          列名1 数据类型1,
          列名2 数据类型2,
          ....
          列名n 数据类型n
      );

      注意:最后一列,不需要加逗号 ,

      -- 创建表
      create table student(
          id int,
          name varchar(32),
          age int ,
          score double(4,1),
          birthday date,
          insert_time timestamp
      );
      ​
      -- 复制表
      create table 表名 like 被复制的表名;

      约束(constraint)

      主键约束

      主键,又称主码,是表中一列或多列的组合。主键约束要求:

      • 主键的列的数据唯一(不能重复),并且不能为空

      • 主键就是表中记录的唯一标识

      主键能唯一的标识表中的一条记录,可以结合外键定义不同数据表之间的关系,可以加快数据库的查询速度。主键分为两种类型:单字段主键和多字段联合主键。 (1)单字段主键:主键由一个字段组成,定义方式有两种

      -- 第一种
      create table 表名(
          列名 数据类型 primary key,
          ...
      )
      ​
      -- 第二种
      create table 表名(
          列名 数据类型,
          ...,
          primary key(列名)
      )

      (2)多字段联合主键:主键由多个字段联合组成,只能在定义完列之后定义

      create table 表名(
          列名1 数据类型,
          列名2 数据类型,
          ...,
          primary key(列名1,列名2)
      )

      外键约束

      外键用来在两个表之间建立连接,可以是一列或多列。

      • 一个表可以有一个或多个外键

      • 外键可以为空值,如果不为空,那么值应该对应另外一张表中的某个主键值

      • 外键对应表中的一个字段,可以不是本表的主键,但对应另外一个表的主键

      create table tb_dept(
          id int primary key,
          name varchar(22),
          location varchar(50)
      );
      ​
      -- 定义表格 tb_emp,将字段 deptid 作为外键与 tb_dept 表的 id 关联
      create table tb_emp(
          id int(11) primary key,
          name varchar(25),
          deptid int(11),
          salary float,
          constraint fk_dept_emp foreign key(deptid) references tb_dept(id)
      );
      ​

      (1)增加外键约束 对于定义的表格,如果需要,可以在表之间通过外键建立关联关系。语法格式如下:

      alter table 表名 add constraint 外键名字 foreign key(列名) references 参照表(列名) [on delete cascade|set null]
      alter table tb_emp add constraint fk_dept_emp foreign key(deptid) references tb_dept(id);

      (2)删除外键约束 对于定义的外键,如果不再需要可以删除,就可以解除主表和从表之间的关联关系。语法格式如下:

      alter table 表名 drop foreign key 外键约束名字;

      非空约束

      指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错。语法规则:

      字段名 数据类型 not null;
      create table tb_emp(
          id int(11) primary key,
          name varchar(25) not null,
          deptid int(11),
          salary float,
          constraint fk_dept_emp foreign key(deptid) references tb_dept(id)
      );

      唯一性约束

      要求该列唯一,允许为空,但是只能有一个空值。唯一约束可以确保一列或者多列不出现重复值。语法规则如下: (1)在定义列之后直接指定唯一约束

      列名字 数据类型 unique

      (2)在定义完所有列之后指定唯一约束

      constraint 约束名 unique 列名

      Uninque 和 primary key 的区别:

      • 一个表中可以有多个字段使用 unique 约束,但是只能有一个 primary key

      • Primary key 不允许空值;unnique 允许空值(只能有一个)

      默认约束

      指定某列的默认值,如果插入数据的时候没有为这个字段设定值,系统自动将该字段赋值为默认值。 语法规则:

      字段名 数据类型 default 默认值
      create table tb_emp(
          id int(11) primary key,
          name varchar(25) not null,
          deptid int(11) default 1,
          salary float,
          constraint fk_dept_emp foreign key(deptid) references tb_dept(id)
      );

      自动增加

      在应用中,如果希望在插入记录的时候系统自动生成主键值,可通过为表的主键增加 auto_increment 关键字实现。在 MySQL 中,auto_increment 的初始值是1,每增加一条记录,字段值自动加1。每一张表中只能有一个字段使用 auto_increment 约束,并且该字段必须是主键或部分主键。

      语法规则:

      字段名 数据类型 auto_increment
      create table tb_emp(
          id int(11) primary key auto_increment,
          name varchar(25) not null,
          deptid int(11) default 1,
          salary float,
          constraint fk_dept_emp foreign key(deptid) references tb_dept(id)
      );

    • R(Retrieve):查询

      -- 查询某个数据库中所有的表名称
      show tables;
      ​
      -- 查询表结构
      desc 表名;
    • U(Update):修改

      -- 1. 修改表名
      alter table 旧表名 rename to 新的表名;
      ​
      -- 2. 修改表的字符集
      alter table 表名 character set 字符集名称;
      ​
      -- 3. 添加一列
      alter table 表名 add 列名 数据类型 [约束];
      ​
      -- 4. 修改列名称 类型
      alter table 表名 change 列名 新列名 新数据类型;
      alter table 表名 modify 列名 新数据类型;
      ​
      -- 5. 删除列
      alter table 表名 drop 列名;
    • D(Delete):删除

      drop table 表名;
      drop table if exists 表名;

DML:增删改表中数据

  1. 添加数据

    语法:

    insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);

    注意:

    • 列名和值要一一对应。

    • 如果表名后,不定义列名,则默认给所有列添加值

      insert into 表名 values(值1,值2,...值n);
    • 除了数字类型,其他类型需要使用引号(单双都可以))引起来

  2. 删除数据

    语法:

    delete from 表名 [where 条件];

    注意:

    • 如果不加条件,则删除表中所有记录

    • 如果要删除所有记录

    delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
    TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。

  3. 修改数据

    语法:

    update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];

    注意:

    • 如果不加任何条件,则会将表中所有记录全部修改。

练习

  1. 首先创建数据库表格 pet ,其表格结构如表1,将表2中的记录插入到 pet 表中

  2. 使用 update 语句将名字为 Fang 的狗的主人改为 Kevin

  3. 将没有主人的宠物的 owner 字段值都改为 Duck

  4. 删除已经死亡的宠物记录

  5. 删除所有表中的记录

表1

字段名字段说明数据类型主键非空唯一自增
id宠物编号int
name宠物名称varchar(20)
owner宠物主人varchar(20)
species种类varchar(20)
sex性别char(1)
birth出生日期date
death死亡日期date

表2

idnameownerspeciessexbirthdeath
1FluffyHaroldcatf2013-06-122020-08-23
2ClawsGwencatm2014-05-17
3Buffydogf2019-12-22
4FangBennydogm2010-02-01
5BowserDianedogm2013-03-022019-08-15
6Chirpybirdf2018-10-11
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值