数据库:DateBase,简称:DB
数据库特点:
常见的数据库软件:
默认端口号:3306
配置环境变量(Mac):="$PATH":/usr/local/mysql/bin
本地登录
mysql -uroot -p密码
指定IP登陆
mysql -hIP地址 -uroot -p密码
登出
exit
quit
MySQL目录结构
bin
:*.exe
my.ini
:MySQL的配置文件SQL:结构化查询语言 -> 定义了操作所有关系型数据库的规则
方言:每种数据库操作的方式存在差异
SQL语句能单行或多行书写,以分号结尾
不区分大小写,关键字建议大写
注释:
-- 注释内容
(必须加空格)#注释内容
:MySQL特有/*注释内容*/
-- 创建数据库
create database 数据库名称;
-- 若不存在,创建数据库
create database if not exists 数据库名称;
-- 创建数据库并指定gbk编码
create database 数据库名称 character set gbk;
-- 1.查询所有数据库的名称
show databases;
-- 2.查询某个数据库的创建语句(字符集)
show create database 数据库名称;
-- 修改数据库的字符集
alter database 数据库名称 character set 字符集名称;
alter database db character set utf8;
-- 删除数据库
drop database 数据库名称;
-- 判断存在再删除数据库
drop database if exists 数据库名称;
-- 1.查询当前正在使用的数据库名称;
select database();
-- 2.使用数据库
use 数据库名称;
-- 创建表 最后一个不写逗号
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
-- 1.查询数据库下表的名称
show 数据库名称;
-- 2.查询表结构
desc 表名;
-- 1.修改表名
alter table 表名 rename to 新的表名;
-- 2.修改表的字符集
alter table 表名 character set 字符集名;
-- 3.添加一列
alter table 表名 add 列名 数据类型;
-- 4.修改列名称 类型
alter table 表名 change 列名 新列名 新数据类型;
-- 5.删除列
alter table 表名 drop 列名;
drop table 表名;
drop table if exists 表名
insert into 表名(列名1,列名2,...列名n) values (值1,值2,...值n);
列名要和值一一对应
可以不写列名进行完全添加
insert into 表名 value (值1,值2,...值n);
除了数字类型,均需要引号
delete from 表名 [where 条件];
删除所有元素
delete from 表名; -- 删除表的所有数据
truncate table 表名; -- 删除表,并创建新表
update 表名 set 列名1 = 值1,列名2 = 值2,...[where 条件];
不加条件会改所有行的数据
select 字段名1,字段名2... from 表名;
select * from 表名;
distinct
select distinct 字段名 from 表名;
ifnull(表达式1, 表达式2)
select name,math,chinese,math + chinese from stu;
select name,math,chinese,ifnull(math + chinese) from stu;
as
select name as 姓名 from stu;
select name 姓名 from stu; -- 可以省略
####### < > <= >= = != < >
select * from stu where age > 20; -- 大于
select * from stu where age = 20; -- 等于
select * from stu where age != 20; -- 不等于
select * from stu where age <> 20; -- 不等于
####### && (and) || (or) ! (not)
select * from stu where age >= 20 && age <= 30;
select * from stu where age >= 20 and age <= 30;
####### between ... and ...
select * from stu where age between 20 and 30;
####### in(集合)
select * from stu where age = 22 || age = 18 or age = 19;
select * from stu where age in (22,18,19);
####### is null
null值不能使用=判断
select * from stu where math is null;
select * from stu where math is not null;
like
占位符
_
:单个任意字符%
:多个任意字符select * from stu where name like '王%';
select * from stu where name like '_铭%';
select * from stu order by 排序字段1 排序方式1,排序字段2 排序方式2 ...;
排序方式:
将一列作为整体进行纵向计算
count(*)
select count(name) from student;
select max(math) from student;
select min(math) from student;
select sum(math) from student;
select avg(math) from student;
聚合函数会排除null值
ifnull
函数select count(ifnull(name,0)) from student;
计算结果特点:单行单列
group by + 分组字段
分组之后查询的字段:分组字段、聚合函数
where
和having
的区别限定时间
where
在分组前限定,不满足条件不参与分组having
在分组后限定,不满足条件不被查询聚合函数
where
后面能加聚合函数having
后面不能加聚合函数
select sex,avg(math),count(id) from stu group by sex;
select sex,avg(math),count(id) from stu where math >= 70 group by sex;
select sex,avg(math),count(id) from stu where math >= 70 group by sex having count(id) > 2;
select sex,avg(math),count(id) 人数 from stu where math >= 70 group by sex having 人数 > 2;
语法: limit 开始的索引, 每页的条数
select * from stu limit 0,3;
开始的索引 = (当前的页码 - 1) * 每页显示的页数
limit
是MySQL的"方言"
对表的数据进行限定,保证数据的正确性、有效性和完整性
非空约束not null
:值不为null
create table stu(
id int,
name varchar(20) not null
);
alter table stu modify name vachar(20);
alter table stu modify name vachar(20) not null;
unique
:值不重复null
值,但是只能保存一个create table stu(
id int,
phone varchar(20) unique
);
alter table stu drop index phone;
只有在没有重复数据才能添加成功
alter table stu modify phone vachar(20) unique;
主键约束primary key
:非空且唯一
一张表只能有一个主键,是表中记录的唯一标识
create table stu(
id int primary key,
phone varchar(20)
);
alter table stu drop primary key;
只有在没有重复数据才能添加成功
alter table stu modify id int primary key;
create table stu(
id int primary key auto_increment,
phone varchar(20)
);
insert into stu value(null,'wmh');
alter table stu modify id int;
外键约束forign key
:让表于表产生关系,从而保证数据的正确性
create table 表名(
...
外键列
constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
alter table 表名 drop foreign key 外键名称;
alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称);
alter table 表名 add constraint 外键名称 foreign key (外键字段名称) on update cascade on delete cascade;
级联更新:on update cascade
级联删除:on delete cascade