数据库的基本概念
*MySQL服务启动
1.手动
2.cmd-->services.msc 打开服务的窗口
3.以管理员身份打开cmd
net start mysql 启动
net start mysql 关闭
*MySQL登录
1. mysql -uroot -proot
2. mysql -hip -uroot -p连接目标的密码
3. mysql --host=ip --user=root --password=连接目标的密码
*MySQL退出
1. extit
2. quit
*MySQL的目录结构
1. 安装目录
配置文件 my.ini
2. 数据目录
数据库:文件夹
表:文件
数据:data
一、SQL
1.什么是SQL:
Structured Query Language:结构化查询语言,定义了操作所有关系型数据库的规则
每一种数据库操作的方式存在不一样的地方,称为“方言”
2.SQL通用语法
1. SQL语句可以单行或多行书写,以分号结尾
2. 可以使用空格和缩进来增强语句的可读性
3. MySQL数据库的SQL语句不区分大小写,建议使用大写
4. 三种注释
* 单行注释:--(一定要加空格)注释内容 或#注释内容(mysql 特有) 多行注释:/*注释内容*/
3. SQL的分类
二、DDL:操作数据库、表
1.操作数据库:CRUD
1. creat:创建
1.创建数据库:
create database 数据库名称;
2.创建数据库,判断不存在,再创建:
create database if not exists 数据库名称;
3.创建数据库并指定字符集:
create database 数据库名称 charac set字符集名;
4.练习:创建db4数据库,判断是否存在并制定字符集为gbk
create database if not exists db4 character gbk;
2.Retrieve:查询
1.查询所有数据库的名称:
show databases;
2. 查询某个数据库的创建语句:
show creat database 数据库名称;
3. Update:修改
修改数据库的字符集:
alter database 数据库名称 charac set 字符集名称;
4. Delete:删除
删除数据库:
drop databases 数据库名称;
判断数据库存在,存在再删除
drop database if exists 数据库名称;
5.使用数据库
1. 查询当前正在使用的数据库名称
select database();
2. 使用数据库
use 数据库名称
2.查询表
1.C(Create):创建
语法:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
.......
列名n 数据类型n
)
数据类型:
1)int
2)double:score double(num1, num2)
num1:总位数
num2:小数点后位数
3)date:只包含年月日,yyy-MM-dd
4)datetime:日期,包含年月日时分秒 yyy-MM-dd HH:mm:ss
5)timestamp:时间错类型 ,包含年月日时分秒 yyy-MM-dd HH:mm:ss
如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
6)varchar:字符串
name varchar(num):num为最大字符数
创建表
create table student(
-id int,
-name varchar(32),
-age int,
-score double(4,1),
-birthday date,
-insert_time timestamp
);
复制表
create table 表名 like 要复制的表名
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 表名 modify 列名 新数据类型;
alter table 表名 change 要修改的列名 新列名 新数据类型;
5.删除列
alter table 表名 drop 列名;
4.D(Delete) :删除
drop table 表名;
drop table if exists 表名;
客户端图形化工具SQLYog
三、DML:
1.添加数据
1.语法:insert into 表名(列名1,列名2,····列名n) values(值1,值2,····值n);
2.注意:
(1)列名和值要一一对应
(2)如果表名后,不定义列名,则默认给所有列赋值
insert into 表名 values(值1,值2,····值n);
(3)除了数字其他要用引号(单双都可以)引用
2.删除数据
1.语法:
delete from 表名 [where 条件];
2.注意:
如果不加条件,则删除表中所有记录
3.删除所有记录
delete from 表名; 不推荐使用,有多少条记录就会执行多少次删除操作
TRUNCATE TABLE 表名; 推荐使用 (删除表,再创建一个相同的表)
3.修改数据
1.语法:
update 表名 set 列名1 = 值1,列名2 = 值2, 。。。[where 条件];
例子:UPDATE stu SET age = 22 WHERE id = 4;
2.注意:
如果不加任何条件则会将表中记录全部修改
四、DQL:查询语句
1.排序查询
1.语法:order by 字句
order by 排序字段1 排序方式1,排序字段2,排序方式2
2.排序方式:
ASC:升序,默认的。
DESC:降序
3.注意:
如果有多个排序条件,则当前一个条件一样时,才回判断第二个条件
2.聚合函数:将一列数据作为一个整体,进行纵向的计算
SELECT 聚合函数(NAME) FROM 表名;
1. count:计算个数
(1)尽量选择非空的列:主键
(2)count(*)
2. max:计算最大值
3. min:计算最小值
4. sum:求和
5. avg:计算平均值
注意:聚合函数的计算会排除NULL值
解决方案:
1. 选择不包含非空的列进行计算
2. IFNULL函数
3.分组查询
1. 语法:group by 分组字段;
2. 注意:
(1)分组之后查询的字段:分组字段、聚合函数
(2)where 和 having 的区别:
where 在分组之前进行限定,如果不满足条件,则不参与分组。
having在分组之后进行限定,如果不满足结果,则不会被查询出来
where 后不可以跟聚合函数,having可以进行聚合函数的判断
4.分页查询
1.语法:limit 开始的索引,每页查询的条数
2.公式:开始的索引 = (当前的页码 - 1) * 每页显示的条数
5.条件查询
1.where字句后跟条件
2.运算符:
@ > 、 < 、 <= 、 >= 、= 、 <>
@ BETWEEN...AND
@ IN(集合)
@ LIKE:模糊查询
占位符:
_ 单个任意字符
% 多个任意字符
@ IS NULL
@ and 或 &&
@ or 或 ||
@ not 或 |
约束
*概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性。
*分类:
1.主键约束:primary key
2.非空约束:not null
3.唯一约束:unique
4.外键约束:foreign key
# 非空约束:not null,值不能为NULL
1.创建表时添加约束
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) NOT NULL -- name 为非空
);
2.创建表后,添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
3.删除name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);
# 唯一约束:unique,值不能重复
-- 创建表时,添加唯一约束
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) UNIQUE -- 添加了唯一约束
);
-- 注意mysql中,唯一约束可以有多个null
-- 删除唯一约束
ALTER TABLE STU DROP INDEX NAME;
-- 在创建表后,添加唯一约束
ALTER TABLE stu MODIFY name VARCHAR(20) UNIQUE;
# 主键约束:primary key
1.注意:
1.含义:非空且唯一
2.一张表只能有一个字段为主键
3.主键就是表中记录的唯一标识
2.在创建表时,添加主键约束
create table stu(
id int primary key, -- 添加了主键约束,id不可以重复,不可以为null
name varchar(20)
);
3.删除主键
ALTER TABLE stu DROP PRIMARY KEY;
4.创建表后,添加主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY;
5.自动增长
概念:如果某一列是数值类型的,使用auto_increment 可以完成值的自动增长
在创建表时,添加主键约束,并且完成主键自增长
create table stu(
id int primary key auto_increment, -- 给id添加主键约束
name varchar(20)
);