소스 검색

feat(mysql):合并旧有的mysql基础命令

liuchuanwei 6 달 전
부모
커밋
07002ff339
1개의 변경된 파일194개의 추가작업 그리고 0개의 파일을 삭제
  1. 194 0
      mysql/MySQL常用命令.md

+ 194 - 0
mysql/MySQL常用命令.md

@@ -0,0 +1,194 @@
+## MySQL 用户
+
+```sql
+-- 登录
+mysql -u<用户名> -p[密码] 
+-- 修改密码
+mysqladmin -u<用户名> -p[密码] password <new_password>   
+```
+
+## 数据库
+
+>MySQL数据库中的 UTF8 编码使用3个字节存储字段,无法存储emoji 表情这样的字段数据。
+>MySQL5.5.3+ 后来加入了 utf8mb4 支持,完全兼容 utf8。utf8mb4 最多使用4个字节存储字符,这样就可以存储emoji表情了。
+>Tip:
+> * jdbc url 中不要加 characterEncoding=UTF-8 或者 characterEncoding=UTF8MB4。连接器会自动识别字符编码的。
+> * utf8mb4 对MySQL 版本要求最低 5.5.3
+> * utf8mb4 对 jdbc mysql驱动版本最低 5.1.41
+
+```sql
+-- 显示所有的数据库
+show databases;
+
+-- 创建数据库,设置字符集utf8mb4,校对集 utf8mb4_general_ci,支持emoj表情
+create database db_name default character set utf8mb4 collate utf8mb4_general_ci;
+
+-- 查看创建数据库的语句
+show create database db_name;
+```
+
+## 备份和恢复
+
+```sql
+-- 导出数据库(注意:当前命令是在cmd命令行下执行)
+mysqldump -u<用户名> -p[密码] db_name > filename
+
+-- 恢复
+-- 1.先创建一个数据库
+create database db_name default character set utf8 collate utf8_general_ci;
+-- 2.使用该数据库
+use db_name;
+-- 3.导入数据库数据
+source filename;
+```
+
+
+## 表操作
+
+```sql
+-- 创建表
+create table if not exists student(
+	id int(11) primary key auto_increment,
+	name varchar(50) unique not null,
+	age tinyint(2) comment '年龄',
+	sex tinyint(1) default 0 comment '0男1女'
+) ENGINE=INNODB comment '学生表';
+
+-- 查看创建表的原始语句
+show create table table_name;
+
+-- 查看表结构
+desc table_name;
+
+-- 查看所有表
+show tables;
+
+-- 删除表
+drop table table_name;
+drop table if exists table_name;
+
+-- 重命名表
+alter table table_name rename new_table_name;
+
+```
+
+## 列操作
+
+```sql
+-- 添加列
+alter table table_name add column column_name int not null;
+
+-- 删除列
+alter table table_name drop column column_name;
+
+-- 修改列属性
+alter table table_name modify column column_name float not null;
+
+-- 修改列
+alter table table_name change column column_name_1 column_name2 float default 0;
+```
+
+## 索引
+
+```sql
+-- 添加索引
+alter table table_name add index ind_column_name(column_name);
+create index ind_column_name on table_name(column_name);
+
+-- 删除索引
+alter table table_name drop index ind_column_name;
+drop index ind_column_name on table_name(column_name);
+
+-- 查看索引
+show index from table_name;
+
+--  PS1:索引是不可修改的,只能删除后再创建
+--  PS2:对表记录的删除会造成索引的存储碎片,过多的存储碎片不仅占用存储空间,还会降低数据库运行速度。重建索引能够有效的进行“碎片整理”。
+--  查看索引存储碎片(当 Data_free 列值大于0时表示有碎片,值越大碎片越多)
+show table status like 'table_name';
+
+```
+
+## 增删改查
+
+```sql
+-- 插入
+insert into student(id, name, age, sex) values(1, '小明', 23, 0);
+-- 批量插入
+insert into student(name, age, sex) values
+('小强', 18, 0),
+('小华', 28, 1),
+('小张', 23, 1);
+
+-- 删除
+delete from student where id=1;
+
+-- 更新
+update student set age=24 where id=2;
+
+-- 查询
+select * from student;
+```
+
+## 日期时间转换
+```sql
+-- 当前时间
+select now(); -- 结果:2024-04-10 08:41:12
+select sysdate(); -- 结果:2024-04-10 08:41:12
+-- sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值;
+
+-- 当前时间戳
+select current_timestamp, current_timestamp();
+
+-- 日期转为字符串
+select date_format(sysdate, '%Y%m%d%H%i%s');
+-- 时间转为字符串
+select time_format(now(), '%Y%m%d%H%i%s');
+
+-- 字符串转为日期
+select str_to_date('2024-01-01', '%Y-%m-%d');
+select str_to_date('2024-01-01 08:30:12', '%Y-%m-%d %h:%i:%s');
+```
+
+## 插入的特殊操作
+### INSERT SELECT
+```sql
+-- 给所有女学生插入一条礼品记录  
+INSERT INTO student_gift(student_id, gift)   
+SELECT id, '手绳' as gift   
+FROM student   
+WHERE sex=1 ;  
+```
+
+### INSERT FROM
+```sql
+-- 将 student 表数据复制到 student_bak 表  
+INSERT INTO student_bak FROM student ;
+```
+
+
+## 更新的特殊操作
+
+### 更新值为null
+
+```sql
+-- 直接设置等于常量null
+update student s set s.age=null where s.id=3;
+```
+注意:
+如果列设置了NOT NULL,必须先修改这个列的属性。否则会报错:1048 - Column 'name' cannot be null
+
+### 替换字符
+```sql
+-- 将 student 表字段 name 中的 '小' 全部替换成 '大'  
+UPDATE student SET name=REPLACE(name, '小', '大') WHERE name LIKE '%小%' ;
+```
+
+### 关联更新
+```sql
+-- 将student_bak表的字段更新到student表中  
+UPDATE student s
+JOIN student_bak b 
+	ON b.id=s.id  
+SET s.name=b.name, s.age=b.age;
+```