功能描述 | 命令 |
---|---|
启动/关闭服务 | net start/stop mysql; |
退出mysql | exit; |
使用某个数据库 | use 数据库 |
修改密码 | update mysql.user set authentication_string=password(‘新密码’) where user=‘root’ and Host =‘localhost’; |
显示所有数据库/表 | show databases; show tables; |
显示表所有表信息 | describe 表; |
创建数据库 | create database 数据库 |
删除数据库 | drop database 数据库 |
数值
类型 | 描述 | 大小 |
---|---|---|
tinyint | 小的数据 | 1字节 |
smallint | 比较小的数据 | 2 字节 |
mediumint | 中等数据 | 3字节 |
int | 标准整数 | 4字节 |
bigint | 较大的整数 | 8字节 |
float | 单精度浮点数 | 4字节 |
double | 双精度浮点数 | 8字节 |
decimal | 字符串形式浮点数 | \ |
char | 固定大小字符串 | 0~255 |
varchar | 可变大小字符串(对应String) | 0~65535 |
tinytext | 微型文本 | 2^8-1 |
text | 文本串(大文本) | 2^16-1 |
时间日期
java.util.Date
类型 | 描述 | 格式 |
---|---|---|
date | 年-月-日 | YYYY-MM-DD |
time | 时:分:秒 | HH:mm:ss |
datetime | 年-月-日 时:分:秒 | YYYY-MM-DD HH:mm:ss |
timestamp | 时间戳 | 1970.1.1到现在的毫秒数 |
year | 年 | YYYY |
null
创建表
字段加``引用以防和关键字冲突
CREATE TABLE `person` (
`id` int(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` varchar(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` varchar(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` varchar(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birth` datetime DEFAULT NULL COMMENT '出生日期',
`address` varchar(100) DEFAULT NULL COMMENT '家庭住址',
PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8
表操作
show create database test -- 查看创建数据库语句
show create table user -- 查看创建表语句
desc user -- 查看表结构
-- 修改表名
ALTER table 旧表名 rename as 新表名;
-- 添加字段
ALTER table 表名 add age int(4);
-- 修改表 约束
ALTER table 表名 modify age varchar(11);
-- 重命名
ALTER TABLE person CHANGE age grade INT(4);
-- 删除字段
ALTER TABLE person DROP grade;
-- 删除表
drop table if exists 表名;
外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键用于与另一张表的关联。是能确定另一张表记录的字段,保持数据的一致性、完整性。
-- 从表
CREATE TABLE `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birth` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
`gradeId` INT(4) NOT NULL COMMENT '年级id',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 主表
CREATE TABLE `grade` (
`gradeId` INT(4) NOT NULL AUTO_INCREMENT COMMENT '年级id',
`gradeName` VARCHAR(30) NOT NULL COMMENT '年级名',
PRIMARY KEY (`gradeId`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- 设置外键 gradeId
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeId` FOREIGN KEY(`gradeId`) REFERENCES `grade`(`gradeId`);
基本操作
-- 插入多个值
INSERT INTO `grade`(`gradeName`) VALUES('大一'),('大二');
-- 修改:UPDATE `表` SET `属性`= 'xxx' WHERE 条件;
UPDATE `student` SET `name`= 'xxx',`age` = 12 WHERE id > 3;
-- 删除
DELETE FROM `student` WHERE id BETWEEN 3 AND 5;
-- 清空表
DELETE from `studebt`; --继续自增
TRUNCATE `student`; -- 自增计数清0;不影响事务;推荐使用
-- select查找
SELECT `name` AS 名字, `sex` AS 性别 FROM `student`;
-- 拼接显示结果为 姓名:xxx
SELECT CONCAT('姓名:',`name`) AS 名字 FROM `student`;
-- 去重
SELECT DISTINCT `name` FROM `student`;
-- 模糊查询where 属性 like %和_( %表示任意个字符 _表示一个字符、__表示两个字符)
SELECT * FROM `student` WHERE `name` LIKE 'a%'; -- a开头
SELECT * FROM `student` WHERE `name` LIKE '%s';-- s结尾
SELECT * FROM `student` WHERE `name` LIKE '_s_';--三个字符s在中间
SELECT * FROM `student` WHERE `name` LIKE '__y%';-- y前面两个字符,后面任意
-- 模糊查询 where 属性 in(集合范围)
SELECT * FROM `student` WHERE `id` IN(1,3,5) AND `name` LIKE 's%';
SELECT * FROM `student` WHERE `address` IN('北京'); -- 范围为 北京
其他操作
-- 如果一条id存在则修改,否则直接插入
UPDATE `user` SET `name` = 'xyz',`pwd`='010110' WHERE id = 10;
INSERT INTO `user` (`id`, `name`, `pwd` ) VALUES( 10, 'xyz', '010110');
-- 或者
REPLACE INTO `user`(`id`, `name`, `pwd` ) VALUES (10, 'xyz', '010110);
连表查询
说明:
1.AB相交部分是满足on条件的数据,相当于两份数据,AB不相交的部分为不满足on条件数据
2.相交部分Key肯定不为NULL,条件 key is null会把相交部分排除掉
join 用于把来自两个或多个表的行结合起来:join(连接的表) on(条件查询)
类型 | 描述 |
---|---|
inner join | 在表中存在至少一个匹配时返回行 |
left join | 从左表返回所有的行,即使右表中没有匹配; |
right join | 从右表返回所有的行,即使左表中没有匹配 |
select stu.stu_id,stu.name,stu.sex,stu.grade,score.sub,score.score from stu
left join score on stu.stu_id=score.stu_id where stu.grade = 1 and score.sub =
'语文' order by score.score decs limit 1;
2.查询一年级,各科成绩第三名
select stu.stu_id,stu.name,stu.sex,stu.grade,score.sub,score.score from stu
left join score on stu.stu_id = score.stu_id where stu.grade=1 group by
score.sub order by score.score desc limit 3;
2.各年级总成绩第一名
select stu.stu_id,stu.name,stu.sex,stu.grade sum(score.score) as s from stu
left join score on stu.stu_id = score.stu_id group by score.grade,stu.name
order by s desc limit 1;