【数据库笔记03】(MySQL数据库语句,思维导图记忆)

【数据库笔记03】(MySQL数据库语句,思维导图记忆)


【数据库笔记03】(MySQL数据库语句,思维导图记忆)
详细可见不同版本的mysql参考手册

安装

【数据库笔记02】(MySQL数据库安装)

登录数据库服务器

mysql -u用户名 -p密码

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

SQL编写顺序

select------from------where------group by------having-------order by

SQL执行顺序

from------where------group by------having------select-------order by

DDL命令(还有一些查看命令)

创建数据库 —— create database

create database 数据库名字;

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

create database 数据库名字 character set 字符集;  //字符集如utf8
create database 数据库名字 character set 字符集 collate 校对规则;  //校对规则如utf8_bin(默认规则不区分大小写)

修改数据库 —— alter database

alter database 数据库名;	//如修改数据库的字符集编码方式

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

删除数据库 —— drop database

drop database 数据库名; 

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

查看所有数据库 —— show databases

show databases;

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

查看创建数据库时的语句 —— show create database

show create database 数据库名;

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

切换选中的数据库 —— use

use 数据库名;

切换选中的数据库 —— select database();

select database();

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

--------------------------------------------------------------------------

创建表 —— 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

分析实体(学生)

  1. id
  2. 姓名
  3. 性别
  4. 年龄
create table students(
	sid int primary key,
	sname varchar(31),
	sex int,
	age int
)

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

查看所有表 —— show tables

show tables;

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

查看创建表语句 —— show create table

show create table 表名;

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

查看表结构 —— desc

desc 表名;

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

修改表 —— alter

添加列 —— add

alter table 表名 add 列名 列的类型 列的约束;

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

修改列 —— modify

alter table 表名 modify 列名 列的类型 列的约束;

总是忘记打分号 /(ㄒoㄒ)/~~
【数据库笔记03】(MySQL数据库语句,思维导图记忆)

修改列名 —— change

alter table 表名 change 列名 要改的名字 列的类型;

注意:要加列的类型否则会报错,也可以更改类型。
【数据库笔记03】(MySQL数据库语句,思维导图记忆)
【数据库笔记03】(MySQL数据库语句,思维导图记忆)

删除列 —— drop

alter table 表名 drop 列名;

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

修改表名 —— rename 一般不要用

rename table 表名 to 要更改的表名;

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

修改表字符集 ——character set 一般不要用

alter table 表名 character set 字符集;

【数据库笔记03】(MySQL数据库语句,思维导图记忆)
【数据库笔记03】(MySQL数据库语句,思维导图记忆)

删除表 —— drop

drop table 表名;

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

DML命令

插入数据 —— insert

insert into 表名(列名,列名,列名) values(值,值,值);

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

insert into 表名 values(值,值,值); //这里的值必须是所有的列
insert into 表名(列名,列名) values(值,值); //可以插入部分列
insert into 表名 values(值,值,值),(值,值,值),(值,值,值); //批量插入

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

删除记录 —— delete

delete from 表名 where 条件语句;  //没有where条件会删除全部数据

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

小知识:delete和truncate有什么区别

  • delete:DML 一条一条删除表中数据
  • truncate:DDL 先删除表,再重建表
  • 哪个比较高效?
    – 数据比较少,delete高效。
    – 数据多,truncate高效。
truncate 表名; //删除表中所有数据

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

更新表记录—— update

update 表名 set 列名=列的值,列名2=列的值 where 条件; //后面不加where条件会将表中所有数据都改变

【数据库笔记03】(MySQL数据库语句,思维导图记忆)
【数据库笔记03】(MySQL数据库语句,思维导图记忆)

DQL命令(还有一些查看命令)

查看表中所有值—— select

select * from 表名;

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

查看表中部分数据—— 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)
);

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

// 建立商品表
create table product(
	pid int primary key auto_increment,
	pname varchar(10),
	price double,
	pdate timestamp, //取当前时间
	cno int
);

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

别名查询 —— as

表别名 (用于多表查询)

先从from执行,select用于选择显示哪些列内容

select p.pname,p.price from product p; //as可以省略

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

列别名 (用于多表查询)

select pname as 商品名称,price as 商品价格 from product; //as可以省略

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

去除重复的值 —— distinct

select distinct price from product; 

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

在查询出来的结果做运算处理

select *,price*0.85 as 折后价 from product; 

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

条件查询 —— where

select * from product where 条件; 

【数据库笔记03】(MySQL数据库语句,思维导图记忆)
标准sql不等于<>

between and

select * from product where price between 100 and 10000;  //前小后大

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

逻辑 —— and 、or 、not

模糊查询 —— like

_ 代表一个字符
% 代表多个字符
例如:查出所有名字带口红的商品
select * from product where pname like '%口红%';  

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

例如:查出所有名字第二个字是宝的商品
select * from product where pname like '_宝%';  

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

在范围中获得值 —— in

例如:查出所有商品是3、4类的商品
select * from product where cno in (3,4);

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

排序查询 —— order by (asc / desc)

select * from product order by price; //默认是升序

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

select * from product order by price desc; 

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

select * from product where pname like '%口红%' order by price desc; 

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

聚合函数 —— sum 、max 、min 、avg 、count

注意:where后面不能加聚合函数
【数据库笔记03】(MySQL数据库语句,思维导图记忆)
【数据库笔记03】(MySQL数据库语句,思维导图记忆)

需要用子查询
select * from product where(select avg(price) from product); 

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

分组 —— group by (having)

having 可以接聚合函数,出现在分组之后
where 不可以接聚合函数,出现在分组之前

查出每个类别的商品有多少个
select cno,count(cno) from product group by cno; 

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

根据cno分组,分组统计每组商品的平局价格,且平均商品价格>60
select cno,avg(price) from product group by cno having avg(price) >60; 

【数据库笔记03】(MySQL数据库语句,思维导图记忆)

插入中文乱码问题

【数据库笔记03】(MySQL数据库语句,思维导图记忆)
先停止服务
【数据库笔记03】(MySQL数据库语句,思维导图记忆)
修改这个文件,将数据库服务器的编码方式改变
【数据库笔记03】(MySQL数据库语句,思维导图记忆)
改成gbk
【数据库笔记03】(MySQL数据库语句,思维导图记忆)
开启服务,注意这里要重新进入MySQL,修改表的编码方式
【数据库笔记03】(MySQL数据库语句,思维导图记忆)

【数据库笔记03】(MySQL数据库语句,思维导图记忆)