1. 数据库介绍
1.1 什么是数据库?
存放数据的仓库,类似内存(机器重启数据丢失),记事本,excel
软件开发中用专业软件存储数据,数据库软件
mysql软件管理—>仓库—>各个表—>数据
一行数据:记录
一列数据:字段
1.2常见哪些数据库软件
oracle: oracle 收费
DB2 : IBM 金融领域/银行 收费
sqlserver: 微软 收费
mysql: 瑞典 oracle: 免费
1.3 为啥有SQL语句
- 所有数据库软件做的事情是一致:管理数据/将数据存入/取出/修改/删除
- 为了避免各个公司产品底层不同差异性,相关标准组织定义一个标准 SQL
SQL: structer query language 结构化查询语句
DDL: data defition language:数据定义语言 对仓库创建/修改 对表进行创建/修改 (重点)
DML: data manipulation language:数据操作语言 对表上的数据插入/修改/删除 (重点)
DQL: data query languange:数据查询语言 将表上的数据查询 (重点)
DCL: data control languange:可以创建其它的用户 tom/mary/lucy ,让tom/mary/lucy登录系统
2. 对数据库的操作
2.1 查看mysql软件下的所有的仓库
show databases;
2.2 创建仓库
需求:在mysql软件创建自己的仓库 mydb1
语法格式: create database 仓库名称;
create database mydb1;
2.2 查看创建仓库语句,查看仓库默认编码
语法格式:
show create database mydb1;
2.3创建仓库的时候指定编码
需求:在mysql软件创建自己的仓库 mydb2,指定码表为utf8
语法格式: create database 仓库名称 character set 编码码表;
create database mydb1 character set utf8;
2.4 删除仓库
需求:删除仓库mydb2
语法格式: drop database 仓库名称;
drop database mydb2;
2.5 修改仓库编码
需求:修改mydb1下编码修改为gbk
语法格式: alter database 仓库名称 character set 码表
alter database mydb1 character set gbk;
2.6 查看当前在操作那个仓库
语法格式: select database();
2.7 切换仓库
需求: 将当前操作切换到 mydb2;
语法格式: use 仓库名称;
3. 对仓库下表结构操作
3.1 创建表
语法格式:
create table 表名(
列名称 列类型(长度),
列名称 列类型(长度),
列名称 列类型(长度),
列名称 列类型(长度)
);
java支持类型:
基本类型: 4类8种 byte short int long double float char boolean 整数/小数/字符/布尔
引用: 字符串 String 时间: Date
只要数据库软件,底层支持3大类类型
数字/字符串/时间日期
mysql支持类型
数字: int/bigint float/double
时间日期: date datetime timestamp
字符/字符串/大段文本:char/varchar/text
区分char和varchar区别
需求,创建员工表 emp 姓名,密码,性别,生日信息
create table emp(
name varchar(50),
password varchar(50),
sex char(10),
birthday date
);
3.2 查看当前仓库下所有的表
show tables;
3.3 查看创建表结构
格式: desc 表名; description:描述
3.4 创建表的时候为表上设置约束规则
语法格式:列名 数据类型 约束规则
4个约束规则:
1_ 自增长 auto_increment
2_ 主键约束规则 当前列中的数据不允许重复,主键列的数据必须有,不能为空 primary key
3_ 唯一约束 unique
4_ 非空 not null
create table emp2(
id int primary key auto_increment,
username varchar(50) unique not null,
password varchar(50) not null,
sex char(10),
birthday date
);
3.5 修改表结构
(1)增加列
语法格式: alter table 表名 add 列名 类型(长度) 约束
alter table emp2 add salary double;
alter table emp2 add age int;
(2)修改现有列类型/长度/约束规则
语法格式: alter table 表名 modify 列名 类型(长度) 约束;
alter table emp2 modify birthday date not null;
alter table emp2 modify username varchar(60) unique not null;
(3)修改列名称
语法格式 : alter table 表名 change 旧列名 新列名 类型(长度) 约束规则;
alter table emp2 change username name char(40) unique not null;
(4)删除现有列
语法格式: alter table 表名 drop 列名;
alter table emp2 drop age;
(5)修改表名 rename:重命名
语法格式: rename talbe 旧表名 to 新表名
rename table emp2 to person;
(6)修改表的编码集合
语法格式:alter table 表名 character set 编码集
alter table person character set gbk;
(7)删除表
语法格式:drop table 表名;
drop table emp;
4. 对表上的数据进行控制
常见的操作: CRUD
create 创建 read:读取 update:更新 delete:删除
4.1 向表中插入数据
语法格式:
insert into 表名(列名1,列名2,列名3,列名4) values(值1,值2,值3,值4);
insert into person(id,name,password,sex,birthday,salary)
values(null,'tom','1234','nv','1992-2-2',30000);
insert into person values (null,'mary','1234','nv','1992-2-2',35000);
表中部分列插入数据 :如果某些列设置了非空约束,这些列必须插入数据
insert into person(id,name,password,birthday)
values(null,'jack','11111','1990-1-1');
insert into person(name,password,birthday)
values('lucy','11111','1990-1-1');
4.2 修改表上数据
语法格式:update 表名 set 列名1=值1 , 列名2=值2 ... where 条件语句
UPDATE person SET PASSWORD = 'abcdef' ;
UPDATE person SET salary=88888 WHERE NAME='张三';
UPDATE person SET NAME='zhaoliu' , PASSWORD='zhaoliu' WHERE id=3;
4.3 删除数据
语法格式1:delete from 表名 [where 条件 ]
语法格式: truncate [table] 表名
DELETE FROM person WHERE NAME ='mary';
DELETE FROM person ;
TRUNCATE TABLE person;
TRUNCATE person;
delte from person ; truncate table person ;区别是什么?
- truncate方式删除数据底层:先将表扔掉drop,重新创建一个和原先person结构一摸一样表结构,速度快
- delete方式删除数据底层:按行擦除
4.4 查询数据
4.4.1查询表中的所有数据
select * from 表名;
4.4.2 查询表上的部分列数据
语法格式 select 列名1 , 列名2 , ....列名n from 表名
4.4.3 查看所有学生的姓名年龄
SELECT NAME , age FROM student;
4.4.4 按条件查询数据
语法格式 select 列名1 , 列名2 , ....列名n from 表名 where 条件
SELECT * FROM student WHERE age >=24;
(1)关系运算符
可以出现关系运算符 列名 关系元素符 具体值
SELECT * FROM student WHERE age >24;
SELECT * FROM student WHERE age <24;
SELECT * FROM student WHERE age <=24;
SELECT * FROM student WHERE age !=24;
SELECT * FROM student WHERE age <> 24;
(2) and or not
查询年龄>23,并且成绩>80的同学信息
SELECT * FROM student WHERE (age > 23) AND (score > 80);
查询成绩在80~100(包含)之间的学生信息
SELECT * FROM student WHERE (score>=80) AND (score<=100);
(3)between …and…
语法格式: select * from 表名 where 列名 between a and b ; 包括a和b
SELECT * FROM student WHERE score BETWEEN 84 AND 100;
(4)in
语法格式 select * FROM student where 列名 in (具体值1,具体值2,具体值3,具体值4)
SELECT * FROM student WHERE age IN(18,23,25);
(5)like
语法格式 select * from student where 列名 like '%A_' %:任意0个或者多个字符 _任意单个字符
(6)不能通过 列名= null 方式来判断------------> 列名 is null
查询所有没有录入年龄的学生的信息
SELECT * FROM student WHERE age IS NULL;
(7)过滤重复值查询 distinct
SELECT DISTINCT age FROM student
表中的数据什么时候属于重复的数据:
- 如果查出来的结果仅仅有一列 ,age
- 如果查出来的结果仅仅有2列 , 只有当着2个列的数据完全一致的时候,才是重复的数据
假如查询学生的姓名,年龄
stuName stuAge stuSex
tom 18 男
tom 19 男
(8)排序查询
单条件排序
语法格式: select * from 表名 order by 列名 asc
语法格式: select * from 表名 order by 列名 desc
多条件排序
语法格式: select * from 表名 order by 列名1 desc , 列名1 asc
(9)对列上起别名
语法格式: select 列名1 as 别名1 , 列名2 as 别名1 , 列名3 as 别名1 from 表名 where 条件
select 列名1 别名1 , 列名2 别名1 , 列名3 别名1 from 表名 where 条件
需求1、给年龄和分数起别名
SELECT age AS '年龄' , score AS '成绩' FROM student;
需求2、省略关键as 再次查询
SELECT age '年龄' , score '成绩' FROM student;
(10)统计查询
-
统计函数
count函数: 统计个数
语法格式: select count(*) from 表名
语法格式: select count(列名) from 表名 -
sum函数 : 求和
语法格式: select sum(列名) from 表名
-
avg函数使用
作用:对列中的数据求平均值
语法格式: select avg(列名) from 表名;
- max / min 函数使用
作用: 求最大/小值
语法格式: select max(列名) , min(列名) from 表名;
(11)ifnull
SELECT age ,score, age+ score FROM student;
如果某个值为null参与运算,整体的结果就是null
SELECT IFNULL(age,0) AS aa , score FROM student;
SELECT IFNULL(age,0) , score , IFNULL(age,0)+score FROM student;
(12)作用:截取小数位数
语法格式: truncate(列名,小数的位数)
SELECT IFNULL(age,0) , score , TRUNCATE( IFNULL(age,0)+score ,2 ) FROM student;
(13)分组查询
select 分组条件 from student group by 分组条件
select 分组条件 , 聚合函数 from student group by 分组条件
5. 备份和恢复数据
5.1 备份数据
语法:mysqldump -u 用户名 -p 数据库名 > 磁盘SQL文件路径
5.2 恢复数据
语法:mysqldump -u 用户名 -p 数据库名 < 磁盘SQL文件路径
5.3 复制一张表
复制 employee 表 => employee2
create table employee2 like employee;
insert into employee2 select * from employee;