【数据库笔记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命令
插入数据 —— insert
删除记录 —— delete
小知识:delete和truncate有什么区别
更新表记录—— update
DQL命令(还有一些查看命令)
查看表中所有值—— select
查看表中部分数据—— select
别名查询 —— as
表别名 (用于多表查询)
列别名 (用于多表查询)
去除重复的值 —— distinct
在查询出来的结果做运算处理
条件查询 —— where
between and
逻辑 —— and 、or 、not
模糊查询 —— like
在范围中获得值 —— in
排序查询 —— order by (asc / desc)
聚合函数 —— sum 、max 、min 、avg 、count
分组 —— group by (having)
插入中文乱码问题
详细可见不同版本的mysql参考手册
安装
【数据库笔记02】(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,修改表的编码方式