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 主表名称(主表列名称)

范式

image-20210816195543578

image-20210816200643209

image-20210816200625980

备份和还原

事务

	//转账案例
	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'@'%'

image-20210818204941295

建表

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);

全部评论

相关推荐

10-15 16:27
门头沟学院 C++
LeoMoon:建议问一下是不是你给他付钱😅😅
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
10-05 10:13
已编辑
HHHHaos:让这些老登来现在秋招一下,简历都过不去
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务