SQL
1.数据库操作
创建数据库(增)
create database 数据库名
create database 数据库名 character set 字符集 collect 字符集校对规则
删除数据库(删)
drop database 数据库名
修改数据库(改)
alter database 数据库名 character set 字符集 collect 字符集校对规则
查找数据库(查)
show databases //查找所有数据库
show create database 数据库名 //查找指定数据库
切换数据库
use 数据库名
查看当前正在使用的数据库
select database()
2.数据库表的操作
创建表
create table 表名(字段名 字段类型(长度) 约束,字段名 字段类型(长度) 约束...);
字段类型:一个实体对应一个表,一个实体属性对应表的一个字段
Java中的类型 MySql中的类型
byte/short/int/long tinyint/smallint/int/bigint
float float
double double
boolean bit
char char/varchar
char和varchar的区别:
char:代表固定长度的字符或字符串
varchar:代表可变长度的字符或字符串
date date/time/datetime/timestamp
date:只有日期
time:只有时间
datetime:既有时间又有日期
timestamp:既有时间又有日期
datetime与timestamp区别:
datetime:如果没有向该字段存入值得时候,数据库使用null存入数
据库中(使用场景:生日字段)
timestamp:如果每没有向该字段存入值得时候,数据库使用当前系统时间存入数据库中(使用场景:注册时间字段)
fill blob/text
约束:保证数据库的完整性
分类:
主键约束: primary key(主键约束默认唯一非空,一般情况下每个表只能有一个主键 ) auto_increment(自增)
唯一约束: unique
非空约束: not null
删除表
drop table 表名;
修改表
修改表:
*添加列: alter table 表名 add 列名 类型(长度) 约束;
*修改类型,长度和约束: alter table 表名 modify 新的列名 新的类型(长度) 新的约束;
删除列: alter table 表名 drop 列名;
修改列名称: alter table 表名 change 旧列名 新列名 类型(长度) 约束;
修改表名: rename table 表名 to 新表名;
修改表字符集: alter table 表名 character set 字符集;
查看表
查看所有表:
show tables;
查看表结构
desc 表名;
3.数据库表记录的操作
添加表记录:
插入某些列: insert into 表名 (字段名1,字段名2,字段名3...) values(值1,值2,值3...);
插入全部列: insert into 表名 values (值1,值2,值3...);
注意:1.值得类型要与数据库中的类型一致]
2.值得顺序要与数据库中的表列的顺序一致
3.值得长度最大不能超过列设置的最大长度
4.值得类型是字符串或者日期类型时使用单引号引起来.
修改表记录
update 表名 set 字段名=值,字段名=值 where 条件;
注意:1.值的类型以字段的类型一致
2.值得最大长度不能超过字段设置的最大长度
3.字符类型和日期类型添加单引号
删除表记录
delete from 表名 where 条件;
注意:1.删除表的记录指的是表中分一行记录
2.没有条件则默认删除所有记录
删除表中的所有记录两种方法:
delete from 表名; => delete属于DML,一条一条记录的删除,事务可以作用在DML语句上
truncate table 表名; =>truncate属于DDL,将表删除然后创建一个结构一样的表,事物不能控制DDL的
查询表记录:(重点)
语法: select[distinct] */字段名 from 表名 [条件];
1.基础信息
查询所有信息: select * from 表名;
查询单个字段信息: select 字段名1,字段名2... from 表名;
别名查询信息: select 字段1+字段2+字段3 as 别名 from 表名; ==> 别名使用 as 关键字
2.条件查询
使用where子句
* >,<,>=,<=,<>,=
* like:模糊查询
* in:范围查询
* 条件关联: and,or,not
selete * from where 字段名 like '李_'; => '_'表示只代表一个字符
select * from where 字段名 like '李%' => '%'代表任意个数的字符
selete * from where 字段名 in (范围);
3.排序查询
使用 order by字段名称 asc/desc; =>asc代表升序,desc代表降序;
一个排序条件查询:
select * from 表名 order by 字段名 asc/desc; => 默认升序
多个排序条件查询:
selete * from 表名 order by 字段名1 asc/desc,字段名2 asc/desc; =>使用逗号分割,首先根据字段1排序,如果数据相同则根据字段2进行排序
注意:带条件的排序查询,有先后顺序,条件在前排序在后
eg: selete * from 表名 where 字段名1 like '李%' order by 字段名2 desc;
selete sum(字段名) from 表名; 获取单个字段综合
selete sum(字段名1),sum(字段名2) from 表名; => 获取多个字段(字段1和字段2 )的总和;
selete sum(字段名) from 表名 where 条件; ==>获取符合条件的字段名的总和
selete sum(字段1名)+sum(字段名2)+sum(字段名3) from 表名; =>通过统计列求各字段总和
selete sum(字段名1+字段名2+字段名3) from 表名; => 通过统计行求个字段的总和
5.分组查询
select 字段名1,count(*) from orderitem group by 字段名2; => 按字段2分组查询字段1的个数;
*注意:where 的子句后面不能跟着聚合函数,如果使用带有聚合函数的的条件过滤(分组后条件过滤),需要使用关键字:having
select 字段名1,sum(字段名2) from orderitem group by 字段名3 having sum(字段名2)>5000; => 按字段3分组查询字段1,条件为字段2总和>5000的数据;