MySQL 基础学习一 数据库以及单表的基本操作
2018-03-12 20:02
1126 查看
数据库操作
创建数据库
create database 数据库名称 character set 字符集名称 collate 校对名称;示例:
创建数据库
create database db1;
设定字符集
create database db2 character set gbk;
校对, 一般用于排序, 每一种校对规则的排序方式不同
create database db3 character set utf8 collate utf8_bin;
要查看字符集的校对可以使用
show collation lilke ‘utf8%’;
显示数据库信息
显示数据库服务器中所有数据库show databases;
如果要搜索指定信息的数据库
show databases like “pattern”;(pattern 格式后面会介绍)
显示目标数据库的定义信息
show create database 数据库名称;
显示当前正在操作的数据库;
select database();
修改和删除数据库
修改数据库字符集/校对alter database 数据库名称 character set 字符集名称 collate 校对名称;
示例: alter database db1 character set utf8 collate utf8_bin;
删除数据库
drop database 数据库名称;
表操作
进行表操作之前, 需要了解MySQL中的一些定义有关的知识:SQL数据类型
Java | MySQL |
---|---|
byte, short, int, long | tinyint, smallint, int, bigint |
float | float |
double | double |
boolean | bit |
char, string | char, varchar |
date | date, time, datetime, timestamp |
file | blob, text |
2) 其中 varchar类型为可变长度字符串, 若赋值不足定义长度, 则缩小定义长度至赋值长度, 若赋值超出长度则会报错
3) date 类型代表日期, time 类型代表时间, datetime 顾名思义, timestamp(时间戳) 则和 datetime 一样可以代表日期和时间, 但是 datetime 它的默认值为 null, 而 timestamp 的默认值为当前的系统时间;
4) blob, 二进制文件, 用于存入一些非文本内容, text 则用来存入文本内容, 通常情况下, 这两个类型很少使用, 都是用数据流来完成上传和下载.
约束
单表约束:主键约束:
primary key 可以通过该字段来确定到这个表, 默认唯一且非空, 主键约束通常情况下一个表只有一个, 但是也有多个的情况
唯一约束
unique 字段或列中所存入的值是不可重复的
非空约束
not null 顾名思义, 不能为空
创建表及表内定义的操作
create table 表名 ( 字段名1 字段类型 约束, 字段名2 字段类型 约束, …);create table user ( id int primary key auto_increment, username varchar(20) unique, password varchar(20) not null, age int, birthday date );
显示当前数据库的所有表
shoow tables;
显示目标表内的定义信息
desc 表名;
增加一列
alter table 表名 add 列名 类型(长度) 约束
alter table user add gender varchar(10);
修改目标列的定义信息
alter table 表名 modify 列名 类型(长度) 约束
alter table user modify gender varchar(20) not null;
删除一列
alter table 表明 drop 列名
alter table user drop gender;
改列名称
alter table 表名 change 旧列名 新列名 类型(长度) 约束
alter table user change gender sex varchar(20) not null;
修改表名
rename table 表名 to 新表名
rename table user to users
修改表字符集
alter table 表名 character set 字符集
alter table user character set gbk
更改列定义的注意事项:
如果表内已经存入了数据, 并且有数据不满足新更改的约束的话, 操作会失败提示报错
对表内记录的操作
插入内容插入部分列
insert into 表名 (列名1, 列名2, …) values (值1, 值2, …);
insert into user (id, username, password) values (null, ‘admin’, ‘admin’);
插入所有列
insert into 表名 values (值1, 值2, …);
insert into user values (null, ‘xiaobao’, ‘123’, 15, ‘1993-09-01’);
值的顺序以及类型要对应一致, 长度不能超过定义值, 字符或字符串和日期类型要加上单引号或者双引号
auto_increment 的属性可以直接给null, 系统会从1开始递增序列
修改内容
update 表名 set 字段1 = 新值1, 字段2 = 新值2 … 查询语句
修改一整列的值
update user set password = “abc”;
修改某一项的某列
update user set password = “abc” where username = “xiaobao”;
修改某一项的多列
update user set password = “abc”, age = 34 where username = “xiaobao”;
删除内容
delete from 表 查询语句
删除某一条记录
delete from user where id = 1;
删除所有记录
delete from user;
属于DML语句. 一条一条记录的删除, 事务可以作用于DML语句
truncate table user;
属于DDL语句, 删除整个表, 再创建一个结构一样的表, 事务不能作用与DDL语句
这部分内容这次不做介绍
查询
换了大标题, 这部分内容应该说是核心内容了, 利用下面这个表来做介绍create table exam( id int primary key auto_increment, name varchar(20), english int, chinese int, math int ); insert into exam values (null,'张三',85,74,91); insert into exam values (null,'李四',95,90,83); insert into exam values (null,'王五',85,84,59); insert into exam values (null,'赵六',75,79,76); insert into exam values (null,'田七',69,63,98); insert into exam values (null,'李老八',89,90,83);
基本查询
select [distinct] * 列名 from 表 where a = b;distinct: 去掉重复值
select distinct english from exam;
english成绩重复的不做显示
select name, english + chinese + math from exam;
别名查询 修改了显示的别名
select name, english + chinese + math as sum from exam;
条件查询 利用where
<, >, >=, <=, <>, =like 模糊查询
in 范围查询
条件关联 and, or, not
查找叫李四的
select * from exam where name = “李四”;
查找叫李四且英语成绩大于90的
select * from exam where name = “李四” and english > 90;
查找姓李的
seleft * from exam where name like “李%”;
%和_
like子句中 _可代表1个字符, %可以代表多个字符;
如”%李”表示以李结尾, 而”_李”在此之上还限制了字数只有2个;
in 和 between
查找英语成绩为65, 79 或 83的
select * from exam where english in (65, 79, 83);
查找数学成绩再80和90之间的, 包括80 和 90
select * from exam where math between 80 and 90;
排序查询 order by, asc升序, desc降序
默认升序
按语文成绩升序显示
select * from exam order by chinese asc;
等同于
select * from exam order by chinese;
设置倒序
select * from exam order by chinese desc;
多个条件,即在语文成绩相同条件下, 按英语成绩升序来排列
select * from exam order by chinese desc, english asc;
试着写了一个前面知识点的整合
将姓李的人按英语成绩倒序排列
select * from exam where name like “李%” order by english desc;
按照三科总成绩升序排列
select, chinese + english + math as sum from exam order by sum;
分组统计查询
聚合函数, 对列操作函数 | 意义 |
---|---|
sum() | 求和 |
count() | 计数 |
max() | 列中最大值 |
min() | 列中最小值 |
avg() | 平均数 |
select sum(english) from exam;
查找英语成绩大于60的人数
select count(*) from exam where english >= 60;
查找英语成绩之和 和 所有科目综合之和
select sum(english), sum(math) from exam;
select sum(english+math+chinese) as allsum from exam;
查找总人数
select count(*) from exam;
注意事项:
上面的例子中, 求和的两种方法其实是不同的
select sum(english)+sum(math)+sum(chinese) from exam;
这样做, 若有成绩为null, 则会丢失一行, null与其他值相加为null;
select sum(english+math+chinese) from exam;
改进方法:
若有null则置0
select sum(ifnull(english,0)+math+chinese) from exam;
select *, max(math) as 最大值 from exam;
select min(chinese) from exam;
分页函数 limit
limit [offset,] rows 从M开始, 读N条, M默认是0
select * from 表名 limit, m, n
select * from 表名 limit, n
显示前五条数据
select * from exam limit 5;
显示第五条数据
select * from exam limit 5, 1;
分组查询
group by 字段名称;
统计每类商品的个数
select product, count(*) from orderitem group by product;
统计每类商品的总金额
select product, sum(price) from orderitem group by product;
where子句后面是不能跟着聚合函数的, 若要设置条件, 则要用到关键字 having
select product, sum(price) from orderitem group by product having sum(price) > 5000;
select product, sum(price) as sum from orderitem group by product having sum > 5000;
select product, sum(price) as sum from orderitem group by product having sum > 5000 order by sum;
总结查询的语句顺序
顺序 S F W G H O
select from where group by having order by
9d6b
相关文章推荐
- MySQL学习总结(二)数据库以及表的基本操作
- MySQL 学习基础笔记-MySQL基本数据库的操作
- MySQL基础-数据库基本操作
- MySQL的日志基础知识及基本操作学习教程
- android的基础学习:SQLite存储方式以及数据库操作
- MySQL学习总结(四)数据的基本操作以及MySQL运算符和常用函数
- MYSQL入门学习之八:数据库及表的基本操作
- php基础系列:从用户登录处理程序学习mysql扩展基本操作
- MySQL学习笔记2:数据库的基本操作
- MySql学习笔记-介绍以及基本操作
- MySQL的日志基础知识及基本操作学习教程
- MySQL学习笔记2:数据库的基本操作
- Mysql基础—对数据库和表的基本操作
- [MySQL学习]MySQL学习之路(一)131028:数据库的基本操作和数据表的基本操作
- Java学习笔记——JDBC之与数据库MySQL的连接以及增删改查等操作
- 数据库学习--B树(B-Tree)的由来、数据结构、基本操作以及数据库索引的应用
- 【转】MYSQL入门学习之八:数据库及表的基本操作
- MySQL学习笔记2:数据库的基本操作
- php基础系列:从用户登录处理程序学习mysql扩展基本操作
- MySQL基础2---数据库的基本操作