MySQL5.7数据库-增删改查操作

文章目录

    • 数据库介绍
      • 数据库存储数据特点
      • 数据库的分类
    • 语法基础
      • SQL介绍
      • SQL语句主要分为
      • 数据完整性
      • 数据类型
        • 字符串类型
        • 枚举类型
        • 日期类型
        • 约束
    • SQL语句
      • 操作数据库(DDL)
        • 数据库连接
        • 退出数据库
        • 查看已经创建的数据库
        • 查看数据库版本
        • 创建数据库
        • 查看创建数据库的命令
        • 查看当前使用的数据库
        • 使用数据库
        • 删除数据库
      • 操作数据表
        • 查看当前数据库中所有的表
        • 创建表
        • 查看表的描述
        • 查看表的创建语句
        • 练习
        • 添加表字段
        • 修改表字段
        • 删除表字段
        • 练习
      • 操作数据
        • 插入数据
          • 整行插入
          • 指定列中插入数据
          • 指定列中插入多条数据
          • 练习
        • 修改数据
          • 修改数据
          • 练习
        • 删除数据
          • 练习
        • 查询数据
          • 查询整个表数据
          • 查询指定字段数据
          • 查询指定字段数据,并给字段起别名
          • 查询指定字段并去重
          • 练习

数据库介绍

数据库简称DB,实际上就是一个文件集合,是一个存储数据的仓库,本质就是一个文件系统,数据库上按照特定的格式把数据存储起来,用户可以对存储的数据进行增删改查等操作。

数据库存储数据特点

  • 持久化存储
  • 速度快
  • 保证数据的有效性
  • 对程序支持非常友好,容易扩展

数据库的分类

  • 关系型数据库: 可以保证现实生活中的各种关系数据,数据中存储数据以表为单位;主流关系型数据库:MySQL、Oracle、SQL Server等
  • 非关系型数据库:通常用来解决某些特定的需求,比如高并发访问。主流非关系型数据库:Redis、Mongodb、memacache

语法基础

SQL介绍

SQL是结结构化查询语言,是一种用来操作RDBMS(关系型数据库管理系统)的数据库语言,当前关系型数据库都支持使用SQL语言进行操作,也就是说可以通过SQL操作oracle, sql server, mysql等关系型数据库

SQL语句主要分为

  • DDL语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象。
  • DML语句:数据操纵语句,用于添加、删除、更新、和查询数据库记录,并检查数据完整性
  • DCL语句:数据控制语句,用于控制不同数据段直接许可和访问级别的语句。

数据完整性

在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,包括数据字段的类型、约束。

数据类型

整数类型 有符号范围 无符号范围
TINYINT(size) -128~127 0~255
SMALLINT(size) -32768~32767 0~65535
MEDIUMINT(size) -8388608~8388607 0~16777215
INT(size) -2147483648~2147483647 0~4294967295
BIGINT(size) -9223372036854775808~9223372036854775807 0~18446744073709551615
小数类型 描述
FLOAT(size,d) 带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DOUBLE(size,d) 带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。
DECIMAL(size,d) 作为字符串存储的 DOUBLE 类型,允许固定的小数点。(定点数类型)

字符串类型

字符串类型 字节大小 示例
CHAR(size) 0-255 char(3)输入’ab’,实际存储为’ab ‘,输入’abcd’,实际存储为’abc’
VARCHAR(size) 0-65535 varchar(3)输入’ab’,实际存储为’ab’,输入’abcd’,实际存储为’abc’

枚举类型

枚举类型英文为ENUM,对1255个成员的枚举需要1个字节存储;对于25565535个成员,需要2个字节存储。最多允许65535个成员。创建方式:enum(“M”,“F”);

日期类型

数据类型 描述
DATE() 日期。格式:YYYY-MM-DD注释:支持的范围是从 ‘1000-01-01’ 到 ‘9999-12-31’
DATETIME() 日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’
TIME() 时间。格式:HH:MM:SS 注释:支持的范围是从 ‘-838:59:59’ 到 ‘838:59:59’
YEAR() 2 位或 4 位格式的年。4 位格式:1901 到 2155。2 位格式:70 到 69,表示从 1970 到 2069
TIMESTAMP() 时间戳。格式:YYYY-MM-DD HH:MM:SS注释:支持的范围是从 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-09 03:14:07’ UTC

注意

  • decimal表示定点小数,如decimal(5,2)表示共存5位数,小数占2位。不写则默认为decimal(10,0)
  • char表示固定长度的字符串,如char(3),如果填充’ab’时会补一个空格为’ab ’
  • varchar表示可变长度的字符串,如varchar(3),填充’ab’时就会存储’ab’
  • 对于图片、音频、视频等文件,不存储在数据库中,而是上传到某个服务器上,然后在表中存储这个文件的保存路径
  • 枚举类型不区分大小写

约束

  • 主键约束(primary key):它能够唯一确定表中的一条记录,也就是我们通过给某个字段添加约束,就可以使得字段不重复且不为空。
  • 自增约束(auto_increment)
  • 惟一约束(unique):此字段的值不允许重复
  • 非空约束(not Null):此字段不允许填写空值
  • 默认约束(default):当不填写此值时会使用默认值,如果填写时以填写为准
  • 外键约束(foreign key):对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常

SQL语句

操作数据库(DDL)

数据库连接

mysql -uroot -p
enter password : 密码

退出数据库

exit
quit

查看已经创建的数据库

show databases;

查看数据库版本

select version()

注意

  1. mysql不严格区分大小写
  2. 分号作为结束符,必须写

创建数据库

  • 当创建的数据库的名字中含有``,直接使用create database 数据库名字;是不符合数据库创建的标准

  • 当创建数据库中有数据库名字有单横线时,需要使用``将数据库名字进行包裹起来,如下

create database 数据库名字;
create database 数据库名字 charset=utf8;
create database `数据库名字`;
create database if not exists `数据库名字` charset=utf8;

查看创建数据库的命令

show create database 数据库名;

查看当前使用的数据库

select database();

使用数据库

use 数据库名字;

删除数据库

drop databases 数据库名字;

操作数据表

查看当前数据库中所有的表

show tables;

创建表

create table 数据表名(字段 类型 约束[字段 类型 约束])

查看表的描述

desc 数据表名

查看表的创建语句

show create table 数据表名;

练习

  • 创建 students 表(id、name、age、high、gender、cls_id)
  • 创建 classes 表(id、name)
-- students如下:
-- primary key : 主键
-- not null : 不允许为空
-- auto_increment : 自增
-- tinyint : 小整型
-- unsigned : 无符号的
-- default : 默认值
-- enum : 枚举类型
-- engine=InnoDB default charset=utf8 : 指定引擎和指定字符集编码
create table students(id int primary key not null auto_increment, name varchar(10), age tinyint unsigned default 18, high float(5,2), gender enum("男", "女", "保密") default "保密", cls_id int) engine=InnoDB default charset=utf8;

-- classess如下:
create table classes(id int primary key not null auto_increment, name varchar(30)) engine=InnoDB default charset=utf8;

添加表字段

alter table 数据表名 add 字段 类型
-- alter table classes add age tinyint;

修改表字段

-- 不重命名
alter table 数据表名 modify 字段 类型; 
-- alter table classes modify age int;

-- 将字段重命名
alter table 数据表名 change 原字段名 新字段名 类型及约束;
-- alter table classes change age age_int tinyint;

删除表字段

alter table 数据表名 drop 字段;
-- alter table classes drop age_int;

练习

• 添加字段
  • 字段名称:birthday   
  • 字段类型:DATETIME  
alter table classes add birthday datetime;

• 修改字段
	• 字段类型:DATE
alter table classes modify birthday date;

• 修改字段
	• 字段名称:birth
	• 字段类型:DATE	
alter table classes change brithday birth date;

• 删除该字段
alter table classes drop birth;

操作数据

插入数据

整行插入
- 当使用整行插入数据时,必须要一一对应,否则将会出错,当ID为自增时,也是需要插入的,如下:
insert into 数据表名 values(值1,值2,值3);
insert into students values(1, "Small-J", 18, 175.12, '男', 1);

指定列中插入数据
insert into tablename(字段1,字段2) values (值1,值2);
insert into students values(2,"Senven-J", 19, 175.15, '男', 2);

指定列中插入多条数据
insert into tablename(字段1,字段2) values (值1,值2),(值1,值2);
insert into students(name, high, cls_id) values ('Small-J2', 178.12, 2);

练习
-- students表中添加整行数据
insert into students values(1, "Small-J", 18, 175.12, '男', 1);

-- students表中添加name,gender两个字段的数据
insert into students (name, gender) values ('demo', 2);

-- students表中同时添加多行数据
insert into students (name, gender) values ('demo1', 3), ('demo2',2);

修改数据

修改数据
update 数据表名 set 字段1=新, 字段-新值[where 条件];
练习
-- 将姓名全部修改为jack
update students set name="jack";

-- 将性别为女的名字修改为rose
update students set name="rose" where gender="女";

-- 将id为3的年龄修改为22,并且性别改为男
update students set age=22, gender="男" where id=3;

删除数据

delete from 数据表名 [where 条件];
练习
-- 将姓名为rose的数据删除
delete from students where name="rose";

-- 清空表数据
delete fromd students;

查询数据

查询整个表数据
select * from 数据表名 -- 在实际应用开发中,不推荐使用
查询指定字段数据
select 字段1,字段2 from 数据表名;
select name, gender from students;
查询指定字段数据,并给字段起别名
select 字段1 as 别名, 字段2 as 别名 from 数据表名;
select name as "姓名", gender as "性别" from students;
查询指定字段并去重
select distinct 字段1 from 数据表名;
练习
-- 查询students表所有数据
select * from students;

-- 查询students表中name与gender字段的数据
select name, gender from studnets;

查询students表中name字段的数据并且去重
select distinct name as "姓名" from students;

你可能感兴趣的:(MySQL,数据库,mysql)