【数据库笔记03】(MySQL数据库语句,思维导图记忆)
【数据库笔记03】(MySQL数据库语句,思维导图记忆)
- 安装
- 登录数据库服务器
- SQL编写顺序
- SQL执行顺序
- DDL命令(还有一些查看命令)
- 创建数据库 —— create database
- 修改数据库 —— alter database
- 删除数据库 —— drop database
- 查看所有数据库 —— show databases
- 查看创建数据库时的语句 —— show create database
- 切换选中的数据库 —— use
- 切换选中的数据库 —— select database();
- --------------------------------------------------------------------------
- 创建表 —— create table
- 查看所有表 —— show tables
- 查看创建表语句 —— show create table
- 查看表结构 —— desc
- 修改表 —— alter
- 添加列 —— add
- 修改列 —— modify
- 修改列名 —— change
- 删除列 —— drop
- 修改表名 —— rename ==一般不要用==
- 修改表字符集 ——character set ==一般不要用==
- 删除表 —— drop
- DML命令
- DQL命令(还有一些查看命令)
- 查看表中所有值—— select
- 查看表中部分数据—— select
- 别名查询 —— as
- 去除重复的值 —— distinct
- 在查询出来的结果做运算处理
- 条件查询 —— where
- 排序查询 —— order by (asc / desc)
- 聚合函数 —— sum 、max 、min 、avg 、count
- 分组 —— group by (having)
- 插入中文乱码问题
详细可见不同版本的mysql参考手册
安装
登录数据库服务器
mysql -u用户名 -p密码
SQL编写顺序
select------from------where------group by------having-------order by
SQL执行顺序
from------where------group by------having------select-------order by
DDL命令(还有一些查看命令)
创建数据库 —— create database
create database 数据库名字;
create database 数据库名字 character set 字符集; //字符集如utf8
create database 数据库名字 character set 字符集 collate 校对规则; //校对规则如utf8_bin(默认规则不区分大小写)
修改数据库 —— alter database
alter database 数据库名; //如修改数据库的字符集编码方式
删除数据库 —— drop database
drop database 数据库名;
查看所有数据库 —— show databases
show databases;
查看创建数据库时的语句 —— show create database
show create database 数据库名;
切换选中的数据库 —— use
use 数据库名;
切换选中的数据库 —— select database();
select database();
--------------------------------------------------------------------------
创建表 —— create table
create table 表名(
列名 列类型 约束;
列名2 列类型 约束;
)
java | sql列类型 |
---|---|
int | int |
char/String | char:固定长度 / varchar:可变长度 |
double | double |
float | float |
boolean | boolean |
date | date:YYYY-MM-DD / time:hh:mm:ss |
~ | datetime:YYYY-MM-DD hh:mm:ss(默认null) |
~ | timestamp:YYYY-MM-DD hh:mm:ss(默认当前时间) |
- | text(用来存文本) |
- | blob(存二进制) |
列的约束 | 语句 |
---|---|
主键约束 | primary key(唯一且不为空 ) |
唯一约束 | unique |
非空约束 | not null |
分析实体(学生)
- id
- 姓名
- 性别
- 年龄
create table students(
sid int primary key,
sname varchar(31),
sex int,
age int
)
查看所有表 —— show tables
show tables;
查看创建表语句 —— show create table
show create table 表名;
查看表结构 —— desc
desc 表名;
修改表 —— alter
添加列 —— add
alter table 表名 add 列名 列的类型 列的约束;
修改列 —— modify
alter table 表名 modify 列名 列的类型 列的约束;
总是忘记打分号 /(ㄒoㄒ)/~~
修改列名 —— change
alter table 表名 change 列名 要改的名字 列的类型;
注意:要加列的类型否则会报错,也可以更改类型。
删除列 —— drop
alter table 表名 drop 列名;
修改表名 —— rename 一般不要用
rename table 表名 to 要更改的表名;
修改表字符集 ——character set 一般不要用
alter table 表名 character set 字符集;
删除表 —— drop
drop table 表名;
DML命令
插入数据 —— insert
insert into 表名(列名,列名,列名) values(值,值,值);
insert into 表名 values(值,值,值); //这里的值必须是所有的列
insert into 表名(列名,列名) values(值,值); //可以插入部分列
insert into 表名 values(值,值,值),(值,值,值),(值,值,值); //批量插入
删除记录 —— delete
delete from 表名 where 条件语句; //没有where条件会删除全部数据
小知识:delete和truncate有什么区别
- delete:DML 一条一条删除表中数据
- truncate:DDL 先删除表,再重建表
- 哪个比较高效?
– 数据比较少,delete高效。
– 数据多,truncate高效。
truncate 表名; //删除表中所有数据
更新表记录—— update
update 表名 set 列名=列的值,列名2=列的值 where 条件; //后面不加where条件会将表中所有数据都改变
DQL命令(还有一些查看命令)
查看表中所有值—— select
select * from 表名;
查看表中部分数据—— select
distinct:去除重复数据
select [distinct] [*] [列名,列名2] from 表名 where 条件;
//建一个商品类别表 商品类别id 名字 描述
create table category(
cid int primary key auto_increment, //auto_increment主键自增
cname varchar(10),
cdesc varchar(31)
);
// 建立商品表
create table product(
pid int primary key auto_increment,
pname varchar(10),
price double,
pdate timestamp, //取当前时间
cno int
);
别名查询 —— as
表别名 (用于多表查询)
先从from执行,select用于选择显示哪些列内容
select p.pname,p.price from product p; //as可以省略
列别名 (用于多表查询)
select pname as 商品名称,price as 商品价格 from product; //as可以省略
去除重复的值 —— distinct
select distinct price from product;
在查询出来的结果做运算处理
select *,price*0.85 as 折后价 from product;
条件查询 —— where
select * from product where 条件;
标准sql不等于<>
between and
select * from product where price between 100 and 10000; //前小后大
逻辑 —— and 、or 、not
模糊查询 —— like
_ 代表一个字符
% 代表多个字符
例如:查出所有名字带口红的商品
select * from product where pname like '%口红%';
例如:查出所有名字第二个字是宝的商品
select * from product where pname like '_宝%';
在范围中获得值 —— in
例如:查出所有商品是3、4类的商品
select * from product where cno in (3,4);
排序查询 —— order by (asc / desc)
select * from product order by price; //默认是升序
select * from product order by price desc;
select * from product where pname like '%口红%' order by price desc;
聚合函数 —— sum 、max 、min 、avg 、count
注意:where后面不能加聚合函数
需要用子查询
select * from product where(select avg(price) from product);
分组 —— group by (having)
having 可以接聚合函数,出现在分组之后
where 不可以接聚合函数,出现在分组之前
查出每个类别的商品有多少个
select cno,count(cno) from product group by cno;
根据cno分组,分组统计每组商品的平局价格,且平均商品价格>60
select cno,avg(price) from product group by cno having avg(price) >60;
插入中文乱码问题
先停止服务
修改这个文件,将数据库服务器的编码方式改变
改成gbk
开启服务,注意这里要重新进入MySQL,修改表的编码方式