1. SQL的概念
1.1 SQL
Structured Query Language 结构化查询语言
1.2 SQL作用
1)是一种所有关系型数据库的查询规范,不同的数据库都支持。
2)通用的数据库操作语言,可以用在不同的数据库中。
3)不同的数据库SQL语句有一些区别

1.3 SQL语句分类
1)Data Definition Language (DDL数据定义语言) 如:建库,建表
2)Data Manipulation Language(DML数据操纵语言),如:对表中的记录操作增删改
3)Data Query Language(DQL 数据查询语言),如:对表中的查询操作
4)Data Control Language(DCL 数据控制语言),如:对用户权限的设置
1.4 MySQL的语法
1)每条语句以分号结尾,如果在SQLyog中不是必须加的。
2)SQL中不区分大小写,关键字中认为大写和小写是一样的
3)3种注释:
| –空格 | 单行注释 |
|---|---|
| / / | 多行注释 |
| # | 这是mysql特有的注释方式 |
2. DDL操作数据库
2.1 创建数据库
创建数据库的几种方式
创建数据库
1 | CREATE DATABASE 数据库名; |
判断数据库是否已经存在,不存在则创建数据库
1 | CREATE DATABASE IF NOT EXISTS 数据库名; |
创建数据库并指定字符集
1 | CREATE DATABASE 数据库名 CHARACTER SET 字符集; |
实例
1 | -- 直接创建数据库db1 |
2.2 查看数据库
按tab键可以自动补全关键字
– 查看所有的数据库
1 | show databases; |
– 查看某个数据库的定义信息
1 | show create database db3; |
2.3 修改数据库
修改数据库默认的字符集
1 | ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集; |
2.4 删除数据库
删除数据库的语法
1 | DROP DATABASE 数据库名; |
每行SQL语句需要选中再执行,可以按F9
删除db2数据库
1 | drop database db2; |
2.5 使用数据库
查看正在使用的数据库
1 | SELECT DATABASE(); 使用的一个mysql中的全局函数 |
使用/切换数据库
1 | USE 数据库名; |
面试题:
在MySQL数据库软件中,有如下三个数据库:
登录数据库之后,输入语句:select database test2; 运行结果是什么?
这是一条错误的语句,如果要选中一个数据库,应用使用:use test2;
3. DDL操作表结构
3.1 创建表
前提先使用某个数据库创建表
1 | CREATE TABLE 表名 ( 字段名1 字段类型1, |
3.2 MySQL数据类型
常使用的数据类型如下:

详细的数据类型如下:


实例
创建student表包含id,name,birthday字段
1 | create table student ( |
3.3 查看表
查看某个数据库中的所有表
1 | SHOW TABLES; |
查看表结构
1 | DESC 表名; |
查看创建表的SQL语句
1 | SHOW CREATE TABLE 表名; |
查看day21数据库中的所有表
1 | use day21; |
查看student表的结构
1 | desc student; |

查看student的创建表SQL语句
1 | show create table student; |
执行结果:
`存在的目的是为了避免关键字的冲突
1 | CREATE TABLE `student` ( |
3.4 快速创建一个表结构相同的表
1 | CREATE TABLE 新表名 LIKE 旧表名; |
创建s1表,s1表结构和student表结构相同
1 | -- 创建一个s1的表与student结构相同 |
3.5 删除表
直接删除表
1 | DROP TABLE 表名; |
判断表是否存在,如果存在则删除表
1 | DROP TABLE IF EXISTS 表名; |
具体操作:
1 | -- 直接删除表s1表 |
与直接删除的区别
如果表不存在,不删除,存在则删除
3.6 修改表结构
添加表列ADD
1 | ALTER TABLE 表名 ADD 列名 类型; |
为学生表添加一个新的字段remark,类型为varchar(20)
1 | alter table student add remark varchar(20); |

修改列类型MODIFY
1 | ALTER TABLE 表名 MODIFY列名 新的类型; |
将student表中的remark字段的改成varchar(100)
1 | alter table student modify remark varchar(100); |

修改列名 CHANGE
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;
将student表中的remark字段名改成intro,类型varchar(30)
1 | alter table student change remark intro varchar(30); |
删除列 DROP
ALTER TABLE 表名 DROP 列名;
删除student表中的字段intro
1 | alter table drop intro varchar(30); |
修改表名
RENAME TABLE 表名 TO 新表名;
将学生表student改名成student2
1 | rename table student to student2; |
修改字符集character set
ALTER TABLE 表名 character set 字符集;
将student2表的编码修改成gbk
1 | alter table student2 character set gbk; |
4.DML操作表中的数据
用于对表中的记录进行增删改操作
4.1 插入记录
INSERT [INTO] 表名 [字段名] VALUES (字段值)
1 | INSERT INTO 表名:表示往哪张表中添加数据 |
插入全部字段
所有的字段名都写出来
INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3);
插入所有的列,向学生表中
1 | insert into student (id,name,age,sex) values (1, '孙悟空', 20, '男'); |
不写字段名
INSERT INTO 表名 VALUES (值1, 值2, 值3…);
插入部分数据
INSERT INTO 表名 (字段名1, 字段名2, …) VALUES (值1, 值2, …);
注:没有添加数据的字段会使用NULL
向表中插入所有字段
1 | -- 插入所有列 |
insert的注意事项:
1 | 1) 插入的数据应与字段的数据类型相同 |
4.2 DOS命令窗口操作数据乱码问题的解决
当我们使用DOS命令行进行SQL语句操作如有有中文会出现乱码

乱码产生的原因

查看 MySQL 内部设置的编码
查看包含character开头的全局变量
1 | show variables like 'character%'; |

解决方案
修改client、connection、results的编码为GBK,保证和DOS命令行编码保持一致
单独设置
1 | set character_set_client=gbk; # 修改客户端的字符集为GBK |
1 | set character_set_connection=gbk; # 修改连接的字符集为GBK |
1 | set character_set_results=gbk; # 修改查询的结果字符集为GBK |
同时设置三项
1 | set names gbk; |
修改查询的结果字符集为GBK
修改连接的字符集为GBK
set character_set_results=gbk;
修改查询的结果字符集为GBK