MySQL Tutorials 01

常见的SQL语法

下面总结一下自己平时用的比较多的SQL语法,以及遇到的一些”坑”

为了方便起见,我们有如下结构的表:

1
2
3
4
5
6
7
8
9
10
CREATE TABLE IF NOT EXISTS input_base (
id bigint(20) NOT NULL AUTO_INCREMENT,
mid bigint(20) COMMENT '用户 id',
sex varchar(50) COMMENT '性别',
age int(10) COMMENT '年龄',
degree varchar(50) COMMENT '学位',
creat_ymd varchar(50),
PRIMARY KEY (id),
INDEX mid_index(mid)
);

一般我们说SQL的基本语法就是四个字- 增删改查

1. 增

增,就是增加数据,可以分为全表插入,具体列插入和初始化插入。

1.全表插入

1
insert into input_base select * from input

2. 插入具体列

1
insert into input_base (id, mid, sex) select id, mid, sex from input

3. 初始化插入

1
2
3
4
5
6
# 插入全部列可以不写列名
insert into input_base values ('0', '80', '女', '32', '本科', '2017-12-21');


#插入部分列,其他列为null
insert into input_base(id, mid, sex) values ('0', '122354', '女');

2. 删

删,就是删除数据,主要有三种方式:DROPTRUNCATEDELETE

相同点:

1. 都可以删除数据

2. DROP、TRUNCATE都是DDL语句,执行后会自动提交

不同点:

1. TRUNCATE和DELETE只删除数据,不删除表结构,而DROP还会删除表结构和索引等依赖

2. 效率: DROP > TRUNCATE > DELETE

3. 安全性:在没有备份前,小心使用DROP和TRUNCATE。如果涉及事务处理最好用delete from。

4. 使用场景: 想要删除部分数据,使用delete from 结构;想要删除表,使用DROP结构;想要保留表结构,删除所有数据,使用TRUNCATE来操作。

DROP删除表

1
DROP TABLE input_base;

DELETE删除部分数据

1
DELETE FROM input_base WHERE sex='男';

DRUNCATE清除数据

1
TRUNCATE TABLE input_base;

3.改

改,包括改数据、改数据类型和改表结构。

1. 改数据

1
UPDATE input_dabase SET num=7 WHERE sex='男';

2.改数据类型

1
2
3
4
5
#把degree的数据类型由varchar(50)改为varchar(100)

ALTER TABLE input_base MODIFY COLUMN degree varchar(100);

ALTER TABLE input_base CHANGE degree degree varchar(100);

3. 改表结构

1. 新增列

1
2
3
4
5
6
7
8
#首位
ALTER TABLE input_base ADD uuid varchar(50) COMMENT '唯一标识' first;

#末尾
ALTER TABLE input_base ADD num int(10) COMMENT '文章数量';

#制定位置
ALTER TABLE input_base ADD amount int(20) COMMENT '总额' AFTER mid;

2. 删除列

1
ALTER TABLE input_base DROP update_ymd;

4. 查

查分为查表结构,查全表,制定列和条件查询。

1. 查表结构

1
DESC input_base

2. 全表查询

1
2
#取前10条
SELECT * FROM input_base LIMIT 10;

3. 特定列查询

1
SELECT id, mid, sex FROM input_base LIMIT 10;

4.条件查询

1
SELECT id, mid, sex FROM input_base WHERE sex='男' LIMIT 10;

5.编码

中文乱码问题

1. 创建数据库代码

1
2
3
CREATE DATABASE `test`
CHARSET set `utf8`
COLLATE `utf8_general_ci`;

2.创建表结构代码

1
2
3
4
5
6
7
8
CREATE TABLE `input_user_DATABASE` (
`id` bigint(30) NOT NULL AUTO_INCREMENT COMMENT `自增id`,
`mid` bigint(30) DEFAULT NULL COMMENT `用户id`,
`age` int(10) DEFAULT NULL COMMENT `年龄`,
`degree` varchar(50) DEFAULT NULL COMMENT `学位`,
PRIMARY KEY`id`),
INDEX `age`,
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8

这样设置好后就不会乱码了。

Sumer Zhang wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客。