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; -- 复制数据+基本结构,但**不复制主键、索引、自增属性等**
数据类型
整型
| 整型 | 所占字节 |
|---|---|
| tinyint | 1个字节 |
| smallint | 2个字节 |
| mediumint | 3个字节 |
| int | 4个字节 |
| bigint | 8个字节 |
浮点型
| 浮点型 | 所占字节 |
|---|---|
| float | 4个字节 |
| double | 8个字节 |
| decimal | 按实际存储 |
字符型
| 字符型 | 说明 |
|---|---|
| char(n) | 定长字符串 最多255个字符 |
| varchar(n) | 可变长字符串 最多65535个字符 |
文本型
| 文本型 | 说明 |
|---|---|
| tinytext | 小文本 |
| mediumtext | 中文本 |
| text | 默认文本 |
| longtext | 大文本 |
日期时间
| 日期时间型 | 字节 |
|---|---|
| date | 3个字节 yyyy-MM-dd |
| time | 3个字节 HH:mm:ss |
| datetime | 8个字节 yyyy-MM-dd HH:mm:ss |
| year | 1个字节 yyyy |
| timestamp | 4字节 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默认设置)
字符串 char和varchar的区别,如何选择字符串类型?
char是固定长度的,适合固定长度的数据(学号,手机号,身份证)
varchar 是可变长的数据类型,会根据计算实际数据来存储 适合场景,存储的数据有一定范围,长度不固定
datetime 和 timestamp 的区别?
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; -- 复制数据+基本结构,但**不复制主键、索引、自增属性等**
数据类型
整型
| 整型 | 所占字节 |
|---|---|
| tinyint | 1个字节 |
| smallint | 2个字节 |
| mediumint | 3个字节 |
| int | 4个字节 |
| bigint | 8个字节 |
浮点型
| 浮点型 | 所占字节 |
|---|---|
| float | 4个字节 |
| double | 8个字节 |
| decimal | 按实际存储 |
字符型
| 字符型 | 说明 |
|---|---|
| char(n) | 定长字符串 最多255个字符 |
| varchar(n) | 可变长字符串 最多65535个字符 |
文本型
| 文本型 | 说明 |
|---|---|
| tinytext | 小文本 |
| mediumtext | 中文本 |
| text | 默认文本 |
| longtext | 大文本 |
日期时间
| 日期时间型 | 字节 |
|---|---|
| date | 3个字节 yyyy-MM-dd |
| time | 3个字节 HH:mm:ss |
| datetime | 8个字节 yyyy-MM-dd HH:mm:ss |
| year | 1个字节 yyyy |
| timestamp | 4字节 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默认设置)
字符串 char和varchar的区别,如何选择字符串类型?
char是固定长度的,适合固定长度的数据(学号,手机号,身份证)
varchar 是可变长的数据类型,会根据计算实际数据来存储 适合场景,存储的数据有一定范围,长度不固定
datetime 和 timestamp 的区别?
datetime 与时区无关
timestamp 与时区有关(调整市区里面的值会发生变化)