创建数据库
语句为:
create {database|schema} 数据库名;
通过给定的数据库名创建出数据库,前提是你拥有创建数据库的权限
删除数据库
语句为:
drop {database|schema} 数据库名;
删除数据库中所有的表,并且删除数据库
使用这个语句的时候必须极度小心!
选择数据库
语句为:
use 数据库名;
告诉MySQL将命名数据库用作后续语句的默认数据库
创建数据库表
语句为:
create [template] table 表名(字段名1 字段1的数据类型 其他参数,字段名2 字段2的数据类型...);
按照字段列进行创建表
[template] 添加了这个词表示创建一个临时表
删除数据库表
语句为:
drop table 表名;
删除一个或多个表,你必须拥有删除每一个表的权限
更改数据库表字段
添加字段语句为:
alter table 表名 add column 字段名 字段类型;
增删改查
添加数据
语句为:
insert into 表名(字段1, 字段2...) values (字段1数据, 字段2数据...);
向存在的表中新增行数据
可以插入多行数据:
insert into 表名(字段1, 字段2...) values (字段1数据1, 字段2数据1...),(字段1数据2, 字段2数据2...);
删除数据
语句为:
单表删除:
delete from 表名;
多表删除:
delete from 表名1,表名2...;
从某个表中删除数据,一般需要配合where子句删除指定的行
修改数据
语句为:
update 表名 set 字段=新数据, 字段=新数据;
给指定表中的某个字段修改为新的数据,一般需要与where子句配合使用
查询数据
语句为:
select 列名,列名 from 表名;
列名之间用逗号分隔,并且不用括号括起来
从表中查询指定字段的信息, 用 * 表示查询相关所有字段
相关子句
where
语句:
where 字段名=字段数据;
配合 删 改 查,对应地按照指定规则处理数据
like
例如:
select * FROM goods WHERE goods_name like "音%";
查询以 “音” 开头的goods_name列信息,从goods表中
union和union all
联合查询,
union不会查询重复的信息
union all会将所有的值联合进来
select 字段 from 表1 union select 字段 from 表2;
将两个相同字段,不同表的信息整合,union会将重复的数据删除,只保留一分,而union all则不会删除
group by
根据一个或多个列对结果集进行分组
select * from 表 group by 某个字段;
with rollup
在group by的基础上进行统计
select 字段1,count(*) FROM 表 GROUP BY 字段1 with ROLLUP;
如图例所示:
但是由于有个字段结果是空的,表示的是总和,但是感觉不太好,所以要让这个地方显示"总和"
使用 coalesce()
select coalesce(字段,"总和"),count(*)
FROM 表 GROUP BY 字段 with ROLLUP;
如图例所示:
order by
按照指定的字段进行排序
select 字段 from 表 order by 字段;
联结(join)
平常的select 以及上面的 group by都是以行为单位进行操作,而我们需要按照列进行拼接则需要用到join
inner join
中文名: 内连接,内联结,等值连接
select 表1.字段1,表2.字段1,表1.字段3 form 表1 inner join 表2 on 联结条件;
left join
中文名: 左连接
select 表1.字段1,表2.字段1,表1.字段3 form 表1 left join 表2 on 联结条件;
right join
中文名: 右连接
select 表1.字段1,表2.字段1,表1.字段3 form 表1 right join 表2 on 联结条件;
三者区别:
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- **LEFT JOIN(左连接):**获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
NULL 值处理
为了避免null值的出现影响后续的处理,需要进行判断,有如下三个运算:
IS NULL: 当列的值是 NULL,此运算符返回 true。
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
<=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。
数据库表的复制
- 先获取原有表的创建数据库表的sql
- 通过获取到的sql创建一份新的表
- 使用 insert into … select完成数据的复制
如图,一下有一张数据库表
现在需要将数据库中的表复制一份
首先执行
show create table 表名;
获取到创建表时的sql语句
例如
CREATE TABLE `test001` (
`book_title` varchar(12) DEFAULT NULL,
`book_author` varchar(255) DEFAULT NULL,
`buy_time` datetime DEFAULT NULL,
`sales_status` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
经过调整之后的sql(修改了表名):
CREATE TABLE `test001_copy` (
`book_title` varchar(12) DEFAULT NULL,
`book_author` varchar(255) DEFAULT NULL,
`buy_time` datetime DEFAULT NULL,
`sales_status` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
此时创建了一个名为test001_copy这样的备份表
再进行insert into ... select
进行数据添加
insert into copy表(字段1,字段2,字段3...) select 字段1,字段2,字段3... from 原表;
举例:
insert into test001_copy(book_title,book_author,buy_time,sales_status) select * FROM test001;
执行完毕后,新的表就创建好了
数据库的元数据信息
命令 | 描述 |
---|---|
SELECT VERSION( ) | 服务器版本信息 |
SELECT DATABASE( ) | 当前数据库名 (或者返回空) |
SELECT USER( ) | 当前用户名 |
SHOW STATUS | 服务器状态 |
SHOW VARIABLES | 服务器配置变量 |
sql注入
sql语句在拼接用户输入的字符串数据的时候可能会出现带有sql语句的字符串,这样就会导致整个数据库陷入危险
所以需要在执行sql语句之前,要先判断用户输入的是否合法;