DDL操作数据库、表 1. 操作数据库:CRUD 创建(Create) 创建数据库:
create database 数据库名称;
创建数据库,判断不存在,再创建
create database if not exists 数据库名称;
创建数据库并指定字符集为gbk
create dadabase 数据库名称 character set gbk;
例如: 创建数据库db4,判断是否存在,并指定字符集为gbk
create database db4 if not exists character set gbk;
查询(Retrieve) 查询所有数据库的名称:
show databases;
查询某个数据库的创建语句:
show create dadabase 数据库名称;
修改(update) 修改数据库的字符集
alter database 数据库名称 character set 字符集名称
删除(delete) 删除数据库
delete database 数据库名称;
判断数据存在,存在则删除
delete database if exists 数据库名称;
使用数据库: 查询当前正在使用的数据名称:
show database();
使用数据库:
use 数据库名称;
2.操作表 创建(create) 创建表:
create table 表名(
列名 数据类型,
列名 数据类型
);
复制表:
create table 表名 like 被复制的表名;
查询(Retrieve) 查询某个数据库中所有的表名称
show tables;
查询表结构
desc 表名;
修改(update) 修改表名
alter table 表名 rename to 新的表名;
修改表的字符集
alter table 表名 character set 字符集名称;
添加一列
alter table 表名 add 列名 数据类型;
修改列名称、类型
alter table 表名 chanage 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;
删除列
alter table 表名 drop 列名;
删除(delete)
drop table 表名;
drop table if exists 表名;
DML:增删改表中的数据 添加数据:
insert into 表名(列名1,列名2,列名3) values(值1,值2,值3);
删除数据:
delete from 表名 where [条件]
注:【如果不加条件则删除表中所有记录,如果要删除所有记录, delete from 表名----不推荐使用。有多少条记录就会执行多少次删除操作。 TRUNCATE table 表名----推荐使用。效率更高,先删除表,然后在创建一张一样的表。 】
修改数据:
update 表名 set 列名1 = 值1,列名2 = 值2[where 条件]
注意:如果不加任何条件,则修改表中所有记录;
DQL:查询表中的记录
select * from 表名;
多个字段查询:
select 字段1,字段2 from 表名;
去除重复:
select distinct 字段.. from 表名;
条件查询
-- 查询年龄大于20岁
SELECT * FROM student WHERE age > 20;
SELECT * FROM student WHERE age >= 20;
-- 查询年龄等于20岁
SELECT * FROM student WHERE age = 20;
-- 查询年龄不等于20岁
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;
-- 查询年龄大于等于20 小于等于30
SELECT * FROM student WHERE age >= 20 && age <=30;
SELECT * FROM student WHERE age >= 20 AND age <=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
-- 查询年龄22岁,18岁,25岁的信息
SELECT * FROM student WHERE age = 22 OR age = 18 OR age = 25
SELECT * FROM student WHERE age IN (22,18,25);
-- 查询英语成绩为null
SELECT * FROM student WHERE english = NULL; -- 不对的。null值不能使用 = (!=) 判断
SELECT * FROM student WHERE english IS NULL;
-- 查询英语成绩不为null
SELECT * FROM student WHERE english IS NOT NULL;
-- 查询姓马的有哪些?like
SELECT * FROM student WHERE NAME LIKE '马%';
-- 查询姓名第二个字是化的人
SELECT * FROM student WHERE NAME LIKE "_化%";
-- 查询姓名是3个字的人
SELECT * FROM student WHERE NAME LIKE '___';
-- 查询姓名中包含德的人
SELECT * FROM student WHERE NAME LIKE '%德%';
排序查询 语法:order by 子句 * order by 排序字段1 排序方式1 , 排序字段2 排序方式2… 排序方式: * ASC:升序,默认的。 * DESC:降序。 注意: * 如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。 聚合函数:将一列数据作为一个整体,进行纵向的计算。 1. count:计算个数 1. 一般选择非空的列:主键 2. count(*) 2. max:计算最大值 3. min:计算最小值 4. sum:计算和 5. avg:计算平均值 注意:聚合函数的计算,排除null值。 解决方案: 1. 选择不包含非空的列进行计算 2. IFNULL函数 分组查询: 1. 语法:group by 分组字段; 2. 注意: 1. 分组之后查询的字段:分组字段、聚合函数 2. where 和 having 的区别? 1. where 在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来 2. where 后不可以跟聚合函数,having可以进行聚合函数的判断。
-- 按照性别分组。分别查询男、女同学的平均分
SELECT sex , AVG(math) FROM student GROUP BY sex;
-- 按照性别分组。分别查询男、女同学的平均分,人数
SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
-- 按照性别分组。分别查询男、女同学的平均分,人数 要求:分数低于70分的人,不参与分组,分组之后。人数要大于2个人
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex HAVING COUNT(id) > 2;
SELECT sex , AVG(math),COUNT(id) 人数 FROM student WHERE math > 70 GROUP BY sex HAVING 人数 > 2;
分页查询 语法:limit 开始的索引,每页查询的条数; 公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数 – 每页显示3条记录
SELECT * FROM student LIMIT 0,3; – 第1页
SELECT * FROM student LIMIT 3,3; – 第2页
SELECT * FROM student LIMIT 6,3; – 第3页
limit 是一个MySQL"方言" 约束 创建表时添加非空约束
create table stu(id int not null - - id为非空
);
创建表完后,添加非空约束
alter table stu modify name varchar(20) not null;
删除name的非空约束
alter table stu modify name varchar(20);
创建表时添加唯一约束
create table stu (id int not null,
name varchar(255) unique;
);
创建表后添加唯一约束
alter table stu modify name varchar(20) unique;
主键约束
create table stu(
id int not null primary key;
);
删除主键
alter table stu drop primary key;
创建完表后添加主键
alter table stu modify id int primary key;
自动增长
create table stu (
id int not null auto_increment primary key;
);
删除自动增长
alter table stu modify id in;
创建表后添加自动增长
alter table stu modify id int auto_increment;
外键约束 --创建表时,添加外键约束
create table stu(
id int not null,
...
外键列
constraint 外键名称 foreign key (外键列名称)
);
删除外键
alter table 表名 drop foreign key 外键名称;
创建表后添加外键
alter table 表名 add constraint 外键名称 foreign (外键字段名称) reference 主表名称(主表列名称);
级联操作
alter table 表名 add constraint 外键名称 foreign key(外键名称) reference 主表名称(主表列名称) on update cascade on delete cascade;
级联更新:
on update cascade;
级联删除:
on delete cascade;
数据库的备份和还原 备份:
mysqldump -u 用户名 -p密码 数据库名称>保存的路径
还原
source 文件路径
作者:一点博客 来源:CSDN 原文:https://blog.csdn.net/qq_37740841/article/details/94177295