整理来源:
MySQL 有这一篇就够(呕心狂敲37k字,只为博君一点赞!!!)_老赖的小弟的博客-CSDN博客_mysql
MySQL数据库入门学习(多图预警+新手向~)_mathor的博客-CSDN博客_数据库学习入门
数据库安装
重启MySQL服务器
net start mysql
配置
使用自己配置好的mysql或php_study配置的mysql两种连接要登陆其中一个,必须关掉另一个mysql的相关服务
MySQL>数据库>数据表>数据
数据库操作
- 查询数据库:show databases;
- 创建数据库:create database xx charset = (字符编码,例如utf8)
如果想要创建不重复的数据库方法:
- 显示数据库信息:show create database XX(数据库名);
- 更改数据库的字符编码:alter database XX character set utf8;
- 删除数据库:drop database XX(数据库名);
如果想要创建不重复的数据库方法:drop database if exists XX (数据库名字)
- 选择数据库(进入):use XX(数据库名);
数据表的操作
字段1名 数据类型,
字段2名 数据类型,
.......
字段n名 数据类型
);
* ~~~
数据类型 int 整型
tinyint 整型(0-256)
decimal 浮点型(总位数,小数位数) 例如 decimal(3,1)
char(X) 定长字符型 例如 char(10)
varchar(X) 可变长度字符型 例如varchar(10)
text 大段文本
binary 二进制(存储照片等)
- 查看所有表:show tables;
- 显示创建表:
show create table XX(表名);
show create table XX(表名) G;
- 显示表结构:
describe(或desc) XX(表名);
- 删除表:
drop table XX(表名);
drop table XX,XX,XX......;
数据表的约束
约束条件 | 说明 |
---|---|
PRIMARY KEY | 主键约束用于唯一标识对应的记录 |
FOREIGN KEY | 外键约束 |
NOT NULL | 非空约束 |
UNIQUE | 唯一性约束 |
DEFAULT | 默认值约束,用于设置字段的默认值 |
- 主键约束:primary key用于唯一的标识表中的每一行,被标识为主键的数据在表中是唯一的且其值不能为空。
非空约束:字段的值不能为空
字段名 数据类型 NOT NULL;
- 默认值约束:给数据表中的字段指定默认值,即当在表中插入一条新记录时若未给该字段赋值,那么,数据库系统会自动为这个字段插人默认值
字段名 数据类型 DEFAULT 默认值;
- 唯一性约束:保证数据表中字段的唯一性,即表中字段的值不能重复出现
字段名 数据类型 UNIQUE;
- 外键约束:常用于多张表之间的约束
<!--暂不学-->
数据的基本操作
- 插入数据:insert into XX(表名) (字段1,字段2,字段3......) values (值1,值2,值3.......);
字段可以和数据库中的字段顺序不一致,但是值和插入字段的顺序必须一致
插入字段是可以省略的,这时插入的值和数据表的字段顺序和个数必须一致
同时插入多组数据:INSERT INTO 表名 [(字段名1,字段名2,...)]VALUES (值 1,值 2,…),(值 1,值 2,…),...;
查询数据:
- 选取所有数据:select * from XX(表名);
- 选取某(些)字段:select 字段1,字段2,字段3......(或用"*"代替所有字段) from XX(表名);
- 选取条件:select * from XX(表名)where 字段1 = 值1 and 字段2 = 值2 and ......;
- 选取范围:select * from stu where score > 90 or score < 60;
- 排序:select * from XX(表名) order by 字段x asc(desc降序);(默认就是升序)
- 选取n个数据:select * from XX(表名) limit n;
- 从查询结果中过滤重复数据:select distinct 字段 from XX(表名);
| 关系运算符 | 说明 |
| :----------: | :--------: |
| = | 等于 |
| <> | 不等于 |
| != | 不等于 |
| < | 小于 |
| <= | 小于等于 |
| > | 大于 |
| >= | 大于等于 |
- in关键字查询:
IN关键字用于判断某个字段的值是否在指定集合中。如果字段的值恰好在指定的集合中,则将字段所在的记录将査询出来。eg: select * from student where sid in ('S_1002','S_1003');
- between and 查询:
BETWEEN AND用于判断某个字段的值是否在指定的范围之内。如果字段的值在指定范围内,则将所在的记录将查询出来 。eg: select * from student where age between 15 and 18;
- and 和 or查询:连接多个查询条件
LIKE关键字查询:
- 普通字符串查询:select * from student where sname like 'wang';
- 含有%通配的字符串:select * from student where sname like 'li%'/'%li'/'%li%';
- 含有_通配的字符串:下划线通配符只匹配单个字符,如果要匹配多个字符,需要连续使用多个下划线通配符 _
例如,字符串“ab_”匹配以字符串“ab”开始长度为3的字符串,如abc、abp等等;字符串“a__d”匹配在字符“a”和“d”之间包含两个字符的字符串,如"abcd"、"atud"等等。
group by 进行分组查询:
- 与聚合函数一起使用
- 与having一起使用
eg:统计工资总和大于8000的部门 MySQL命令:
select sum(salary),departmentnumber from employee group by departmentnumber having sum(salary)>8000;
- 删除数据:delete from XX(表名) where 字段x = 值x;
删除全部数据:delete from XX;
- 修改数据:
update XX(表名) set 字段1 = 值1,字段2 = 值2 where 条件;
update XX(表名) set 字段1 = 值1;
- sum(); 求和 select sum(字段x) from XX(表名);
avg(); 求平均值 select avg(字段x) from XX(表名);
max(); 求最大值 select max(字段x) from XX(表名);
min(); 求最小值 select min(字段x) from XX(表名);
count(); 记录数 select count(字段x) from XX(表名);
在某字段条件下使用函数 select 函数名() from XX(表名) where 字段x = 值x;
别名设置:
- 为表取别名:SELECT * FROM 表名 [AS] 表的别名 WHERE .... ;
- 为字段取别名:SELECT 字段名1 [AS] 别名1 , 字段名2 [AS] 别名2 , ... FROM 表名 WHERE ... ;
表的关联
- 多对一:多对一(亦称为一对多)是数据表中最常见的一种关系。
- 多对多:多对多是数据表中常见的一种关系。
- 一对一:在开发过程中,一对一的关联关系在数据库中并不常见;因为以这种方式存储的信息通常会放在同一张表中。
## 关联查询
eg:查询java班的所有学生:select * from student where classid=(select cid from class where cname='Java');
## 关联删除
delete from student where classid=(select cid from class where cname='Java');
delete from class where cname='Java';
子查询
一个查询语句嵌套在另一个查询语句内部的查询;该查询语句可以嵌套在一个 SELECT、SELECT…INTO、INSERT…INTO等语句中
带比较运算符的子查询
eg:select * from class where cid=(select classid from student where sname='张三');
带EXISTS关键字的子查询
EXISTS关键字后面的参数可以是任意一个子查询, 它不产生任何数据只返回TRUE或FALSE,当返回值为TRUE时外层查询才会 执行
eg:select from class where exists (select from student where sname='王五');
带ANY关键字的子查询
表示满足其中任意一个条件就返回一个结果作为外层查询条件
eg: select * from class where cid > any (select classid from student);
带ALL关键字的子查询
带ALL关键字的子査询返回的结果需同时满足所有内层査询条件
eg:select * from class where cid > all (select classid from student);
顺序
查询语句的书写顺序和执行顺序
select ===> from ===> where ===> group by ===> having ===> order by ===> limit
查询语句的执行顺序
from ===> where ===> group by ===> having ===> select ===> order by ===> limi