Mysql
操作数据库
创建数据库
create databease [ if not exists ] 数据库名称 [ character set gbk ];
例如 :CREATE DATABASE if not exists `springboot` character set gbk;
查询数据库
查询所有数据库名称:
show databases;
查询某个数据库的创建语句(或字符集):
show create database 数据库名称;
修改数据库的字符集
alter database 数据库 character set 字符集名称 ;
删除数据库
drop database if exists `数据库名称`;
使用数据库
查询当前正在使用的数据库名称 select database();
使用数据库 use 数据库名称;
操作数据表
创建数据库
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
复制表
create table 表名 like 被复制的表名
数据库类型
1.整数类型: age int ;
2.小数类型: score double(5,2); 最大长度5,保存小数点后两位
3.日期
data :日期 yyyy-MM-dd
datatime :日期 yyyy-MM-dd HH:mm:ss
timestamp :时间戳 yyyy-MM-dd HH:mm:ss如果不赋值,默认使用当前系统时间
4.varchar:字符串
name varchar(20); 姓名最大20个字符
例如:zhangsan 8个字符 张三 2个字符
单表查询
show tables;
查询表结构: desc 表名;
select 字段列表
from 表名
where 条件
group by 分组字段
having 分组后的条件
order by 排序
limit 分页限定
1.去重: select distinct address from student; 当查询结果集完全一样时才能去重
2. select math+english(ifnull(english,0)) from 查询数学和英语成绩之和,如果英语为null,替换为0,
因为遇到null值相加全得null
条件查询
where
><=、between...and...、in(集合)、like模糊查询、is null、and、or、not
模糊查询
1.查询姓马的
select * from student where name like '马%';
3.查询第二个字是马的
select * from student where name like '_马%'
3.查询含马的
select * from student where name like '%马%'
3.查询姓名3个字的
select * from student where name like '___'
排序查询
order by 排序字段1 ,排序字段2 desc;
聚合函数(排除null值)
*** 将一列数据看成一个整体,进行纵向计算 ***
1.count() 计算个数,一般选择主键
select count(id) from 表名;
2.max() 、 min() 、 sum() 、avg()
分组查询
按性别分组,分别查询男女同学的平均分,人数。要求分数<70的人不参加分组,分组后只显示分组人数>2的组
select sex,AVG(math),COUNT(id) as 人数 from student where math > 70 GROUP BY sex HAVING 人数 >2;
"注意:"
1.分组之后查询的字段:分组字段、聚合函数
2.where 和 having 的区别:
(1)where 分组前进行限定,如果不满足条件,则不参与分组。
having在分组之后进行限定,如果不满足结果,则不会被查询出来
(2)where 后不可跟聚合函数,having可以进行聚合函数的判断
分页查询
//方言,limit只能在MySQL使用
每页查询3条
select * from student limit 0,3; --第1页
select * from student limit 3,3; --第2页
select * from student limit 6,3; --第3页
"公式":开始索引 = (当前页码-1)*每一页显示条数
修改数据表
1.修改表名 alter table 表名 rename to 新名
2.修改表的字符集 alter table 表名 character set 字符集名称
3.添加一列 alter table 表名 add 列名 数据类型
4.删除列 alter table 表名 drop 列名
5.修改列名称、类型 alter table 表名 change 列名 新列名 新数据类型
alter table 表名 modify 列名 新数据类型
删除数据表
drop table 表名;
drop table if exists 表名;
添加数据
insert into 表名(列1,....) values(值1,...);
//除了数字类型,其他类型都需要使用引号括起来
删除数据
delete from 表名 [where 条件];
"删除所有数据"
1.delete from 表名; 不推荐,效率低
2.truncate table 表名 ; 整表删除
修改数据
update 表名 set 列名1 = 值1, 列名2 = 值2, 列名3 = 值3 [where 条件];
约束
添加、删除字段非空约束
alter table stu modify NAME varchar(20) not null; //添加非空约束
alter table stu modify NAME varchar(20) //删除非空约束
添加、删除字段唯一约束
alter table stu modify NAME varchar(20) unique; //添加非空约束
alter table stu drop index NAME //删除非空约束
添加、删除主键约束
alter table stu modify id int primary key; //添加主键
alter table stu drop primary key ; //删除主键
自动增长(和主键搭配使用)
在创建表时,添加主键和自动增长
create table stu(
id int primary key auto_increment, //给主键id加自动增长
Name varchar(20)
);
创建表后添加自动增长
alter table stu modify id int auto_increment;
创建表后删除自动增长
alter table stu modify id int ;
外键约束
create table 表名(
''''''
''''''
constraint 外键名称 foreign key (外键列名) references 主表名称(主表列名称)
);
删除外键
alter table 表名 drop foreign key 外键名称
添加外键
alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表名称(主表列名称)
范式
备份和还原
事务
//转账案例
start transaction; --"开启事务"
update account set balance = balance - 500 where name = 'zhangsan';
update account set balance = balance + 500 where name = 'lisi';
commit; --提交事务
rollback; 一旦发生错误,则"回滚"
//设置自动提交
select @@autocommit;
set @@autocommit = 0; //关闭自动提交
set @@autocommit = 1; //开启自动提交
四大特征
1.原子性
2.持久性
3.隔离性
4.一致性
DCL
//创建用户
create user '用户名'@'主机名' identified by '密码';
create user 'zhangsan'@'localhost' identified by '1213';//此用户可以在本机上登录
create user 'lisi'@'%' identified by '1213'; //此用户可以在任意主机上登录
//删除用户
drop user '用户名'@'主机名';
//查询用户
select * from user ;
//修改用户密码
update user set password = password('新密码') where user = '用户名';
set password for '用户名'@'主机名' = password('新密码');
//查询权限
show grant for '用户名'@'主机名' ;
//授权管理
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
给张三用户授权所有权限,在任意数据库任意表上
grant all on *.* to 'zhangsan'@'localhost';
//撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
revoke update on db1.student from 'lisi'@'%'
建表
CREATE TABLE `teacher` (
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老师');
CREATE TABLE `student` (
`id` INT(10) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
`tid` INT(10) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fktid` (`tid`),
CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO `student` (`id`, `name`, `tid`) VALUES (1, '小明', 1);
INSERT INTO `student` (`id`, `name`, `tid`) VALUES (2, '小红', 1);
INSERT INTO `student` (`id`, `name`, `tid`) VALUES (3, '小张', 1);
INSERT INTO `student` (`id`, `name`, `tid`) VALUES (4, '小李', 1);
INSERT INTO `student` (`id`, `name`, `tid`) VALUES (5, '小王', 1);
CREATE TABLE account
(
id
INT(10) NOT NULL,
username
VARCHAR(30) DEFAULT NULL,
money
INT(10) ,
PRIMARY KEY (id
)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO account(id
, username
,money
) VALUES (1, '张三',1000);
INSERT INTO account(id
, username
,money
) VALUES (2, '李四',2000);
INSERT INTO account(id
, username
,money
) VALUES (3, '王五',1500);
INSERT INTO account(id
, username
,money
) VALUES (4, '赵六',6666);
CREATE TABLE student
(
id
INT(10) NOT NULL,
name
VARCHAR(30) DEFAULT NULL,
tid
INT(10) DEFAULT NULL,
PRIMARY KEY (id
),
KEY fktid
(tid
),
CONSTRAINT fktid
FOREIGN KEY (tid
) REFERENCES teacher
(id
)
) ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO student
(id
, name
, tid
) VALUES (1, '小明', 1);
INSERT INTO student
(id
, name
, tid
) VALUES (2, '小红', 1);
INSERT INTO student
(id
, name
, tid
) VALUES (3, '小张', 1);
INSERT INTO student
(id
, name
, tid
) VALUES (4, '小李', 1);
INSERT INTO student
(id
, name
, tid
) VALUES (5, '小王', 1);