MySQL知识集合
1 SQL语句分类
- Data Definition Language (DDL 数据定义语⾔), 如:建库,建表
- Data Manipulation Language(DML 数据操纵语⾔),如:对表中的记录操作增删改
- Data Query Language(DQL 数据查询语⾔),如:对表中的查询操作
- Data Control Language(DCL 数据控制语⾔),如:对⽤户权限的设置
2 DDL 操作数据库
2.1创建数据库
create database 数据库名;
-- mysql独特写法
create database if not exists数据库名;
create database 数据库名 character set 字符集;
具体操作
create database java2106;
2.2查看数据库
-- 查看所有的数据库
show databases;
-- 查看某个数据库的定义信息
show create database db3;
show create database db1;
2.3修改数据库
-- 将db3数据库的字符集改成utf8
alter database db3 character set utf8;
2.4删除数据库
-- 删除db2数据库
drop database db2;
2.5删使用数据库
-- 查看正在使⽤的数据库
select database();
-- 改变要使⽤的数据库
use db4;
⾯试题
在 MySQL 数据库软件中,有test1、test2、test3三个数据库,登录数据库之后,输⼊语句:
select database test2; 运⾏结果是什么?
● 这是⼀条错误的语句,如果要选中⼀个数据库,应⽤使⽤:use test2;
3 DDL 操作表结构
前提先使⽤某个数据库
3.1创建表
CREATE TABLE 表名 (
字段名 1 字段类型 1,
字段名 2 字段类型 2
);
3.2MySQL数据类型
3.3查看表
-- 查看day21数据库中的所有表
use day21;
show tables;
-- 查看student表的结构
desc student;
-- 查看day21数据库中的所有表
use day21;
show tables;
-- 查看student表的结构
desc student;
执⾏结果:
CREATE TABLE `student` (
`id` int DEFAULT NULL,
`name` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
`birthday` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
3.4 快速创建⼀个表结构相同的表
-- 创建s1表,s1表结构和student表结构相同
create table s1 like student;
desc s1;
3.5删除表
-- 直接删除表 s1 表
drop table s1;
-- 判断表是否存在并删除 s1 表
drop table if exists `create`;
3.6修改表结构
添加表列 ADD
-- 为学⽣表添加⼀个新的字段remark,类型为varchar(20)
alter table student add remark varchar(20);
修改列类型 MODIFY
-- 将student表中的remark字段的改成varchar(100)
alter table student modify remark varchar(100);
修改列名 CHANGE在这里插入代码片
-- 将student表中的remark字段名改成intro,类型varchar(30)
alter table student change remark intro varchar(30);
删除列 DROP
-- 删除student表中的字段intro
alter table student change remark intro varchar(30);
修改表名
-- 将学⽣表student改名成student2
rename table student to student2;
修改字符集 character set
-- 将student2表的编码修改成gbk
alter table student2 character set gbk;
DML 操作表中的数据
⽤于对表中的记录进⾏增删改操作
4.1插⼊记录
插⼊全部字段
-- 所有的字段名都写出来
INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3...) VALUES (值 1, 值 2, 值 3);
-- 不写字段名
INSERT INTO 表名 VALUES (值 1, 值 2, 值 3...);
插⼊部分数据
INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);
INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);
4.2蠕虫复制
将⼀张已经存在的表中的数据复制到另⼀张表中
将表名2中的所有的列复制到表名1中
INSERT INTO 表名 1 SELECT * FROM 表名 2;
只复制部分列
INSERT INTO 表名 1(列 1, 列 2) SELECT 列 1, 列 2 FROM student;
4.3更新表记录
UPDATE 表名 SET 列名=值 [WHERE 条件表达式]
# UPDATE: 需要更新的表名
# SET: 修改的列值
# WHERE: 符合条件的记录才更新
# 你可以同时更新⼀个或多个字段。
# 你可以在 WHERE ⼦句中指定任何条件。
不带条件修改数据
UPDATE 表名 SET 字段名=值; -- 修改所有的⾏
带条件修改数据
UPDATE 表名 SET 字段名=值 WHERE 字段名=值; 1
注:如果update和delete不能执⾏,需要修改数据库安全模式:
SET SQL_SAFE_UPDATES = 0;
4.4删除表记录
DELETE FROM 表名 [WHERE 条件表达式]
# 如果没有指定 WHERE ⼦句,MySQL 表中的所有记录将被删除。
# 你可以在 WHERE ⼦句中指定任何条件
不带条件删除数据
DELETE FROM 表名;
带条件删除数据
DELETE FROM 表名 WHERE 字段名=值;
使⽤ truncate 删除表中所有记录
TRUNCATE TABLE 表名;
//truncate 和 delete 的区别
//truncate 相当于删除表的结构,再创建⼀张表
4 DQL查询表中的数据
查询不会对数据库中的数据进⾏修改,只是⼀种显示数据的⽅式。
SELECT 列名 FROM 表名 [WHERE 条件表达式]
# 1) SELECT 命令可以读取⼀⾏或者多⾏记录。
# 2) 你可以使⽤星号(*)来代替其他字段,SELECT 语句会返回表的所有字段数据
# 3) 你可以使⽤ WHERE 语句来包含任何条件。
4.1简单查询
查询表所有⾏和列的数据
-- 使⽤*表示所有列
SELECT * FROM 表名;
-- 查询所有的学⽣
select * from student
查询指定列
SELECT 字段名 1, 字段名 2, 字段名 3, ... FROM 表名;
-- 查询 student 表中的 name 和 age 列
select name,age from student;
4.2指定列的别名进行查询
使⽤关键字
使⽤别名的好处:显示的时候使⽤新的名字,并不修改表的结构
-- 对列指定别名
SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名;
-- 对列和表同时指定别名
SELECT 字段名 1 AS 别名, 字段名 2 AS 别名... FROM 表名 AS 表别名;
4.3清除重复值
查询指定列并且结果不出现重复数据
SELECT DISTINCT 字段名 FROM 表名;
4.4查询结果参与运算
某列数据和固定值运算
SELECT 列名 1 + 固定值 FROM 表名;
某列数据和其他列数据参与运算
SELECT 列名 1 + 列名 2 FROM 表名;
4.5条件查询
运算符
逻辑运算符
●in关键字
SELECT 字段名 FROM 表名 WHERE 字段 in (数据 1, 数据 2...);
# in ⾥⾯的每个数据都会作为⼀次条件,只要满⾜条件的就会显示
具体操作
-- 查询id是1或3或5的学⽣
select * from student where id in(1, 3, 5);
-- 查询id不是1或3或5的学⽣
select * from student where id not in(1, 3, 5);
●like关键字
# LIKE 表示模糊查询
SELECT * FROM 表名 WHERE 字段名 LIKE '通配符字符串';
●MySQL通配符