day03 mysql


使用数据库可以高效的有条理的储存数据:


1、可以结构化存储大量的数据


2、可以有效的保持数据的一致性、完整性。


l SQL分类:


n 数据定义语言:简称DDL(Data Definition Language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等


数据操作语言:简称DML(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等


n 数据控制语言:简称

 

DCL(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户。


数据查询语言:简称DQL(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where


分类

类型名称

说明

整数类型

tinyInt (255) 最大表示 127

很小的整数  一个字节

Smallint(65535)

小的整数  两个字节

Mediumint(16777215)

中等大小的整数   三个字节

int(integer)(4294967295)

普通大小的整数   四个字节

 

bigint

八个字节

小数类型

float

单精度浮点数  4字节

double

双精度浮点数  8字节

decimal(m,d)

压缩严格的定点数  decimal(10,2)

日期类型

year

YYYY  1901~2155

time

HH:MM:SS  -838:59:59~838:59:59

date

YYYY-MM-DD 1000-01-01~9999-12-3

datetime

YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59

timestamp

YYYY-MM-DD HH:MM:SS  1970~01~01 00:00:01 UTC~2038-01-19 03:14:07UTC

文本、二进制类型

char(m)

m为0~255之间的整数定长 char(10) tom

varchar(m)

m为0~65535之间的整数变长 varchar(10) tom

tinyblob

允许长度0~255字节

blob

允许长度0~65535字节

mediumblob

允许长度0~167772150字节

longblob

允许长度0~4294967295字节

tinytext

允许长度0~255字节

text

允许长度0~65535字节

mediumtext

允许长度0~167772150字节

longtext

允许长度0~4294967295字节

varbinary(m)

允许长度0~M个字节的变长字节字符串

binary(m)

允许长度0~m个字节的定长字节字符串


day03_mysql基础

今日目标

  • SQL语句

  • DDL之数据库操作

  • DDL之表操作

  • DML之数据操作

  • SQL约束

  • DQL数据查询语言

SQL语句

  • SQL的定义

    结构化查询语言(Structured Query Language)简称SQL,是关系型数据库管理系统都需要遵循的规范,是数据库认识的语句。

  • SQL 的语言分类定义

    • DDL 数据定义语言

      • create database [if not exists] databasename

      • drop database [databasename]

      • create table t_user (....)

      • alter table t_user

      • drop table t_user

    • DML 数据操作语言

      • 数据进行 增 删 改操作

    • DCL 数据控制语言

      • grant 赋权 revoke 收回权限

    • DQL 数据查询语言(*)

      • select

  • 案例

    # 创建一个数据库
    create database if not exists beijing50;
    # 删除数据库
    drop database beijing50;
  • SQL 的通用语法

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

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

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

    例如:SELECT * FROM user。

    • 同样可以使用/**/的方式完成注释 -- #

  • SQL 的数据类型


  •  

     

DDL之创建数据库

  • 创建数据库

    # 创建数据库
    create database if not exists beijing50;
  • 查看所有数据库

    # 查看所有数据库
    show databases;
  • 删除数据库

    # 删除数据库
    drop database hahah;
  • 使用数据库

    # 使用某个数据库
    use beijing50;
    # 查看当前的数据库
    select database();

DDL之表操作

  • 案例

    # 创建一个 分类表
    create table if not exists category(
    cid varchar(10) primary key,
    cname varchar(200)
    );
    # 查看所有的表
    show tables;
    # 查看指定的表结构
    desc category;
  •  

     

# 删除 分类表
drop table category;

# 修改表结构——新增字段
alter table category add `desc` varchar(255);
# 修改表结构——修改字段
alter table category change `desc` description varchar(255);
# 修改表结构——修改字段类型
alter table category change description description varchar(200);
# 修改表结构——删除字段
alter table category drop description;

# 修改表名称
rename table category to cat;

image-20200920105534978

DML 数据操作语言

dml 数据操作语言之insert操作

-- 向表中插入某些字段
insert into 表 (字段1,字段2,字段3..) values(值1,值2,值3..);
-- 向表中插入所有字段,字段的顺序为创建表时的顺序
insert into 表 values(值1,值2,值3..)
  • 注意

    • 值与字段必须对应,个数相同,类型相同

    • 值的数据大小必须在字段的长度范围内

    • 除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)’’ “”``

    • 如果要插入空值,可以不写字段,或者插入 null。

  • 案例操作

    # 1.向 cat 插入一条记录 cid:001 cname:服装
    INSERT INTO cat(cid,cname) values('c001','服装');
    # 2.不写字段
    INSERT INTO cat values('c002','食品');
    # 3. 某个字段cname 为空
    INSERT INTO cat(cid) values('c003');
    # 4. 不写字段
    INSERT INTO cat values('c004',null);
    # 5.赋多个值
    INSERT INTO cat values('c005','化妆品'),('c006',null),('c007','婴幼儿产品');

    dml 数据操作语言之update操作

  • 更新 语句的操作概念

    用来修改指定条件的数据,将满足条件的记录指定列修改为指定值。

  • 更新语句的定义

    # 修改 c003 这条语句 cname 为家电
    update cat SET cname='家电' where cid='c003';
    # 修改多个字段,中间需要使用 英文 ,
    update cat SET cname='手机',description='华为mate30' where cid='c006';
    # 修改某个列所有值
    update cat SET is_delete=0;

     

dml 数据操作语言之delete操作

  • 数据的删除操作

  • 删除语句

    # 删除某一行数据
    delete from cat where cid='c001';
    # 删除所有的数据
    delete from cat;
    # truncate 删除数据表
    truncate table cat;
  • truncate 和 delete 删除操作的区别

    1. truncate 操作是 DDL 操作 delete 是 DML 操作

    2. delete 删除的会保存到日志中,可以恢复,truncate操作是不能恢复的

    3. delete删除按行来删除的,truncate 是按表来删除

    4. auto_increment (自增字段) delete 操作之后再插入数据会不会从1开始,truncate操作会从1开始。

# 创建一个 cid 是自增的字段
create table if not exists cate(
cid int primary key auto_increment,
cname varchar(50)
);
insert into cate(cname) values('家电'),('手机'),('服装');
#
insert into cate values(null,'奢侈品');
# delete 清空表 cate ,自增字段接着清空前的 cid 值
delete from cate;
# 插入一条值
insert into cate values(null,'奢侈品');
# truncate 清空表 cate 自增字段从 1 开始
truncate table cate;
# 插入一条值
insert into cate values(null,'奢侈品');
  • delete 

  •  

     

  • truncate 后插入数据

  •  

     

 

SQL 约束

  • primary key 主键约束 ,会自动生成主键索引,唯一、不能空、每张表中只能有一个。

  • not null 非空约束,某一列数据不能为空,为空就报空值错误

  • unique 唯一约束,保证某一列数据不能重复

  • foreign key 外键约束,多表关联中(一对多中),保证数据完整性的约束。

主键约束案例

# 创建主键约束方法有三种
# 1.建表时创建主键
Create table if not exists t_student(sid int primary key auto_increment,
sname varchar(20)
);
# 2.创建表的时候创建主键约束
create table if not exists t_student_1(
  sid int auto_increment,
  sname varchar(20),
  # 格式:[constraint 名称] primary key (字段列表)
  constraint c_student_sid primary key (sid)
);
# 3.创建表之后通过修改表创建主键约束
create table if not exists t_sutdent_2(
firstname varchar(20),
secondname varchar(20),
age int,
descr text
);
ALTER TABLE t_sutdent_2 add primary key(firstname,secondname);

# 删除主键
Alter table t_sutdent_2 drop primary key;

# 自动增长列
CREATE TABLE Persons4
(
Id      int PRIMARY KEY AUTO_INCREMENT,
LastName  varchar(255),
FirstName varchar(255),
Address   varchar(255),
City      varchar(255)
)

我们可以在表中使用 auto_increment(自动增长列)关键字,自动增长列类型必须是整型,自动增长列必须为键(一般是主键)。


 


# 可以修改默认自增的数字大小
alter table persons4 auto_increment=50000;
# 需求: 如果当前值5,将auto_increment 修改成50000,又插入一条数据 id = 6,再新增一条数据,不指定id。
1
2
3
4
5
6
7
50000
结论: 不指定id的话,当前生成的 id 为当前记录表中的最大id

 

 

 

 

 

 

 

非空约束案例

NOT NULL 约束强制列不接受 NULL 值。

NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

# 创建persons5表
CREATE TABLE persons5
(
id  int  NOT NULL,
lastName  varchar(255) NOT NULL,
firstName varchar(255),
address   varchar(255),
city      varchar(255)
)
# 插入一条数据查看报错信息
INSERT INTO pers

 

ons5(id,lastName) values(1,null);

 

 

 

唯一约束案例

# 创建persons6 表
drop table if exists persons6;
CREATE TABLE persons6
(
id      int UNIQUE,
lastName  varchar(255) NOT NULL,
firstName varchar(255),
address   varchar(255),
city      varchar(255)
);
INSERT INTO persons6(id,lastName,firstName) values(1,'zhang','san');
INSERT INTO persons6(id,lastName,firstName) values(1,'li','si');

 

 

总结:

  • 主键约束和唯一约束共同点:都不能重复

  • 主键约束和唯一约束的区别:

    1. 主键约束值不能为空,唯一约束可以为空

    2. 在一张表中主键只能有一个,唯一约束可以有多个

DQL 数据查询语言

  • 数据表准备

    # 创建product 表
    create table product(
    pid int primary key,
    pname varchar(20),
    price double,
    category_id varchar(32)
    );

    # 插入准备的数据
    INSERT INTO product(pid,pname,price,category_id) VALUES(1,'联想',5000,'c001');
    INSERT INTO product(pid,pname,price,category_id) VALUES(2,'海尔',3000,'c001');
    INSERT INTO product(pid,pname,price,category_id) VALUES(3,'雷神',5000,'c001');

    INSERT INTO product(pid,pname,price,category_id) VALUES(4,'杰克琼斯',800,'c002');
    INSERT INTO product(pid,pname,price,category_id) VALUES(5,'真维斯',200,'c002');
    INSERT INTO product(pid,pname,price,category_id) VALUES(6,'花花公子',440,'c002');
    INSERT INTO product(pid,pname,price,category_id) VALUES(7,'劲霸',2000,'c002');

    INSERT INTO product(pid,pname,price,category_id) VALUES(8,'香奈儿',800,'c003');
    INSERT INTO product(pid,pname,price,category_id) VALUES(9,'相宜本草',200,'c003');
    INSERT INTO product(pid,pname,price,category_id) VALUES(10,'面霸',5,'c003');

    INSERT INTO product(pid,pname,price,category_id) VALUES(11,'好想你枣',56,'c004');
    INSERT INTO product(pid,pname,price,category_id) VALUES(12,'香飘飘奶茶',1,'c005');
    INSERT INTO product(pid,pname,price,category_id) VALUES(13,'海澜之家',1,'c002');

数据查询的语法

  • 语法

    select [distinct]
    * 或者
    列名,列名
    from 表
    where 条件
    Group by 分组字段
    Having 聚合字段条件
    Order by 排序字段
    Limit 分页字段
  • 简单案例

    # 查询 product 所有的数据
    select * from product;
    # 根据字段名称查询指定的字段值
    select pid,pname,price from product;
    # 使用别名进行查询
    ## 1.表别名
    select p.pid,p.pname
    from product as p
    ## 2.列别名 可以加 as 或者不加as 需要使用空格
    select pid as 产品id , pname 产品名称
    from product;
    # 读取唯一的值
    select distinct price
    from product;
    # 将所有的商品 +100 显示
    select pid,pname,price+100 as 上调之后的价格
    from product;
  • 条件查询案例

    模糊查询中 like

    % 代表者0~任意字符匹配

    _ 代表 一个字符

    #查询商品名称为“花花公子”的商品所有信息:
    select * from product where pname='花花公子';
    #查询价格为800商品
    select * from product where price=800;
    #查询价格不是800的所有商品
    select * from product where price != 800;
    select * from product where price <> 800;
    select * from product where not(price=800);
    #查询商品价格大于60元的所有商品信息
    select * from product where price>60;
    #查询商品价格在200到1000之间所有商品
    select * from product where price>=200 and price <=1000;
    select * from product where price between 200 and 1000;
    #查询商品价格是200或800的所有商品
    select * from product where price=200 or price=800;
    select * from product where price in (200,800);
    #查询含有'霸'字的所有商品
    select * from product where pname like '%霸%';
    #查询以'香'开头的所有商品
    select * from product where pname like '香%';
    #查询第二个字为'想'的所有商品
    select * from product where pname like '_想%';
    #匹配四个字的所有商品
    select * from product where pname like '____';
    #查询没有分类的商品
    select * from product where category_id is null;
    #查询有分类的商品
    select * from product where category_id is not null;

 

问题集锦

  • 创建数据库

    create database abc;
    create schema abc;
    # 不是 create database | schema abc;
  • 数据类型怎么理解

    image-20200920142725257

  • 创建表指定字符串为 auto_increment 标识符出错。

     

     

    错误原因是,创建的字段必须是整数类型,整数类型自增。

完毕。

posted @ 2020-09-20 22:34  十一vs十一  阅读(194)  评论(0编辑  收藏  举报