4.sql操作数据库和表
==DDL 创建数据库和数据表以及修改等操作.关键词:create,drop,alter
1.操作数据库:CRUD
(1)C(create):创建
*创建数据库:
create database + 数据库名称;
*创建数据库,判断不存在,再创建:
create database if not exists + 数据库名称;
*创建数据库制定字符集
create database 数据库名称 character set + 字符集
(2)R(retrieve):查询
*查询所有数据库的名称:
show databases;
*查询某个数据库的字符集:查询某个数据库的创建语句
show create database
(3)U(update):修改
*修改数据库的字符集
alter database 数据库名称 character set 字符集
(4)D(Delete):删除
*删除数据库
drop database 数据库名称;
*判断数据库存在,再删除
drop database if exists 数据库名称;
(5)使用数据库
*查询当前正在使用的数据库名称
select database();
*使用数据库
use 数据库名称;
*创建表
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
(2)R(retrieve):查询
*查询某个数据库中所有的表名称
show tables;
*查询表结构
desc 表名;
(3)U(update):修改
1.修改表名 alter table 表名 rename to 新的表名;
2.修改表的字符集 alter table 表名 character set 字符集;
3.添加一列 alter table 表名 add 列名 数据类型;
4.修改列名称 类型 alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型(只改数据类型)
5.删除列 alter table 表名 drop 列名;
(4)D(Delete):删除
* drop table if exists 表名;
* drop table 表名;
6.DML:增删改表中数据
(1)添加数据
*语法:
insert into 表名(列名1,列名2...列名n) values(值1,值2,...值n);
*注意:
1.列名和值要一一对应.
2.如果表名后,不定义列名,则默认给所有列添加值
3.除了数字类型,其他类型需要使用引号引起来(单引双引都可以)
(2)删除数据
*语法
delete from 表名[where 条件] 例:Delect from sut where id=1;
*注意
1.如果不加条件,则删除表中所有记录(不推荐,有多少条记录就会执行多少次删除操作)
2. truncate table 表名;(推荐使用)-- 先删除表,然后在创建一个一模一样的空表 (属于DDL的SQL语句)
(3)修改数据
* 语法:
update 表名 set 列名1=值1,....[where 条件];
*注意:
1.如果不加任何条件,则会将表中的所有记录全部修改
7.DQL:查询表中的记录
* select * from 表名;
1.语法:
select
字段列表
from 表名列表
where 条件列表
group by 分组字段
having 分组之后的条件
order by 排序
limit 分页限定
1. 条件查询
(1)Wher子句后跟条件
(2)运算符 > < >= <=
Between 值1 and 值2 等同于字段 >=值1 and 字段<=值2
字段 in(值1,…,值n)等同于 字段=值1 or 字段=值2,
Is null 如果值为null 不能使用= 要使用is null
2. 模糊查询
基本语法:where 字段 like; 字符:%表示任意字符(0-n个字符),_表示任意字符
3. 排序查询
语法: order by 子句
order by 排序字段1, 排序字段2…..
排序方式:
升序:asc 默认的.
降序:desc
注意:如果有多个排序条件,则当前面的条件值一样时,才会判断第二条件
4. 聚合函数查询
将一列数据作为一个整体,进行纵向的计算
(1) count:计算个数
(2) max:计算最大值
(3) min:计算最小值
(4) sum:计算和
(5) avg:计算平均值
*注意:聚合函数的计算会排除null
解决方案: 选择不包含非空的列进行计算,Ifnull函数
5. 分组查询
基本语法: group by 字段要有共同的特点进行分组
注意: 分组之后查询的字段:分组字段,聚合函数
Where和having区别:
1.where在分组之前进行限定,如果不满足条件则不参与分组
having在分组之后进行限定,如果不满足结果,则不会被查询出来
2. where后不可以跟聚合函数,having可以进行聚合函数的判断
查询时,关键词的先后顺序:
Select 字段
From 表名
Where 分组前条件判断
Group by 分组
Having 分组后条件判断
Order by 排序
6. 分页查询
分页:数据太多,一次性查询出来,展示效果不好,就是用户的体验不好
分页操作,不同的数据库分页基本原理不一样
Mysql: limit 进行分页,其他数据库不能使用limit进行分页
公式: 开始的索引=(当前的页码-1)*每页显示的条数
概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性
分类:
1. 主键约束:primary key
2. 非空约束:not null
3. 唯一约束:unique
4. 外键约束:foreign key
1.非空约束:not null
1. 在创建表时添加约束
2. 创建表完后,添加非空约束
2.唯一约束:unique 在同一列不能有相同的值
注意:唯一约束可以有Null值,但是只能有一条记录为null
删除唯一约束:
Alter table stu drop index 列名;
3.主键约束:primary key
一. 注意:
1. 含义:非空且唯一
2. 一张表只能有一个字段为主键
3. 主键就是表中记录的唯一标识
二.在创建表时,添加主键约束
Create table stu(
Id int primary key, -- 给id添加主键约束
Name varchar(20)
);
删除主键:
Alter table stu drop primary key;
自动增长:
概念如果某一列是数值类型的,使用 auto_increment 可以完成值的自动增长
在创建主键时:
Create table stu(
Id int primary key auto_increment, -- 给id添加主键约束
Name varchar(20)
);
删除自动增长:
Alter table stu modify id int;