数据库笔记day01

这篇博客介绍了MySQL数据库的基础知识,包括数据库的安装、SQL语言概述、常见的数据库和表操作,如创建、查询、删除,以及数据的增删改查。此外,还讨论了数据库的命名规范、数据类型和字段约束。

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

一.概述

作用就是用来存储数据和管理数据,本质上就是需要安装MySQL软件.
分类: 关系型数据库MySQL 和 非关系型数据库Redis ,主要观察数据之间的关系

使用

1.安装服务器端: 存数据,管理数据
核心步骤: 设置字符集/编码成 utf-8   , 端口号3306 , 设置服务名称MySQL , 设置密码root
2,安装客户端: 连接服务器,操作服务器里的数据
  • 1,小黑窗口/DOS窗口:
    –从开始菜单里找MySQL/Mariadb,输入密码
    –win+r 然后输入cmd

      	发起MySQL的命令  -u是指定用户名(root) -p是指定密码(自定义的)
      	mysql -uroot -proot
    

    2,图形化的工具:sqlyog

3.数据库的结构

数据库 -> 表(行和列) -> 数据

4.SQL语言
1.概述

结构化查询语言,用来操作数据库的语言,是一种标准.
增删改查里将来发生最多的业务就是: 查 !!!

2.分类

DML是数据操纵语言
DDL是指数据定义语言
DCL是指数据控制语言
DQL是指数据查询语言

二、数据库的常见操作

增删改查 CRUD

1.创建库

创建数据库,数据库名称:cgb2022

mysql> create database cgb2022;

创建

2.查询所有数据库

查看所有数据库

mysql> show databases;

create database cgb2022 DEFAULT CHARACTER SET utf8;

DEFAULT CHARACTER SET utf8是为了防止中文乱码
查询库

3.删除库

删除名称是cgb2022的数据库

mysql> drop database cgb2022;

三、表的常见操作

增删改查 CRUD

1. 使用指定的数据库

mysql> use cgb2022;

在这里插入图片描述

2.创建表

语法:

create table 表名(字段名称 字段类型(字段长度),字段2,字段3,....)
例如:
设计门店表:tb_door

门店表
实现:

mysql> create table tb_door(
    -> id int(11),
    -> door_name varchar(100),
    -> tel varchar(20)
    -> );
    Query OK, 0 rows affected (0.01 sec)
设计订单详情表:tb_order_detail

订单详情表
实现

mysql> create table tb_order_detail(
    -> id int(11),
    -> order_id int(11),
    -> num tinyint(4),
    -> item varchar(30),
    -> price double
    -> );
Query OK, 0 rows affected (0.04 sec)

3.查看表

mysql> show tables;
+-------------------+
| Tables_in_cgb2022 |
+-------------------+
| tb_door           |
| tb_order_detail   |
+-------------------+
2 rows in set (0.00 sec)

4.修改表

添加

mysql> alter table tb_door add column money numeric(7,2);
Query OK, 0 rows affected (0.55 sec)
Records: 0  Duplicates: 0  Warnings: 0

在这里插入图片描述

5.描述表结构

mysql> desc tb_door;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id        | int(11)      | YES  |     | NULL    |       |
| door_name | varchar(100) | YES  |     | NULL    |       |
| tel       | varchar(20)  | YES  |     | NULL    |       |
| money     | decimal(7,2) | YES  |     | NULL    |       |
+-----------+--------------+------+-----+---------+-------+
4 rows in set (0.11 sec)

6.删除表

mysql> drop table tb_door;
Query OK, 0 rows affected (0.00 sec)

四、数据的常见操作

增删改查 CRUD

1.查询记录

mysql> select * from tb_order_detail;
Empty set (0.00 sec)

2.插入记录

语法:
insert into 表名 values(1,2,3,4,5,6)

注意:

  1. 需要设置几个值?要看表里有几个字段
  2. 值的顺序要和字段的顺序保持一致
  3. 如果字段是字符串类型,设置值时必须要有" " ’ '的标记
mysql> insert into tb_order_detail values
    -> (10,20,2,"RedMi note11",1999);
Query OK, 1 row affected (0.31 sec)

在这里插入图片描述

3.修改数据/记录

mysql> update tb_order_detail set num=3 where id=12;
Query OK, 0 rows affected (0.01 sec)
Rows matched: 1  Changed: 0  Warnings: 0

在这里插入图片描述

4.删除记录

mysql> delete from tb_order_detail where id=11;
Query OK, 1 row affected (0.02 sec)

在这里插入图片描述

五、数据库的使用细节

命名规范

  • 字段名必须以字母开头,尽量不要使用拼音
  • 长度不能超过30个字符(不同数据库,不同版本会有不同)
  • 不能使用SQL的保留字,如where,order,group 只能使用如下字符az、AZ、0~9、$ 等
  • Oracle习惯全大写:USER_NAME,mysql习惯全小写:user_name
  • 多个单词用下划线隔开,而非java语言的驼峰规则

数据类型

  1. 整型:int
  2. 小数:double(不精确) / numeric(a,b) / decimal(a,b)–a是数字的位数b是小数位数
  3. 时间: date(年月日) time(时分秒) datetime(年月日时分秒) timestamp(时间戳,毫秒数)
  4. 字符串: char / varchar
  5. 图片: 如果想存入数据库,只会存文件的磁盘路径D:/abc/1.jpg,不是存文件本身
字符
  • char长度固定,不足使用空格填充,最多容纳2000个字符,char(11)存储abc,占11位。查询速度极快但浪费空间
  • varchar变长字符串,最多容纳4000个字符,varchar(11)存储abc,只占3位。查询稍慢,但节省空间。Oracle为varchar2
  • 大文本: 大量文字(不推荐使用,尽量使用varchar替代)

以utf8编码计算的话,一个汉字在u8下占3个字节

注:不同数据库版本长度限制可能会有不同

数字
  • tinyint,int整数类型
  • float,double小数类型
  • numeric(5,2) decimal(5,2)—也可以表示小数,表示总共5位,其中可以有两位小数
  • decimal和numeric表示精确的整数数字
日期
  • date 包含年月日
  • time时分秒
  • datetime包含年月日和时分秒
  • timestamp时间戳,不是日期,而是从1970年1月1日到指定日期的毫秒数
图片
  • blob 二进制数据,可以存放图片、声音,容量4g。早期有这样的设计。但其缺点非常明显,数据库庞大,备份缓慢,这些内容去备份多份价值不大。同时数据库迁移时过大,迁移时间过久。所以目前主流都不会直接存储这样的数据,而只存储其访问路径,文件则存放在磁盘上。

六、字段约束

使用的时间: 通常在设计表创建表时就已经确定了

1.非空约束

哪个字段添加了非空约束,从此,字段值不能为空,使用not null

mysql> create table b(
    -> password varchar(10) not null  #给字段添加非空约束
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> insert into b values('abc');  #password字段设置了值,执行OK
Query OK, 1 row affected (0.04 sec)

mysql> insert into b values(null); #password字段值不能设置成null,否则不符合非空约束
ERROR 1048 (23000): Column 'password' cannot be null

2.主键约束

主键约束
如果为一个列添加了主键约束,那么这个列就是主键,主键的特点是唯一且不能为空。通常情况下,每张表都会有主键。
现象是: 字段的值必须唯一且不能为空,使用primary key

mysql> create table d(
    -> id int primary key,
    -> name varchar(10) not null,
    -> password varchar(10) not null
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> insert into d values(1,'jack','123');
Query OK, 1 row affected (0.01 sec)

mysql> insert into d values(null,'jack','123');
ERROR 1048 (23000): Column 'id' cannot be null
mysql> insert into d values(1,'jack','123');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

主键自增策略
当主键为数值类型时,为了方便维护,可以设置主键自增策略(auto_increment),设置了主键自增策略后,数据库会在表中保存一个AUTO_INCREMENT变量值,初始值为1,当需要id值,不需要我们指定值,由数据库负责从AUTO_INCREMENT获取一个id值,作为主键值插入到表中。而且每次用完AUTO_INCREMENT值,都会自增1. AUTO_INCREMENT=1

mysql> create table g(
    -> id int primary key auto_increment,
    -> name varchar(10),
    -> age int
    -> );
Query OK, 0 rows affected (0.17 sec)
#主键的值不用自己设置null,数据库会自增
mysql> insert into g values(null,'tony',18);
Query OK, 1 row affected (0.01 sec)

mysql> select * from g;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | tony |   18 |
+----+------+------+
1 row in set (0.00 sec)

mysql> insert into g values(null,'mary',20);
Query OK, 1 row affected (0.02 sec)

mysql> select * from g;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | tony |   18 |
|  2 | mary |   20 |
+----+------+------+
2 rows in set (0.00 sec)

3.唯一约束

哪个字段添加了唯一约束,从此,字段值不能相同

#唯一约束:添加后,字段值不能重复
mysql> create table d(
    -> tel char(11) unique  #唯一约束
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> insert into d values('12345678912'); #成功
Query OK, 1 row affected (0.00 sec)

mysql> insert into d values('12345678912'); #报错,值相同啦!
ERROR 1062 (23000): Duplicate entry '12345678912' for key 'tel'

4.混合使用

mysql> create table c(
    -> tel char(11) unique not null
    -> );
Query OK, 0 rows affected (0.02 sec)
mysql> insert into c values(null); #报错,字段值不符合非空约束
ERROR 1048 (23000): Column 'tel' cannot be null
mysql> insert into c values('123'); #正确的,因为满足了非空约束
Query OK, 1 row affected (0.01 sec)
mysql> insert into c values('123'); #报错,字段不符合唯一约束
ERROR 1062 (23000): Duplicate entry '123' for key 'tel'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值