
数据库通俗来讲就是一个存储数据的仓库,数据库本质上就是一个软件。一个程序
常见的数据库有哪些?
关系型数据库
非关系型数据库
开发中如何选择?
MySQL 是一个关系型数据库,其实本质上就是一个软件、一个程序
查看数据库
show databases;复制成功
MySQL 默认的数据库:
创建数据库-表
# 创建数据库 create database coderhub; # 查看数据库 show databases; # 指定要使用的数据库 use coderhub; # 查看当前正在使用的数据库 select database(); # 查看数据库中的表 show tables; # 创建表 create table users(name varchar(10), age int, height double); # 查看表中数据 select * from users; # 向表中插入数据 insert into users (name, age, height) values ('kobe', 40, 1.98);复制成功
我们希望数据库(特别是在程序中),就需要有和数据库沟通的语言,这个言就是 SQL:
事实上,常见的关系型数据库SQL语句都是比较相似的,所以你学会了MySQL 中的 SQL 语句,之后去操作比如 Oracle 或者其他的关系型数据库,也是非常方便的
SQL 语句的常用规范:
CREATE、TABLE、SHOW 等SQL 语句的分类:
常见的 SQL 语句分为4类
DDL (Data Definition Language):数据定义语言
DML (Data Manipulation Language):数据操作语言
DQL (Data Query Language):数据查询语言
DCL (Data Control Language):数据控制语言
数据库的操作
# 查看所有数据库 show databases; # 选择某一个数据库 use coderhub; # 查看当前正在使用的数据库 select database(); # 创建一个新的数据库 -- create database douyu; # 首先判断数据库是否已存在,避免重复创建报错 create database if not exists douyu; # 指定字符集utf8mb4、排序规则utf8mb4_0900_ai_ci create database if not exists huya default character set utf8mb4 collate utf8mb4_0900_ai_ci; # 删除数据库 drop database if exists douyu; # 修改数据库的编码 alter database huya character set = utf8 collate = utf8_unicode_ci;复制成功
# 查看所有的表 show tables; # 新建表 create table if not exists `students` ( `name` varchar(10), `age` int, `score` int ); # 删除表 drop table if exists `moment`; # 查看表的结构 desc `students`; # 查看创建表的SQL语句 show create table `students`; -- CREATE TABLE `students` ( -- `name` varchar(10) DEFAULT NULL, -- `age` int DEFAULT NULL, -- `score` int DEFAULT NULL -- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci复制成功
(关于数字类型的总结) MySQL数据类型 - MySQL教程™
数字类型
INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINTFLOAT, DOUBLE (FLOAT 是 4 个字节,DOUBLE 是8个字节)DECIMAL, NUMERIC (DECIMAL是NUMERIC的实现形式)日期和时间类型
YEAR 以 YYYY 格式显示值,范围 1901到2155,和 0000
DATE 类型用于具有日期部分但没有时间部分的值
DATE 以格式 YYYY-MM-DD 显示值1000-01-01 到 9999-12-31DATETIME 类型用于包含日期部分和时间部分的值
DATETIME 以格式 YYYY-MM-DD hh:mm:ss 显示值1000-01-01 00:00:00 到 9999-12-31 23:59:59TIMESTEMP 数据类型被用于包含时间和日期部分的值
TIMESTAMP 以格式 YYYY-MM-DD hh:mm:ss 显示值1970-01-01 00:00:01 到 2038-01-19 03:14:07 **另外:DATETIME 或 TIMESTAMP 值可以包括在高达微秒(6位)精度的后小数秒一部分
DATETIME 表示的范围可以是 1000-01-01 00:00:00.000000 到 9999-12-31 23:59:59.999999字符串(字符和字节)类型
CHAR 类型在创建表时为固定长度,长度可以是0 到 255 之间的任何值VARCHAR 类型的值是可变长度的字符串,长度可以指定为 0 到 65535 之间的值BINARY 和 VARBINARY 类型用于存储二进制字符串,存储的是字节字符串BLOB 用于存储大的二进制类型TEXT 用于存储大的字符类型空间类型
JSON 数据类型
主键 PRIMARY KEY
一张表中,我们为了区分每一条记录的唯一性,必须有一个字段永远不会重复,并且不会为空的,这个字段我们通常将它设置为主键:
NOT NULL 的,如果没有设置 NOT NULL,那么 MySQL 也会隐式的设置为 NOT NULLPRIMARY KEY(key_part, ...),我们一般称之为联合主键唯一:UNIQUE
create table if not exists `students` ( `name` varchar(10), `age` int, `score` int, `height` decimal(10, 2), `birthday` timestamp, `phonenumber` varchar(20) unique );复制成功
UNIQUE 来约束UNIQUE 约束的字段在表中必须是不同的UNIQUE 索引允许 NULL 包含的列有多个值 NULL不能为空:NOT NULL
NOT NULL 来约束默认值:DEFAULT
DEFAULT 来完成自动递增:AUTO_INCREMENT
AUTO_INCREMENT 来完成外键约束也是最常用的一种约束手段 (多表关系)