目录
1.MySQL概述:
1.1常用基本命令
use 数据库名; --打开指定的数据库
show databases; --查看当前所有的数据库
show tables; --查看所有的表
describe/desc 表名; --显示表的信息(字段、字段类型……)
create database 数据库名; --创建一个数据库
exit --退出连接
1.2注释
-- --单行注释
# --单行注释
/*...*/ --多行注释
2.操作数据库
2.1数据库创建、使用、删除
ps注意:系统的关键字不区分大小写
--创建数据库
CREATE DATABASE [IF NOT EXISTS] 数据库名; --IF NOT EXISTS表示如果这个数据库名不存在,就创建
--如:create database if not EXISTS test_mysql;
--使用数据库
USE 数据库名;
--如:use test_mysql;
--删除数据库
DROP DATABASE 数据库名;
--如:drop DATABASE test_mysql;
2.2 数据类型
- 数值
数据类型 | 描述 | 大小 |
---|---|---|
tinyint | 十分小的数据 | 1个字节 |
smallint | 较小的数据 | 2个字节 |
mediumint | 中等大小的数据 | 3个字节 |
int | 标准的整数 | 4个字节 |
bigint | 较大的数据 | 8个字节 |
float | 浮点数 | 4个字节 |
double | 浮点数 | 8个字节 |
decimal | 字符串形式的浮点数,一般用于金融计算 |
- 字符串
数据类型 | 描述 | 大小 |
---|---|---|
char | 字符串固定大小 | 0~255 |
varchar | 可变字符串 | 0~65535 |
tinytext | 微型文本 | 2^8-1 |
text | 文本串 | 2^16-1 |
- 时间日期
数据类型 | 描述 | 格式 |
---|---|---|
date | 日期格式 | YYYY-MM-DD |
time | 时间格式 | HH:mm:ss |
datetime | 最常用的时间格式 | YYYY-MM-DD HH:mm:ss |
timestamp | 时间戳,1970.1.1到现在的毫秒数 | |
year | 年份表示 |
- null
没有值,未知
不能使用NULL值进行计算
2.3 字段属性
UnSigned 无符号的,声明了该列不能为负数
ZEROFILL 用零来填充,不足位数的用0来填充 , 如int(3),4则表示为004
Auto_InCrement
- 自增,自动在上一条记录上基础上默认加1
通常用来设计唯一的主键,必须是整数类型
可定义起始值和步长
NULL 和 NOT NULL
null 表示该列当没有数据插入时可以默认为空
null null 表示该列一定不能为空,该列必须有数据
DEFAULT
- 默认的值,用于设置默认值
- 例如,性别字段,默认为"男" , 否则为 “女” ; 若无指定该列的值 , 则默认值为"男"的值
3.表的操作
3.1创建表
create table if not EXISTS student
(
id int(4) not null AUTO_INCREMENT COMMENT '学号',
name varchar(30) not null COMMENT '姓名',
PRIMARY KEY(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
-
AUTO_INCREMENT 代表自增
-
COMMENT 表示注释,为字段解释意思,当有看不懂字段意思时可以看这个注释
-
PRIMARY KEY表示主键声明
-
ENGINE=INNODB DEFAULT CHARSET设置字符集编码,一般都不用修改,可以不设置
3.2修改表
- --修改表名
格式: ALTER TABLE 旧表名 RENAME AS 新表名
- --增加字段
格式:ALTER TABLE 表名 ADD 新字段名 列属性[属性]
- --修改字段
格式:
ALTER TABLE 表名 MODIFY 字段名 列类型[属性]
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性[属性]
- 删除字段
格式:ALTER TABLE 表名 DROP 字段名
--修改表名
alter table student rename as new_student;
--添加字段
alter table new_student add age int(11);
alter table new_student add (pwd varchar(12),birthday int(6)); --升级:同时增加2个或多个字段
--修改字段
alter table new_student MODIFY birthday varchar(6); --修改字段类型和类型值
alter table new_student CHANGE pwd password int(6); --重命名字段名和类型
--删除字段
alter table new_student DROP birthday;
3.3 删除表
DROP TABLE new_student;
DROP TABLE IF EXISTS teacher; --IF EXISTS 可加可不加
--IF EXISTS
--IF EXISTS 加上比较好,如果存在才创建或删除表,不存在时就会报错
拓展:每一个表,都必须存在以下五个字段
名称 | 描述 |
---|---|
id | 主键 |
version | 乐观锁 |
is_delete | 伪删除 |
gmt_create | 创建时间 |
gmt_update | 修改时间 |
3.4 表的常用命令
SHOW CREATE TABLE student; --查看当初创建表的语句
desc/DESCRIBE student; --查看表的结构(字段、字段类型等等)
--创建一个新表,数据和字段、类型和student数据一样
create table student1 as SELECT * from student;
4.DML语言:数据操作语言
意义:数据存储,数据管理。顾名思义就是基于数据上的,以上都是基于库、表上的操作
Data Manipulation Luaguge
:数据操作语言
4.1 insert插入语句
--插入一条数据
insert into student(name) VALUES('usr');
--插入多条数据
insert into student(id,name) VALUES('12','op');
--省略字段(省略字段的值要和字段一一对应)
INSERT INTO student VALUES('14','ni','1544343','光明小区'); --等同于下句,省略了所有字段
INSERT INTO student(id,name,email,address) VALUES('13','ni','1544343','光明小区');
--省略字段增加多条数据
insert into student VALUES(18,'ming','1545','黎明小区'),(19,'zeng','1545','小区');
语法:INSERT INTO 表名([字段1,字段2..]) VALUES('值1','值2'..),[('值1','值2'..)..];
4.2 update更新语句
--指定条件修改数据
UPDATE student SET name='xiao' WHERE id='14';
--没有指定条件会把name这个字段的值都给修改掉
UPDATE student SET name='xiao';
--指定条件对多个字段修改
UPDATE student SET name='ok',address='月湖小区' where id=14;
--指定多个字段对多个值修改数据
UPDATE student SET email='ok',address='月亮小区' where id=13 and name='xiao';
语法:UPDATE 表名 SET 字段1=值1,[字段2=值2...] WHERE 条件[];
where条件语句操作符:
<>或!=不等于
between……and……介于什么之间 如:5和10之间数字
and 和,用于同时匹配两个或多个条件, 如:where id=1 and name='xiao';
or 匹配满足其中一个条件即可 如:where id id=1 or name='xiao';
<= 小于等于;>=大于等于;>大于;<小于;=等于
like 用于匹配字符串 如 where name like '%小明%';查询含有’小明‘这个字符串的
in 匹配数字范围的条件 如: where id in (1,10);
4.3 delete删除语句
--限定条件删除一条数据
DELETE FROM student where id='1';
--删除整个表中的数据,不会删除表
DELETE FROM student1;
--DELETE支持回滚数据,就是数据删除了之后数据可以重新回来
和TRUNCATE和区别:TRUNCATE不支持回滚
5、DQL查询数据(最重要)
Data QueryLanguage
数据查询语言
SELECT [ALL | DISTINCT]
{* | table.* | [table.field1[as alias1][,table.field2[as alias2]][,...]]}
FROM table_name [as table_alias]
[left | right | inner join table_name2] -- 联合查询
[WHERE ...] -- 指定结果需满足的条件
[GROUP BY ...] -- 指定结果按照哪几个字段来分组
[HAVING] -- 过滤分组的记录必须满足的次要条件
[ORDER BY ...] -- 指定查询记录按一个或多个条件排序
[LIMIT {[offset,]row_count | row_countOFFSET offset}]; -- 指定查询的记录从哪条至哪条
--select可以查询很多:如:字段,常量,变量,表达式,函数
--基本查询语句。查询所有字段数据
SELECT * FROM student;
--查询个别字段
SELECT id,name FROM student;
--查询限定条件的姓名字段数据,并给name字段起别名
SELECT name as '姓名' FROM student where id='14';
--查询版本
SELECT VERSION();
--查询name字段,并对查询结果去重
SELECT DISTINCT name from student;
--查询含有’小明‘字符串的数据
SELECT * from student WHERE name LIKE '%小明%';
5.1 分组查询
语法:
select 分组函数,分组后的字段
from 表
【where 筛选条件】
group by 分组的字段
【having 分组后的筛选】
【order by 排序列表】
where 用于分组前条件查询,having 用于分组后对结果进行筛选
-- 查询不同科目的平均分、最高分、最低分且平均分大于90
-- 核心:根据不同的课程进行分组
SELECT SubjectName,AVG(StudentResult),MAX(`StudentResult`),MIN(`StudentResult`)
FROM result r
INNER JOIN `subject` s
on r.SubjectNo=s.SubjectNo
GROUP BY r.SubjectNo
HAVING AVG(StudentResult)>90;
5.2 连接查询
-- 查询列参加程序设计考试的同学信息(学号,姓名,科目名,分数)
SELECT s.`StudentNo`,`StudentName`,`SubjectName`,`StudentResult`
FROM student s
INNER JOIN result r
on s.StudentNo=r.StudentNo
INNER JOIN `subject` sub
on r.SubjectNo=sub.SubjectNo
where SubjectName='课程设计';
自连接:把一张表分成两张表,自己连接自己
SELECT a.`courseid` AS '父课程',b.`courseid` AS '子课程'
FROM course AS a,course AS b
WHERE a.courseid=b.pid;
6.函数
6.1 常用函数
-- 数学运算
SELECT ABS(-8); -- 绝对值
SELECT CEIL(5.1); -- 向上取整
SELECT CEILING(5.1); -- 向上取整
SELECT RAND(); -- 返回0~1之间的一个随机数
SELECT SIGN(-10); -- 返回一个数的符号;0返回0;正数返回1;负数返回-1-- 字符串函数
SELECT CHAR_LENGTH('我喜欢你'); -- 字符串长度
SELECT CONCAT('我','喜欢','你'); -- 拼接字符串
SELECT INSERT('我喜欢',1,1,'超级') -- INSERT(str,pos,len,newstr) 从str的pos位置开始替换为长度为len的newstr
SELECT UPPER('zsr'); -- 转大写
SELECT LOWER('ZSR'); -- 转小写
SELECT INSTR('zsrs','s'); -- 返回第一次出现字串索引的位置
SELECT REPLACE('加油就能胜利','加油','坚持'); -- 替换出现的指定字符串
SELECT SUBSTR('坚持就是胜利',3,6); -- 返回指定的字符串(源字符串,截取位置,截取长度)
SELECT REVERSE('rsz'); -- 反转字符串-- 时间日期函数
SELECT CURRENT_DATE(); -- 获取当前日期
SELECT CURDATE(); -- 获取当前日期
SELECT now(); -- 获取当前时间
SELECT LOCALTIME(); -- 本地时间
SELECT SYSDATE(); -- 系统时间SELECT YEAR(NOW());
SELECT MONTH(NOW());
SELECT DAY(NOW());
SELECT HOUR(NOW());
SELECT MINUTE(NOW());
SELECT SECOND(NOW());-- 系统信息
SELECT SYSTEM_USER();
SELECT USER();
SELECT VERSION();
6.2聚合函数
函数 | 描述 |
---|---|
max | 最大值 |
min | 最小值 |
sum | 和 |
avg | 平均值 |
count | 计算个数 |
SELECT count(id) from student;
SELECT min(id) from student;
SELECT max(id) from student;
SELECT sum(score) from student;
SELECT avg(score) from student;