MySql的增删改查

SQL语句的规范

  • 命令不区分大小写
  • 表名和库名默认区分大小写
  • 语句以;结束
  • 查看帮助 HELP CREATE TABLE

数据库:存放数据的仓库 =》目录

创建、删除、修改、查询:库的创建语句、有哪些数据库、有哪些数据表...

数据表:仓库中的货架(实际存在数据的位置)=》文件(存放数据)

创建: CREATE

* 基本数据类型

* 约束关系(5种)

删除: DROP

修改: ALTER

查询:表的创建语句、表结构DESC

数据记录:

增加:INSERT INTO table_name VALUES (col1,col2....),();

插入指定字段:INSERT INTO table_name (,) values();

删除:DELETE/TRUNCATE

修改: UPDATE

查询:SELECT

复制代码
查看数据库 SHOW DATABASES;

创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name[...];

创建时指定编码
create database if not exists test5 default character set utf8;

查看创建语句
show create database products\G;

查看数据库中有哪些表
use db_name;
show tables;

===============================

修改字符集

*创建一个test5数据库,设置字符集为GBK

create database test5 default character set GBK;

*修改字符集为UTF8

alter database test5 default character set UTF8;

show create database test5\G;

修改数据库名(不支持)

删除数据库

DROP DATABASE test5;

DROP DATABASE IF EXISTS test5;

SQL语句可以写成一个SQL文件,*.sql

可以执行这个SQL文件

===================================

修改配置文件把数据放在[root@xiaoyu /]#ll /data/mysql这个目录

系统把配置拆分成多个 "小文件",放在/etc/my.cnf.d/目录下

  • client.cnf:专门管 MySQL客户端的配置(比如客户端默认连接端口、字符集);
  • mysql-server.cnf/mysqld.cnf:专门管 MySQL 服务端的配置(比如慢查询阈值、缓存大小、端口);

datadir=/data/mysql : MySQL 实际的数据存储目录 , 所以test1/test5 都在这里

socket=/data/mysql/mysql.sock : MySQL 本地连接的套接字文件路径,和datadir保持一致,避免连接报错, 本地程序(比如 Xshell 里的 mysql 客户端)和 MySQL 服务端 "沟通的专属通道"

/var/lib/mysqlMySQL 默认 的数据存储目录(上面已经修改成/data/mysql了),里面存的是:

  • 每个数据库对应的文件夹(比如你创建的test1库,会对应/var/lib/mysql/test1文件夹);
  • 数据库表的物理文件(比如 InnoDB 引擎的.ibd文件、MyISAM 的.frm/.MYD/.MYI文件);
  • MySQL 系统库(mysqlinformation_schema等)的物理文件
为啥不用默认位置要修改呢?

1、解决磁盘空间不足问题,避免系统崩溃(Linux 系统中,/var目录通常是系统盘, 默认分配的空间很小 ,/data目录通常是数据盘,空间大)

2、方便备份/迁移,提升IO性能,降低操作风险

3、本质逻辑: 系统盘只存系统文件,数据盘存业务数据 / 日志,这是运维的通用最佳实践

===================================

数据表:文件

列/字段:一个列代表了特定的数据类型和含义

students表

*name列->类型(字符串)

*age列->类型(整型)

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

*cali,18

整型

TINYINT 1字节 -128~127

SAMLLINT 2字节

MEDIUMINT 3字节

INT 4字节

BiGINT 8字节

zerofill需和unsigned搭配使用 默认加上

浮点型数据

float 4字节 单精度浮点数(计算故障率)(默认显示长度为7位,含小数点)

double 8字节 双精度浮点数(默认显示长度为17位)

decimal 定点型(默认只显示整数部分)

float(10,2)

10->显示总宽度

2->显示小数位数

MySql8默认采用严格模式

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

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

严格模式:如果不符合设置,直接报错处理

==================================

字符串类型

CHAR(N) 固定长度的字符串

VARCHAR(N) 可变长度的字符串

TEXT 用于存储大块文本(文章主体)

JSON 轻量级数据交换文本 NULL<-json->None (相当于翻译官)

二进制 图片、音频、视频

常见考题:CHAR和VARCHAR的区别?如何选择字符串类型?

CHAR:固定长度CHAR(100),适合固定长度的数据(手机号、身份证号码、学号...)

VARCHAR:可变长度字符串VARCHAR(100),根据内部存储的实际数据占用的存储空间

日期时间类型

data 3字节 yyyy-mm-dd

time 3字节 HH:mm:ss

datatime 8字节 yyyy-MM-dd HH:mm:ss

timestamp 4字节 yyyy-MM-dd HH:mm:ss 时间戳

year 1字节 yyyy

datetime 和timestamp的区别

datetime:与时区无关,存啥显示啥

timestamp:与时区有关,自动按时区转换

枚举和集合类型

枚举类型:ENUM 在多个选择中选择1个

集合类型:SET 在多个选择中选择N个

select * from users where hobby like "%阅读%";

select * from users where hobby find_in set ("阅读",hobby)>0;(它只能找一个)

========================================

常见约束

*非空约束(NOT NULL)
*唯一约束(UNIQUE):该列的值在表中是唯一的,允许NULL,可以有多个
*默认值约束(DEFALUT)
*主键约束(PRIMARY KEY)--》不允许为空NOT NULL,不允许重复UNIQUE

如果表中有一个字段符合主键特点,可以将该字段设置为主键(学号),如果没有可以使用 id -》自增

*主键的好处:会创建主键索引=》提高查询速度

*创建表与表之间的关系

*进行数据完整性和合法性检查

*外键约束(FOREIGN KEY)--》用于表与表之间建立关系

优点:

  • 确保数据一致性,在插入/更新数据会进行约束检查,如果不合法就会报错
  • 节省磁盘空间:减少数据冗余(不会有很多重复数据)
  • 便于维护

缺点:

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

注:企业中会分表,不会直接使用foreign key进行关系约束在代码层面实现数据检查

XXX =》RESTRICT 限制动作(默认)

CASCADE 级联动作

SET NULL 设置为空

表操作

表的创建

CREATE TABLE [IF NOT EXISTS] table_name(

col_name datatye [约束信息],

col_name datatye [约束信息],

col_name datatye [约束信息]

) 表字符集;

**注:**列名:小写+下划线(风格指南-见名知意)

数据类型:优化存储风格、可扩展性

约束信息:提升查询效率、保证数据的完整性

复制表结构创建表

CREATE TABLE new_classes LIKE classes;

复制表结构和数据(后面可接where条件)

CREATE TABLE new_classes2 AS SELECT * FROM classes;

删除表:DROP TABLE [IF EXISTS] table_name;
修改表:
新增列:ALTER TABLE <表名> ADD <列名 列类型> [FIRST|AFTER 列名]; //<>表示必填
删除列:ALTER TABLE <表名> DROP COLUMN <列名>;
修改列类型:ALTER TABLE <表名> MODIFY <列名 列类型>;
修改列名:

ALTER TABLE <表名> CHANGE <旧列名 新列名 列类型>;

ALTER TABLE classes CHANGE col3 col03 int;

ALTER TABLE <表名> RENAME COLUMN <旧列名> TO <新列名>;

ALTER TABLE classes RENAME COLUMN col2 TO col02;

增加约束关系:

ALTER TABLE <表名> ADD CONSTRAINT <约束名> <约束类型>;

ALTER TABLE tb ADD CONSTRAINT pk_id PRIMARY KEY (id);

=============================================

Selinux配置:

命令行的临时生效

改配置文件永久生效/etc/selinux/config

firewalld

systemctl stop firewalld

systemctl disable firewalld

如何查看错误?

near后面错误从哪个位置开始

utf8中文3个英文1个字符

相关推荐
zly35002 小时前
centos7 mysql 无法被远程连接
数据库·mysql
瀚高PG实验室2 小时前
HGDB 4.5.8.8开启oracle兼容执行带聚合函数的SQL导致数据库进程被信号11杀死
数据库·sql·oracle·瀚高数据库
炘爚2 小时前
日志系统整体设计步骤以及功能函数梳理
运维·服务器·数据库
_下雨天.2 小时前
PostgreSQL日常维护
数据库·postgresql
神の愛2 小时前
本地连接MySql数据库报错??
数据库·mysql
黑牛儿2 小时前
MySQL 索引实战详解:为什么B+类型的索引查询更快
数据库·mysql
向上的车轮2 小时前
如何用DeepSeek定制大模型——智能Text-to-SQL专家系统
数据库·sql
一个有温度的技术博主3 小时前
Redis主从同步进阶:深入理解增量同步与性能优化
数据库·redis·性能优化
榮華3 小时前
DOTA全图透视辅助下载DOTA全图科技辅助下载DOTA外挂下载魔兽争霸WAR3全图下载
数据库·科技·游戏·游戏引擎·游戏程序·ai编程·腾讯云ai代码助手