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

全部评论

相关推荐

02-07 12:06
已编辑
华侨大学 测试开发
最近看到很多&nbsp;92&nbsp;的,甚至是硕士,开始往测开赛道卷,说实话有点看不懂。先把话说清楚,大厂里的测开,绝大多数时间干的还是测试的活,只是写点自动化脚本、维护测试平台、接接流水线,真正像开发一样做系统、做架构、做核心平台的测开少得可怜,基本都集中在核心提效组,而且人很少,外面进去的大概率轮不到你,我想真正干过人都清楚。很多人被洗脑了,以为测开也是开,和后端差不多,只是更简单、更轻松、还高薪。现实情况是,测开和开发的职业路径完全不一样。开发的核心是业务和系统能力,测开的核心是稳定性和覆盖率,前者是往上走,后者天花板非常明显。你可以见到很多开发转测开,但你很少见到干了几年测开还能顺利转回开发的。更现实一点说,92&nbsp;的高学历如果拿来做测开,大部分时间就是在做重复性很强的杂活,这种工作对个人能力的放大效应非常弱。三年下来,你和一个双非的,甚至本科的测开差距不会太大,但你和同龄的后端、平台开发差距会非常明显。这不是努不努力的问题,是赛道问题。所谓测开简单高薪,本质上是把极少数核心测开的上限,当成了整个岗位的常态来宣传。那些工资高、技术强的测开,本身就是开发水平,只是挂了个测开的名。普通人进去,99%&nbsp;做的都是项目兜底型工作,而不是你想象中的平台开发。测开不是不能做,但它绝对不是开发的平替,也不是性价比最优解。如果你是真的不想做开发,追求稳定,那测开没问题。但如果你只是觉得测开比后端容易,还能进大厂,那我劝你冷静一点,这只是在用短期安全感换长期天花板。有92的学历,如果你连测开这些重复性工作都能心甘情愿接受,那你把时间精力用在真正的开发、系统、业务深度上,回报大概率比卷测开要高得多。想清楚再下场,别被岗位名和话术带偏了,就算去个前端客户端也是随便占坑的,测开是一个坑位很少赛道,反而大面积学历下放,不用想也能知道会是什么结果,我想各位在JAVA那里已经看到了
小浪_Coding:工作只是谋生的手段 而不是相互比较和歧视
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务