创建数据库:create database 数据库名 [character set 字符集][collate 校对规则] 注: []表示可选
查看数据库:
查看所有数据库:show databases;
查看数据库结构:show create database 数据库名;
删除数据库:drop database 数据库名;
修改数据库:alter database 数据库名 character set 字符集; 注意:1.不能修改数据库名,2.是utf8不是utf-8
其他操作:
切换数据库:use 数据库名;
查看正在使用的数据库:select database();
创建表【重点】
create table 表名(
字段名 字段类型 [约束],
字段名 字段类型 [约束],
........
字段名 字段类型 [约束]
);
-- 注意: 小括号中最后定义的字段后面不要加逗号
-
浮点/双精度型
-
默认的范围 float或者double
-
指定范围 float(M,D) eg: float(4,2) 表达的范围: -99.99~99.99
-
-
字符串
-
固定长度 char(n) eg: char(20), 最大能存放20个字符. ‘aaa ’, 还是占20个字符的空间
-
可变长度 varchar(n) eg:varchar(20), 最大能存放20个字符. ‘aaa’, 占3个字符的空间
一般使用varchar(n) 节省空间; 如果长度(eg:身份证)是固定的话 可以使用char(n) 性能高一点
-
-
关于大文件
-
一般在数据库里面很少存文件的内容, 一般存文件的路径
-
一般不使用二进制存, 使用varchar(n)存文件的路径
-
约束
-
即规则,规矩 限制;
-
作用:保证用户插入的数据保存到数据库中是符合规范的
-
not null: 非空 ; eg: username varchar(40) not null username这个字段不能为空,必须要有数据
-
unique:唯一约束, 后面的数据不能和前面重复; eg: cardNo varchar(18) unique; cardNo字段不能出现重复的数据
-
primary key;主键约束(非空+唯一); 一般用在表的id列上面. 每一张表基本上都有id列的, id列作为记录的唯一标识的
-
auto_increment: ==自动增长,必须是设置了primary key之后,才可以使用auto_increment==
-
id int primary key auto_increment
id不需要我们自己维护了, 插入数据的时候直接插入null, 自动的增长进行填充进去, 避免重复了.
需求: 创建一张学生表(含有id字段,姓名字段,性别字段. id为主键自动增长)
create table student(
id int primary key auto_increment,
name varchar(40) not null,
sex varchar(25)
);
查看所有的表:show tables;
查看表的定义结构:desc 表名;
修改表【掌握】
-
增加一列;
alter table 表名 add 字段 类型 约束;
-
修改列的类型约束;
alter table 表名 modify 字段 类型 约束 ;
-
修改列的名称,类型,约束;
alter table 表名 change 旧列名 新列名 类型 约束;
-
删除一列;
alter table 表名 drop 列名;
-
修改表名 ;
rename table 旧表名 to 新表名;
删除表【掌握】
create table product(
pid int primary key auto_increment, -- 只有设置了auto_increment id列才可以赋值为null
pname varchar(40) not null,
price double,
num int
);
插入指定列: insert into 表(列,列..) values(值,值..);
插入所有列: insert into 表 values(值,值....);
-- 注意:
-- - 插入特定的列:没有赋值的列,系统自动赋为null(前提是当前列没有设置not null 约束)
-- - 字段名与值的类型、个数、顺序要一一对应。
-- - 值不要超出列定义的长度。
-- - 插入的日期和字符串,使用引号括起来。
-- - 默认所有列插入,values里面必须给表中每一个字段赋值,一般主键给一个null
更新记录
update 表名 set 列名 = 值, 列名 =值,... [where 条件];
删除记录
方式一: delete from 表名 [where 条件]
方式二: truncate table 表名;
DQL操作表记录-查询【重点】
-
语法:
-
查询所有的列:
select * from 表名;
-
-
查询某张表特定列:
select 列名,列名,... from 表名;
-
去重查询:
select distinct 列名 from 表名;
-
-
别名查询:
select 列名 as 别名,... from 表名 as 别名;
as可以省略的-
列运算查询(+,-,*,/等):
select 列运算 from 表名;
-
-
基本条件查询:
select .... from 表名 where 条件;
-
条件:
-
比较运算符:
> ,>=,<,<=,=,<>,!=
-
逻辑运算符:
-
逻辑与: and (&&)
-
逻辑或: or (||)
-
-
逻辑非: not (!)
-
between...and...
-
in(值1,值2,...)
-
like 规则;
-
_ 匹配一个字符
-
% 匹配多个字符(大于等于0个字符)
-
-
-
排序查询
select ... from 表名 order by 字段名 [asc|desc];
select ... from 表名 order by 字段名 [asc|desc],字段名 [asc|desc],...;
注意:
1.asc表示升序,desc表示降序
2.不写默认是升序
-- 1. 练习: 以分数降序查询所有的学生
select * from student order by score desc;
select * from student order by score asc;
-- 2. 练习: 以分数降序查询所有的学生, 如果分数一致,再以age降序
select * from student order by score desc,age desc;
聚合函数
max(列名) | 求这一列的最大值 |
min(列名) | 求这一列的最小值 |
avg(列名) | 求这一列的平均值 |
count(列名) | 统计这一列有多少条记录 |
sum(列名) | 对这一列求总和 |
分组查询
SELECT ... FROM 表名 [where 条件] group by 列名 [having 条件];
where 子句 | 1) 对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,即先过滤再分组。2) where后面不可以使用聚合函数 |
having字句 | 1) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。2) having后面可以使用聚合函数 |
分页查询
select ... from 表名 limit a,b;
a:从哪里开始查询, 从0开始计数 ,省略a不写,默认就是从0开始
b:查询的数量【固定的,自定义的】
规律: limit (页码-1)*每页显示的条数,每页显示的条数;