创建数据库
create database 数据库名称;
创建数据库,判断不存在,再创建
create database if not exists 数据库名称;
创建数据库,并指定字符集
create database 数据库名称 character set 字符集名;
创建数据库,判断是否存在,并指定字符集
create database if not exists 数据库名称 character set 字符集名;
INSERT INTO DATABASE IF NOT EXISTS db1 CHARACTER SET utf8;-- 创建数据库
删除数据库
drop database 数据库名称;
判断数据库是否存在,存在再删除
drop database if exists 数据库名称;
创建表
语法:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
...
列名n 数据类型n
);
注意:最后一列,不需要加逗号(,)
数据库类型:
int:整数类型
age int,
double:小数类型
score double(5,2) -- (有几位,保留几位)
date:日期,只包含年月日,yyyy-MM-dd
datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
timestamp:时间错类型 包含年月日是否秒 yyyy-MM-dd HH:mm:ss
如果将来不给这字段赋值,或赋值null,则默认使用当前系统时间,来自动赋值
varchar:字符串类型
name varchar(20) -- 姓名最大20个字符
-- 创建表 学生表
CREATE TABLE IF NOT EXISTS student(
id INT, -- 编号
NAME VARCHAR(20), -- 姓名
age INT, -- 年龄
gender VARCHAR(5), -- 性别
address VARCHAR(100), -- 地址
math INT, -- 数学
english INT -- 英语`dept`
)
删除表
drop table 表名;-- 删除表
drop table if exists 表名;-- 判断是否存在并删除表
查询
查询某个数据库中的所有表名称
show tables;
查询表结构
desc 表名;
修改
修改表名
alter table 表名 rename to 新的表名;
修改表的字符集
alter table 表名 character set 字符集名称
添加一列
alter table 表名 add 列名 数据类型
修改列名称 类型
alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;
删除列
alter table 表名 drop 列名;
删除
drop table 表名;-- 删除表
drop table if exists 表名;-- 判断是否存在并删除表
添加数据
语法:
insert into 表名(列名1,列名2,.... 列名n)values(值1,值2,值3.....)
INSERT INTO student (id,NAME,age,gender,address,math,english)
VALUES
(1,'曹军',18,'男','湖南',68,78),
(2,'成虫',19,'男','湖南',99,100),
(3,'小军',18,'男','中国',60,58),
(4,'华语',19,'男','北京',78,10),
(5,'阿威',18,'男','长沙',45,7),
(6,'恒子',19,'男','上海',9,0),
(7,'市场新',18,'男','衡阳',64,58),
(8,'和西维',19,'男','岳阳',95,45),
(9,'六结尾',20,'男','长沙',90,NULL)
注意:
列名和值要一一对应
如果表名后,不定义列名,则默认给所有列添加值
除了数字类型,其他类型需要使用引号(单双都可以)引起来
修改数据
语法:
update 表名 set 列名1 = 值1 ,列名2 = 值2 ,...... where 条件;
注意:
如果不加任何条件,则会将表中所有记录全部删除
update student set math = 59 ,english = 59 where NAME = '曹军'; -- 修改名字为曹军的数学、英语成绩
查询表中的记录
select * from 表名;
语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
SELECT
NAME, -- 姓名
age -- 年龄
FROM
student;-- 查询姓名和年龄
基础查询
多个字段的查询
select 字段名1,字段名2..... from 表名;
注意如果查询所有字段,则可以使用*来替代字段列表
去除重复
distinct
SELECT DISTINCT address FROM student; -- 去除重复的结果集
计算值
一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
表达式1:哪个字段需要判断是否为null
表达式2:该字段为null的替换值
起别名
字段名 as 别名:as 也可以省略
-- 计算 math 和 english 分数之和
SELECT NAME , math ,english , math+english FROM student;
条件查询
where字句后跟条件
运算符
>、<、<=、>=、=、<>
between...and 在什么之间
in(集合) 在上面范围之内
like 模糊查询
占位符
_:单个任意字符
%:多个任意字符
is null 判断为null
and 或 && 并且
or 或 || 或者
not 或 ! 非
SELECT * FROM student WHERE age >= 20; -- 查询年龄大于等于20的
排序查询
语法 :order by 字句
order by 排序字段1 排序方式1,排序字段2 排序方式2.....
排序方式
ASC :升序,默认的
DESC:降序
注意
如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件
SELECT * FROM student ORDER BY math DESC; -- 降序查询
聚合函数:将一列数据作为一个整体,进行纵向计算
count:计算个数
max:计算最大值
min:计算最小值
sun:计算和
avg:计算平均值
注意:聚合函数的计算,排除null值
解决方案
选择不包含非空的列进行计算
ifnull函数替换
SELECT COUNT(NAME) 人数 FROM student; -- 查询总人数
分组查询
语法:group by 分组字段;
注意
分组之后的字段:分组字段、聚合函数
where 和 having 的区别
where 在分组之前进行限定,如果不满足,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
where 后不可以跟聚合函数,having可以进行聚合函数的判断
约束
概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性。
分类:
主键约束:primary key
非空约束:not null
唯一约束:unique
外键约束:foreign key
非空约束:not null
创建表时添加约束
name varchar (20) not null
创建表玩后,添加非空约束
alteer table 表名 modify name varchar (20) not null;
删除name的非空约束
alteer table 表名 modify name varchar (20);
唯一约束:unique,某一列的值不能重复
注意
唯一约束可以有null值,但是只能有一条记录为null
删除唯一约束
alter table 表名 drop index 列名;
创建完表添加唯一约束
alteer table 表名 modify name varchar (20) unique;
主键约束:primary key
注意
含义:非空且唯一
一张表只能有一个字段为主键
主键就是表中记录的唯一标识
创建表时添加主键
id int primary key;
创建完表添加主键
alter table 表名 modify id primary key;
删除主键
alter table 表名 drop primary key;
自动增长
概念:如果某一列是数值类型的,使用 auto_increment 可以来完成自动增长
创建表时添加主键自动增长
id int primary key auto_increment;
删除自动增长
alter table 表名 modify id int;
添加自动增长
alter table 表名 modify id int auto_increment;
外键约束:foreign key,可以让表产生关系,从而保证数据的正确性
在创建表时,,可以添加外键
语法:
create table 表名(
.....
外键列
constraint 外键名称 foreign key(外键列名称)references 主表名称(主表列名称)
)
删除外键
alter table 表名 drop foreign key 外键名称;
创建表之后,添加外键
alter table employee add constraint 外键名称 foreign key(外键列名称)references 主表名称(主表列名称)
级联操作
添加级联操作
语法:alter table 表名 add constraint 外键名称
foreign key (外键列名称)references 主表名称(主表列名称)on update cascade on delete cascade
分类:
级联更新:on update cascade
级联删除:on delete cascade
多表查询
查询语法:
select
列名列表
from
列名列表
where .....
笛卡尔积
有两个集合A,B 取这连哥哥集合的所有组成情况
要完成多表查询,需要消除无用的数据
多表查询的分类
内连接查询
隐式内连接:使用where条件消除无用数据
显示内连接:
语法:selset 字段列表 from 表名1 inner join 表名2 on 条件
外连接查询
左外连接
语法:select 字段列表 from 表1 left outer join 表2 条件
查询的时左所有数据以及其交集部分
右外连接
语法:select 字段列表 from 表1 right outer join 表2 条件
查询的时右所有数据以及其交集部分