Mysql

Mysql

​ 数据库:按照数据结构来组织、存储和管理数据的仓库。分为关系型数据库,非关系型数据库。

​ 关系型数据库:通过表和表,行和列之间的关系管理数据。如:Mysql、Oracle、Sql Servcer。

​ 非关系型数据库:Redis(键值(Key-Value)存储数据库)、MongoDB(面向集合存储,json类型)。

​ MySQL 是一个关系型数据库管理系统。

Mysql数据类型

数值类型

​ TINYINT 1 byte

​ SMALLINT 2 bytes

​ INTEGER 4 bytes

​ BIGINT 8 bytes

​ FLOAT 4 bytes

​ DOUBLE 8 bytes

​ DECIMAL (字符串存储的整数类型,精度缺失)

字符串类型

​ CHAR VARCHAR BLOB(二进制形式) TEXT

CHAR		0-255 bytes				    定长字符串
VARCHAR		0-65535 bytes				变长字符串
TINYBLOB	0-255 bytes					不超过 255 个字符的二进制字符串
TINYTEXT		0-255 bytes				短文本字符串
BLOB		    0-65 535 bytes			二进制形式的长文本数据
TEXT		    0-65 535 bytes			长文本数据
MEDIUMBLOB		0-16 777 215 bytes		二进制形式的中等长度文本数据
MEDIUMTEXT		0-16 777 215 bytes		中等长度文本数据
LONGBLOB		0-4 294 967 295 bytes		二进制形式的极大文本数据
LONGTEXT		0-4 294 967 295 bytes		极大文本数据

日期类型

DATETIME		YYYY-MM-DD HH:MM:SS
TIMESTAMP		时间戳

引擎

在这里插入图片描述

设置引擎的方式

-- 方式一:
修改配置文件my.ini
将mysql.ini另存为my.ini,在[mysqld]后面添加default-storage-engine=InnoDB,重启服务,数据库默认的引擎修改为InnoDB
-- 方式二:
在建表的时候指定 ENGINE=InnoDB

字符集及排序规则

-- utf8_general_ci 大小写不敏感
-- utf8_general_cs 大小写敏感
-- utf8_bin 规定每个字符串用二进制编码存储,区分大小写,可以直接存储二进制的内容
ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin

操作数据库

创建

CREATE DATABASE IF NOT EXISTS tmy;

使用

USE tmy;

查询

SHOW DATABASES;

删除

DROP DATABASE IF EXISTS tmy;

操作数据表

创建表

CREATE TABLE IF NOT EXISTS `tmy`(
	`id` INT(8) NOT NULL COMMENT '学号',
	`name` VARCHAR(20) NOT NULL COMMENT '姓名',
	`sex` VARCHAR(2) NOT NULL DEFAULT('1') COMMENT '性别',
	`birthday` DATETIME DEFAULT NULL COMMENT '生日',
	PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

删除表

DROP TABLE IF EXISTS `test`;

修改表

-- 修改表名称
ALTER TABLE `tmy` RENAME AS `tian`;
-- 显示表结构
DESC `tian`;
-- 添加表字段
ALTER TABLE `tian` ADD `age` INT(3);
-- 修改表字段
ALTER TABLE `tian` CHANGE `age1` `age` INT; -- 修改字段名
ALTER TABLE `tian` MODIFY `age` VARCHAR(3); -- 修改约束
-- 删除表字段
ALTER TABLE `tian` DROP `age`;

操作数据

外键

-- 关联表
CREATE TABLE IF NOT EXISTS `address`(
	`id` INT NOT NULL AUTO_INCREMENT,
	`name` VARCHAR(100) NOT NULL,
	PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
-- 关联字段
ALTER TABLE `tmy` ADD `address` INT;
-- 添加外键约束
ALTER TABLE `tmy`
ADD CONSTRAINT `FK_ADDRESS` FOREIGN KEY(`address`) 
REFERENCES `address`(`id`);

插入数据

INSERT `address`(`name`) VALUES ('河北'),('北京'),('上海');

更新数据

UPDATE `address` SET `name`='天津' WHERE `name`='上海';

删除数据

DELETE FROM `address` WHERE `name` in('湖北','上海');
-- 全部删除
DELETE FROM `address`;
TRUNCATE TABLE `address`;
-- DELETE可以、TRUNCATE
    -- 相同点:都能清空数据
    -- 不同点:
    -- TRUNCATE无法清空有外键关系表的数据,DELETE可以
    -- TRUNCATE清空自增(重置),DELETE不一定(不重启数据库不重置;重启数据库:InnoDB重置,MyLSAM不重置)
    -- 原因(?这个东西?):InnoDB存储再内存中,MyLSAM存储在文件中

查询数据

-- 去重
SELECT DISTINCT(`name`) FROM `address`;
-- 内连接
inner join	A and B: 两张表中都有的数据才会显示
-- 外连接
left join	A -> B:  主全显,后看on
right join	A <- B:  主看on,后全显
full join	A <-> B:	A和B的并集
-- 交叉连接(笛卡尔连接)
cross join	返回两个集合的笛卡尔积
-- 子查询、嵌套查询
SELECT b.* from shopping as a,shopping as b where a.name='惠惠' and a.price<b.price order by b.id2018-03-06
注意:12相同;34相同
1select s.ename '姓名', f.ename '领导' from emp f, emp s where f.empno=s.mgr;
2select s.ename, f.ename from emp s inner join emp f on f.empno=s.mgr;
3SELECT e.ename,(SELECT ename FROM emp d WHERE d.empno=e.mgr) AS boss FROM emp e; 
4select s.ename, f.ename from emp s left join emp f on f.empno=s.mgr;
-- 分页
limit 0,50:第一页, 5:每页5条数据),要和 order bydesc倒序,asc正序)配合使用
-- 分组
group by() having 条件

常用函数

-- 数学运算
abs()		-- 绝对值
celling()	-- 向上取整
floor()		-- 向下取整
band()		-- 0-1之间随机数
sign(-10)	-- 0:0,负数:-1,整数:1
-- 字符串函数
char_length('asdf')		-- 字符串长度
concat('a','s','c')		-- 拼接字符串
insert('我瘦了',2,3,'真的')	-- 插入字符串(2第几位,3长度)
lower('ABC')	-- 转小写
upper('abc')	-- 转大写
replace('aaaaddd', 'a', 'd')	-- 替换a为b
substr('1234',2,3)	-- 截取('234')
reverse('4321')		-- 反转

聚合函数

-- count():计数
count(id)>count(1)>count(*)	:前提id有索引(count(1)会忽略空值)
-- sum():求和
-- avg():平均数
-- max(): 最大
-- min():最小

MD5函数

MD5();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值