mysql入门

数据库简介

  • 用途:用于存储生活中的一切数据,如:身份、住宿、票务、网站、…
  • 分类:
  • 关系型数据库:MySQL、oracle、SQL server、…
  • 非关系型数据库:Redis、MongoDB、…
  • 概念:数据库服务器、数据库、数据表、一条数据(记录)、一列数据(字段)
  • SQL:Structured Query Language,结构化查询语言
  • 命令:
  • 数据定义语言(DDL):创建、删除、修改等
  • 数据操作语言(DML):增、删、改
  • 数据查询语言(DQL):查
  • 数据控制语言(DCL):授权、取消授权
  • 数据事务语言(DTL):开启事务、提交事务、操作回滚

数据定义语言(DDL)

  • 查看库:show databases;,会显示连接的数据库服务器上所有的数据库
  • 创建库:create database test;,创建数据库test
  • 删除库:drop database test;,删除数据库test
  • 选择库:use test;,选择数据库test
  • 查看当前数据库:
  • show tables;
  • select dabases();
  • 查看表:show tables;,查看当前数据库下的所有数据表
  • 创建表:create table user(username varchar(20), password char(32));
  • 查看表结构:desc user;
  • 查看创建方式:
  • 查看库:show create database test;
  • 查看表:show create table user;
  • 删除表:drop table user;
  • 指定字符集及存储引擎:
  • 创建时指定:create table user()engine=InnoDB default charset=utf8;
  • 修改配置文件:/etc/mysql/mysql.conf.d/mysqld.cnf

    [mysqld]

    -字符集
    character-set-server=utf8
    -存储引擎
    default-storage-engine=INNODB
    必须重启服务后才会生效
  • 修改表结构alter
  • 修改字段类型:alter table user modify username varchar(32);
  • 修改字段名称:alter table user change password pwd char(50);
  • 添加新的字段:
  • 默认在末尾添加:alter table user add age int(3);
  • 指定字段后添加:alter table user add email varchar(30) after pwd;
  • 在开头进行添加:alter table user add id int(11) first;
  • after、first也可用于modify、change操作
  • 删除指定字段:alter table user drop age;
  • 修改表的名字:alter table user rename new_user;

数据类型

  • 整型
    符号 说明
    tinyint 1个字节
    smallint 2个字节
    mediumint 3个字节
    int 4个字节
    bigint 8个字节
    需要指定位数,如:int(11)
  • 浮点数
    符号 说明
    float(m, d) 单精度浮点型,4个字节,m表示总位数,d表示小数位数
    double(m, d) 双精度浮点型,8个字节,用法同上
    decimal(m, d) 以字符串的形式存储浮点数,多用于金融相关应用
  • 字符串
    符号 说明
    char 定长字符串,0~255个字节
    varchar 变长字符串,0~65535个字节
    需要指定长度, 如:varchar(20)
  • 时间日期
    符号 说明
    date 日期,格式:2019-04-01
    time 时间,格式:14:36:52
    datetime 日期时间,格式:2019-04-01 14:36:52
    timestamp 时间戳
    year 年,只占用一个字节,年份1901-2155
  • 复合类型
    符号 说明
    set 集合类型,格式:set(s1, s2, …, s63),最多63,0表示错误
    enum 枚举类型,格式:enum(e1, e2, …, e65535),最多65535,0表示错误
  • 字段修饰
    符号 说明
    unsigned 无符号数
    zerofill 高位填充0,防止出现负数
    default 默认值
    not null 不能为空
    auto_increment 自动增加1,用于整型字段,经常集合主键一起使用
  • 字符集
  • 查看所有支持的字符集:show character set;
  • 存储引擎
  • 查看所有的存储引擎:show engines;
  • 常用存储引擎:InnoDB、MyISAM
    存储引擎 说明
    InnoDB .frm表结构信息,.ibd表数据信息
    MyISAM .frm表结构信息,.MYD表数据信息,.MYI表索引信息
  • 说明:
  • 配置选项datadir决定了数据库存放的位置
  • 一个数据库对应存储目录中的一个文件夹
  • 索引管理
  • 说明:简介理解就是一本书的目录,提高读取效率,但也不是越多越好。
  • 分类:
    索引 说明
    普通索引 index,最基本的索引
    唯一索引 unique,修饰的字段不能有重复的值
    主键索引 primary key,是一个特殊的唯一索引,一张表最多只能有一个字段
    全文索引 fulltext,对全局数据添加索引
  • 示例:
    -添加索引
    alter table new_user add index(email);
    alter table new_user add unique(username);
    alter table new_user add primary key(id);
    -删除索引
    alter table new_user drop index email;
  • 创建表示指定索引:
    create table user(
    id int auto_increment,
    name varchar(20),
    primary key(id),
    unique(name)
    )engine=innodb default charset=utf8;

数据操作语言(DML)

  • 说明:在绝大多数的数据库操作中,执行的都是增删改查操作(CURD)。
  • 准备:准备一张用于数据测试的表star
    create table star(
    id int auto_increment,
    name varchar(20) not null,
    money float not null,
    province varchar(20) default null,
    age tinyint unsigned not null,
    sex tinyint not null,
    primary key(id)
    )engine=innodb default charset=utf8;
  • 插入数据
  • 方式一:不指定字段,添加数据时需要指定所有的字段,如:
    insert into star values(1, ‘xxx’, 5000000, ‘河南’, 18, 1);
    可以一次性插入多条数据,每条数据都需要使用一个()包括起来,之间使用逗号分割
  • 方式二:指定字段,只需要传递指定字段的值,通常使用这种方式
    insert into star(name, money, age, province, sex)
    values(‘yyy’, 8000000, 34, ‘上海’, 2);
    insert into star(name, money, age, province, sex)
    values (‘AAA’, 6000000, 32, ’ 河北’, 2),
    (‘HHH’, 3000000, 23, ‘江苏’, 1);
    插入数据的字段值与前面指定的顺序要一致,与数据表中的字段顺序无关。
  • 说明:插入数据时,可以不要传递的字段
  • 自增的字段
  • 有默认值的
  • 可以为空的
  • 修改数据
  • 示例:update star set age=24, money=7000000 where id=1;
  • 警告:修改操作一定不要忘记添加条件,否则后果自负。
  • 删除数据
  • 示例:delete from star where id=4;
  • 警告:删除操作一定不要忘记添加条件,否则后果自负。
  • 使用:基本不会做物理删除,大多使用逻辑删除(设置某些字段的值)。
  • 查询数据:select * from star;