MySQL——数据库操作
MySQL数据类型
- TINYINT
- SMALLINT
- INT
- BIGINT
- FLOAT(M , D) M表示的是有效数字的长度,D表示的是小数点后面的位数
- DOUBLE(M , D)
- DECIMAL(M , D) 这个和FLOAT差不多,也是表示小数的,但是这个比FLOAT更准确,不会存在0.1 + 0.2 != 0.3(因为IEEE 754带来的问题。)
- NUMERIC(M , D) 这个和DOUBLE差不多,跟上面那个一样比DOUBLE更准确一点。
- VARCHAR(SIZE) 可变长的,SIZE表示最多能包含几个字符
- TEXT 长文本
- MEDIUMTEXT 中等长度文本,比上面那个长。
- BLOG 二进制形式的长文本数据
- DATETIME 时间日期
- TIMESTAMP 时间戳
创建数据库
创建数据库,同一个系统里面不能有同名的数据库。
(普通创建)
create database hc_learn;
或者
(如果不存在就创建,如果存在就不会有什么动作)
create database if not exists hc_learn;
创建数据库的名称的时候不能创建以关键字为名字的数据库,如果实在要用就要用到``来标记
create database hc_learn character set utf8;(创建的数据库的字符码集是utf8)
查看数据库
show databases;
可以展现系统里面都有些什么数据库
删除数据库
drop database hc_learn;
选中数据库
use hc_learn;
MySQL——配置文件
修改字符集
- 搜索 服务
- 在服务里面找到MySQL
- 右键属性
- 找到执行文件的路径
- 通过--defaults-file 后面的路径,找到配置文件
- 修改配置文件里面的character-set-server和default-character-set让他们都等于utf8
- 保存文件
- 重启MySQL服务器
MySQL——数据表操作
创建表
注意:表操作之前记得选中数据库
创建数据表,同一个数据库里面不能有同名的数据表。
create table user(id int ,username varchar(32) , password varchar(32));
查看数据库里面有什么表
show tables;
查看表结构
desc user;
删除数据表
drop table user;
MySQL——数据操作
插入数据
insert into user values(1 , "橘黄小鹿" , "0706");
插入数据的时候指定列
insert into user (username , password) values("HCLL" , "0706");
这个就是指定插入username和password
一次插入多行
insert into user (username , password) values("HC" , "0706"),("LL" , "0706");
查找数据
select * from user;
指定列查询
select id , username from user;
查询字段为表达式
select id + 10 , username from user;
排序
默认是升序排序
select * from user order by id;
降序
select * from user order by id desc;
多列排序
select * from user order by id , username desc;
去重
select distinct password from user;
条件查询
select * from user where id > 2;
模糊查询
select * from user where username like 'H%';
%代替的是任意个任意字符
_代替的是一个任意字符
分页查询
只查询出前三条
select * from user limit 3;
查询第1条记录从第二条开始.
select * from user limit 1 offset 2;
综合查询
将上面的语句结合起来的时候,我们应该先写where后写order by最后写limit。
修改操作
update user set id = id + 10;
null加任何数都是null
删除操作
delete from user where id > 12;
MySQL——约束
not null
非空,不能是空值
unique
值唯一,不能有重复的。会给列创建索引
default
默认值,就是当不输入的时候就会将默认值输入。
primary key
主键
auto_increment
自增主键,可以手动设置,手动设置之后后面添加的是按照现在最大值之后增加的。
foreign key
外键
要在最后定义外键
create table user(
id int ,
username varchar(32) ,
password varchar(32) ,
classId int ,
-- 外键写法
foreign key(classId) references class(id);
);
foreign key(classId) :当前表的哪一列
references class(id) :依赖的是哪一个外部表的哪一列
在插入的时候会查询,插入到外键的值在外部表的值是否存在
外部表的主键或者unique才能当外键
MySQL——表的设计
一对一
把所有的信息都放到一个表里面,耦合度比较高。
比如一个学生里面放很多关于学生的信息。
一对多
班级和学生
一个班级可以有很多的学生
但是一个学生只能有一个班级
多对多
比如教室和老师
一个教室的学生可以有多个老师来教,一个老师也可以教多个教室的学生。
MySQL——复杂操作
新增
将查找的结果插入到表里面。
insert into user select * from student;
将select查找出来的结果插入到user里面。
注意,插入表的列的个数和类型要相互匹配的。
聚合查询
count
计算行数
select count(*) from user;
select count(id) from user;
这两个的区别就在于对于空值的计算,*是会计算空值的,如果是列的话,是不会计算空值的。
sum
求和
avg
求平均值
max
求最大值
min
求最小值
分组查询
group by
select * from user group by password;
显示的是第一行元素。
where
分组之前,使用条件筛选
select id,username,count(password) from user where username != '橘黄小鹿' group by password;
where先写后面写group by
having
分组之后,使用条件筛选
select id ,username ,count(password) from user group by password having count(password) > 1;
先写group by 后写having
多表查询
笛卡尔积
select * from student , class;
查询每个学生在什么班级
select * from student , class where student.classId = class.ClassId;
join on
select * from student join class;效果等于select * from student , class;
select * from student join class on student.classId = class.ClassId;
效果等于
select * from student , class where student.classId = class.ClassId;
left join on
如果两张表里面的数据没有完全对应,那么会让左边的数据显示完全。
mysql> select * from student left join class on student.classId = class.ClassId;
right join on
如果两张表里面的数据没有完全对应,那么会让右边的数据显示完全。
mysql> select * from student right join class on student.classId = class.ClassId;
in
select * from student where classId in (select ClassId from class where ClassName = 'java');
not in
select * from student where classId not in (select ClassId from class where ClassName = 'java');
union
select * from student where classId = 1
union
select * from student where classId = 3;
内连接和外连接的区别:
外连接分为左外连接和右外连接。如果联合查询,左侧的表完全显示我们就说是左外连接;右侧的表完
全显示我们就说是右外连接。
内连接只会显示两张表都有的数据