MySQL数据库/表的管理

0 阅读10分钟

MySQL数据库/表的管理

SQL语句规范:

  • 命令不区分大小写,表名和库名区分大小写

  • 语句是以;结束

  • 查看帮助 HELP CREATE DATABASE;

数据库:存放数据的仓库 -->目录

数据表:实际存放数据的货架 -->文件

数据表的结构:

列(column)|字段

Student表

  • name列 -> 类型(字符串)
  • age列 -> 类型 (整型)

行(row)

  • 代表一个具体的数据记录
  • 行中的数据要符合每一列的约束

常用的基本指令

-- 查看版本
select version();
-- 查看字符集
show variables like '%character%';
-- 查看连接对象
show processlist\G
-- 查看最后一次警告
show warnings;

数据库的操作

查看数据库

show databases;
show create database test1;

创建数据库

create database test1;
create database if not exists test1;
create database if not exists test2 default character set utf8mb4; -- 可设置字符集,默认utf8

使用数据库

use mysql;

修改数据库

alter database test5 default character set utf8mb4;

删除数据库

drop database test5;
drop database if exists test5;

数据表的操作

表创建是最重要

  • 列名 小写 + 下划线
  • 数据类型 1.可以优化存储空间 2.考虑可拓展性
  • 约束信息 1.可以提升查询效率 2.保证数据完整性

查看数据表

show tables;
-- 查看创建表语句
show create table table_name;
-- 查看表结构
desc table_name;

创建数据表

create table [if not exists] table_name(
	column_name1 datatype  [约束信息]  [comment],
	column_name2 datatype  [约束信息]  [comment]
)

插入数据表

-- 插入一条
insert into table_name values (column1,column2,column3);
-- 按字段插入
insert into table_name(column_name1,column_name2,column_name3) values (column1,column2,column3);
-- 一次性插入多条数据
insert into table_name values (column1,column2,column3),(column1,column2,column3);

删除数据表

drop table if exists table_name;

修改数据表

新增列
alter table table_name add <列名 数据类型>  [FIRST |AFTER 列名];
删除列
alter table table_name drop column  column_name;
修改列
-- 修改列名
alter table table_name rename column_name_old column_name_new;
-- 修改类型
alter table table_name modify <列名  列类型>;
-- 修改列
alter table table_name change column1 column2 列类型;
-- 增加约束
alter table table_name add constraint <约束名> <约束类型>;
-- 修改表名
alter table table_name rename new_table_name;
复制数据表
create table new_classes like class;  -- 只复制结构(含索引、主键等,但不含数据)
create table new_classes2 as select * from classes;  -- 复制数据+基本结构,但**不复制主键、索引、自增属性等**

数据类型

整型

整型所占字节
tinyint1个字节
smallint2个字节
mediumint3个字节
int4个字节
bigint8个字节

浮点型

浮点型所占字节
float4个字节
double8个字节
decimal按实际存储

字符型

字符型说明
char(n)定长字符串 最多255个字符
varchar(n)可变长字符串 最多65535个字符

文本型

文本型说明
tinytext小文本
mediumtext中文本
text默认文本
longtext大文本

日期时间

日期时间型字节
date3个字节 yyyy-MM-dd
time3个字节 HH:mm:ss
datetime8个字节 yyyy-MM-dd HH:mm:ss
year1个字节 yyyy
timestamp4字节 yyyy-MM-dd HH:mm:ss 时间戳

枚举集合

枚举和集合说明
enum('男','女')多个里面选择一个
set('篮球','羽毛球','乒乓球')多个里面可选择多个

二进制

二进制说明
binary存放定长二进制数据
varbinary存放变长二进制数据
blob存放二进制文本

约束

  • 非空约束(NOT NULL
  • 唯一约束(UNIQUE
  • 默认值约束(DEFAULT
  • 主键约束(PRIMARY KEY
  • 外键约束(FOREIGN KEY
主键的好处:
  • 会创建主键索引 -> 可以提高查询速度
  • 创建表与表之间关系
  • 可以进行数据完整性和合法性检查
外键
create table class (class_id varchar(20) primary key ,class_name varchar(20) );

create table student(student_id varchar(20) primary key , student_name varchar(10),class_id varchar(20), foreign key (class_id ) references class(class_id)); 

外键的优点

  • 在插入/更行数据时进行约束检查,如果不合法就报错

  • 减少数据冗余,节省磁盘空间

  • 便于维护

外键的缺点

  • 每次都进行检查会降低数据库的性能

在高并发或分布式系统中,出于性能和解耦考虑,部分企业选择不在数据库层面使用外键,而是在应用层通过代码维护数据一致性。但这并不意味着外键无用——在单体应用或对数据一致性要求极高的场景中,外键仍是重要工具。

create table student(student_id varchar(20) primary key , student_name varchar(10),class_id varchar(20), foreign key (class_id ) references class(class_id))  on delete XXX; 
xxx    -> restrict  限制动作(默认)
       -> cascade 级联动作(全部删除)
       -> set null 把数据设为空

一些基础知识

SQL语句可以写在SQL文件里面再执行(事务)

MySQL设置:宽松模式和严格模式

宽松模式:有些设置不符合本身的要求,按默认方式处理

严格模式: 有些设置不符合设置要求,直接报错处理(MySQL8默认设置)

字符串 charvarchar的区别,如何选择字符串类型?

char是固定长度的,适合固定长度的数据(学号,手机号,身份证)

varchar 是可变长的数据类型,会根据计算实际数据来存储 适合场景,存储的数据有一定范围,长度不固定

datetimetimestamp 的区别?

datetime 与时区无关

timestamp 与时区有关(调整市区里面的值会发生变化)

MySQL数据库/表的管理

SQL语句规范:

  • 命令不区分大小写,表名和库名区分大小写

  • 语句是以;结束

  • 查看帮助 HELP CREATE DATABASE;

数据库:存放数据的仓库 -->目录

数据表:实际存放数据的货架 -->文件

数据表的结构:

列(column)|字段

Student表

  • name列 -> 类型(字符串)
  • age列 -> 类型 (整型)

行(row)

  • 代表一个具体的数据记录
  • 行中的数据要符合每一列的约束

常用的基本指令

-- 查看版本
select version();
-- 查看字符集
show variables like '%character%';
-- 查看连接对象
show processlist\G
-- 查看最后一次警告
show warnings;

数据库的操作

查看数据库

show databases;
show create database test1;

创建数据库

create database test1;
create database if not exists test1;
create database if not exists test2 default character set utf8mb4; -- 可设置字符集,默认utf8

使用数据库

use mysql;

修改数据库

alter database test5 default character set utf8mb4;

删除数据库

drop database test5;
drop database if exists test5;

数据表的操作

表创建是最重要

  • 列名 小写 + 下划线
  • 数据类型 1.可以优化存储空间 2.考虑可拓展性
  • 约束信息 1.可以提升查询效率 2.保证数据完整性

查看数据表

show tables;
-- 查看创建表语句
show create table table_name;
-- 查看表结构
desc table_name;

创建数据表

create table [if not exists] table_name(
	column_name1 datatype  [约束信息]  [comment],
	column_name2 datatype  [约束信息]  [comment]
)

插入数据表

-- 插入一条
insert into table_name values (column1,column2,column3);
-- 按字段插入
insert into table_name(column_name1,column_name2,column_name3) values (column1,column2,column3);
-- 一次性插入多条数据
insert into table_name values (column1,column2,column3),(column1,column2,column3);

删除数据表

drop table if exists table_name;

修改数据表

新增列
alter table table_name add <列名 数据类型>  [FIRST |AFTER 列名];
删除列
alter table table_name drop column  column_name;
修改列
-- 修改列名
alter table table_name rename column_name_old column_name_new;
-- 修改类型
alter table table_name modify <列名  列类型>;
-- 修改列
alter table table_name change column1 column2 列类型;
-- 增加约束
alter table table_name add constraint <约束名> <约束类型>;
-- 修改表名
alter table table_name rename new_table_name;
复制数据表
create table new_classes like class;  -- 只复制结构(含索引、主键等,但不含数据)
create table new_classes2 as select * from classes;  -- 复制数据+基本结构,但**不复制主键、索引、自增属性等**

数据类型

整型

整型所占字节
tinyint1个字节
smallint2个字节
mediumint3个字节
int4个字节
bigint8个字节

浮点型

浮点型所占字节
float4个字节
double8个字节
decimal按实际存储

字符型

字符型说明
char(n)定长字符串 最多255个字符
varchar(n)可变长字符串 最多65535个字符

文本型

文本型说明
tinytext小文本
mediumtext中文本
text默认文本
longtext大文本

日期时间

日期时间型字节
date3个字节 yyyy-MM-dd
time3个字节 HH:mm:ss
datetime8个字节 yyyy-MM-dd HH:mm:ss
year1个字节 yyyy
timestamp4字节 yyyy-MM-dd HH:mm:ss 时间戳

枚举集合

枚举和集合说明
enum('男','女')多个里面选择一个
set('篮球','羽毛球','乒乓球')多个里面可选择多个

二进制

二进制说明
binary存放定长二进制数据
varbinary存放变长二进制数据
blob存放二进制文本

约束

  • 非空约束(NOT NULL
  • 唯一约束(UNIQUE
  • 默认值约束(DEFAULT
  • 主键约束(PRIMARY KEY
  • 外键约束(FOREIGN KEY
主键的好处:
  • 会创建主键索引 -> 可以提高查询速度
  • 创建表与表之间关系
  • 可以进行数据完整性和合法性检查
外键
create table class (class_id varchar(20) primary key ,class_name varchar(20) );

create table student(student_id varchar(20) primary key , student_name varchar(10),class_id varchar(20), foreign key (class_id ) references class(class_id)); 

外键的优点

  • 在插入/更行数据时进行约束检查,如果不合法就报错

  • 减少数据冗余,节省磁盘空间

  • 便于维护

外键的缺点

  • 每次都进行检查会降低数据库的性能

在高并发或分布式系统中,出于性能和解耦考虑,部分企业选择不在数据库层面使用外键,而是在应用层通过代码维护数据一致性。但这并不意味着外键无用——在单体应用或对数据一致性要求极高的场景中,外键仍是重要工具。

create table student(student_id varchar(20) primary key , student_name varchar(10),class_id varchar(20), foreign key (class_id ) references class(class_id))  on delete XXX; 
xxx    -> restrict  限制动作(默认)
       -> cascade 级联动作(全部删除)
       -> set null 把数据设为空

一些基础知识

SQL语句可以写在SQL文件里面再执行(事务)

MySQL设置:宽松模式和严格模式

宽松模式:有些设置不符合本身的要求,按默认方式处理

严格模式: 有些设置不符合设置要求,直接报错处理(MySQL8默认设置)

字符串 charvarchar的区别,如何选择字符串类型?

char是固定长度的,适合固定长度的数据(学号,手机号,身份证)

varchar 是可变长的数据类型,会根据计算实际数据来存储 适合场景,存储的数据有一定范围,长度不固定

datetimetimestamp 的区别?

datetime 与时区无关

timestamp 与时区有关(调整市区里面的值会发生变化)