一.什么是数据库
数据库是存储数据和管理的仓库,进行复杂度较高的数据交换业务处理。
二.数据库工具安装下载
1.安装服务器控制面板控制数据库的启动
下载网址:小皮面板-好用、安全、稳定的Linux服务器面板! (xp.cn)
点击启动显示上图所示即可完成
2.安装数据库操作工具
安装好Navicat for MySQL我们就可以操作我们的数据库了
进入工具里面,我们点击连接,可以看到相对应的选项,连接名可以随便使用,但不能重复
主机号,端口,默认即可 用户名跟密码我们在小皮面板工具中查看相对应的用户名及密码
三. 数据库能够做些什么呢?
1.存储大量数据,方便检索和访问
2.保持数据信息的一致,完整
3.共享和安全
4.通过组合分析,产生新的有用信息
四. 命令行操作数据库
1.命令行连接MySQL
//语法
mysql -h 服务器主机地址(本机可省略) -u 用户名 -p密码(回车输入密码)
//示例
mysql -u root -proot
mysql -u root -p
2. 结构化查询语言
名称 | 解释 | 命令举例 |
DML (数据操作语言) | 用来操作数据库中所包含的数据 | insert update delete |
DDl (数据定义语言) | 用于创建和删除数据库对象等操作 | create drop alter |
DQL (数据查询语言) | 用来对数据库中的数据进行查询 | select |
DCL (数据控制语言) | 用来控制数据库组件的存取许可、存取权限等 | grant commlt rollback |
3.操作数据库用户
// 创建用户语法
create user '用户名'@'localhost' identified by '密码'
//例子 localhost/127.0.0.1都可以使用
CREATE USER 'aaaa'@'127.0.0.1' IDENTIFIED BY '123';
4.创建数据库
//创建数据库语法
create database 数据库名;
//例子 创建了一个名为abc的数据库
create database abc;
注意:分号为结束符,不可缺
5.查看数据库列表
//查看数据库列表语法
show databases;
6.选择数据库
//选择数据库语法
use 数据库名;
注意:数据库名不存在会报错
报错代码:[SQL]use aaa;
[Err] 1049 - Unknown database 'aaa'
7.删除数据库
//删除数据库语法
drop database 数据库名;
五. SQL中的运算符
1.算术运算符
运算符 | 说明 |
+ | 加运算,求两个数或两个表达式相加的和 |
- | 减运算,求两个数或表达式相减的差 |
* | 乘运算,求两个数或表达式相乘的积 |
/ | 除运算,求两个数或表达式相除的商,如5/3的值为1 |
% | 取模运算,求两个数或表达式相除的余数,如:5/3的值为2 |
#算数运算
select 3+2;
select 50-3;
select 32*2;
select 50/10;
select 50%2;
2.赋值运算符
运算符 | 说明 |
= | 把一个数或变量或表达式赋值给另一个变量,如:Name='王华' |
3.逻辑运算符
运算符 | 说明 |
AND | 当且仅当两个布尔表达式都为true时,返回TRUE。与 |
OR | 当且仅当两个布尔表达式 都为false,返回FALSE。或 |
NOT | 布尔表达式的值取反 非 |
4.比较运算符
运算符 | 说明 |
= | 等于,例如:age=23 |
> | 大于,例如:price>100 |
< | 小于 |
<> | 不等于 |
>= | 大于等于 |
<= | 小于等于 |
!= | 不等于(非SQL_92标准) |
select 5>2
#结果为1
注意:数据库中的数据类型没有布尔类型,数据库中数据比较时结果返回0或1 0表示错误,1表示正确
六. 创建表
创建表时多字段使用逗号分隔,保留字用反引号括起来,单行注释:# ,多行注释/**/
/*
创建表语法
create table 表名(
字段 类型,
字段 类型,
字段 类型
)
*/
#创建一个学生表
#if not exists :如果不存在
#zerofill 数值位数小于长度时以0填充,数值位数大于长度时,以实际位数显示
create table if not exists student(
id int(5) zerofill,
names varchar(255),
sex char(1),
birthday Date
)
创建了一个数据表是不是里面内容有很多看不懂,没有关系,我们继续往底下学习一下MySQL的数据类型
1.数值类型
类型 | 说明 | 取值范围 | 存储需求 |
TINYINT | 非常小的数据 | 有符值: -2的7次方 ~ 2的7次方-1 无符号值:0 ~ 2的8次方-1 | 1字节 |
SMALLINT | 较小的数据 | 有符值: -2的15次方 ~ 2的15次方-1 无符号值: 0 ~ 2的16次方-1 | 2字节 |
MEDIUMINT | 中等大小的数据 | 有符值: -2的23次方 ~ 2的23次方-1 无符号值: 0 ~ 2的24次方-1 | 3字节 |
INT | 标准整数 | 有符值: -2的31次方 ~ 2的31次方-1 无符号值:0 ~ 2的32次方-1 | 4字节 |
BIGINT | 较大的整数 | 有符值: -2的63次方 ~2的63次方-1 无符号值:0 ~2的64次方-1 | 8字节 |
FLOAT | 单精度浮点数 | ±1.1754351e -38 | 4字节 |
DOUBLE | 双精度浮点数 | ±2.2250738585072014e -308 | 8字节 |
DECIMAL | 字符串形式的浮点数 | Decimal(M,D) | M+2个字节 |
其中tinyint, int,double最为常用。
2.字符串类型
字符串类型 | 说明 | 长度 |
CHAR[(M)] | 定长字符串 | M字节 |
VARCHAR[(M) | 可变字符串 | 可变长度 |
TINYTEXT | 微型文本串 | 0~2的8次方–1字节 |
TEXT | 文本串 | 0~2的16次方–1字节 |
3.日期类型
日期类型 | 格式 | 取值范围 |
DATE | YYYY-MM-DD,日期格式 | 1000-01-01~ 9999-12-31 |
DATETIME | YY-MM-DD hh:mm:ss: | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
TIME | hh:mm:ss: | -835:59:59 ~ 838:59:59 |
TIMESTAMP | YYYYMMDDHHMMSS | 1970年某时刻~2038年某时刻,精度为1秒 |
YEAR | YYYY格式的年份 | 1901~2155 |
若某日期字段默认值为当前日期,一般设置为TIMESTAMP类型
4.表的操作
1.查看表
# 查看表是否存在
# 选择myschool数据库
use myschool;
#查看所有表
show tables;
# 查看表的定义
# DESCRIBE 表名;或DESC 表名
# 选择myschool数据库
use myschool;
# 查看student表的定义内容
desc student;
2.删除表
在删除表之前,先使用 if exists语句验证表是否存在
# 删除表语法
DROP table 【if exists】表名;
use myschool;
drop table if exists student;
3.修改表
#修改表名
alter table 旧表名 rename 【to】 新表名;
#添加字段
alter table 表名 add 字段名 数据类型【属性】;
#修改字段
alter table 表名 change 原字段名 新字段名 数据类型【属性】;
#删除字段
alter table 表名 drop 字段名;
七.表的约束
1.是否允许空值(not null)
我们首先先思考一下,我们有一个学生信息表,学生的学生可以为空吗?出生表中,身份证号允许为空吗?那当然是不行的。那我们就需要学习一下某些属性在不允许为空的情况下我们该如何去操作。
# 创建user表,内容有 身份证号不允许为空,姓名,性别
caeate table user(
id_card int not null,
name varcahr(255),
sex cahr(1)
);
not null:不允许为空
2.默认值(default)
# 创建一个宠物表 默认名为:小黑
create table pet(
# ZEROFILL 补零 not null 非空 先补零再非空
id int(5) ZEROFILL not null ,
# DEFAULT 默认值
pet_name VARCHAR(255) DEFAULT '小黑',
# COMMENT 注释
price DECIMAL(10,2) comment '价格'
);
3.主键(primary key)
主键是用来唯一标识表中的每一行,用于强制表的实体完整性,主键的列中不允许有相同的数据。
create table aa(
# auto_increment 自增
id int primary key auto_increment,
name varchar(255),
sex char(2)
);
自增:auto_increment
主键的特性:
1.唯一性 2.非空 3. int类型可以设置自增 4.非主键不能设置自增
5.可以由多个字段共同组成主键(联合主键)
联合主键
CREATE TABLE `bb` (
`id` int NOT NULL ,
`name` varchar(255) NOT NULL ,
`sex` varchar(2) NULL ,
PRIMARY KEY (`id`, `name`)
);
上述代码中 id和name都是主键,只要一个数据不一样,数据就还能创建出来,联合主键用于特定场景中。
4.外键 (foreign key)
外键是另一张表的主键,用来和其他表建立关系用的。
作用:保持数据一致性,完整性,主要目的是控制存储在外键中的数据。使两张表形成关联,外键只能引用外表中的列的值或使用空值。
使用规则口诀:外键就是指另外表中的主键。
# 使用修改的形式来创建外键
#学生表
CREATE table Student1(
Student_no varchar(50) not null,
Login_Pwd varchar(20) not null,
Student_Name varchar(50) not null,
Sex char(2) not null,
Gradeld varchar(255) not null,
Phone varchar(255) not null,
Address varchar(255) not null,
BornDate datetime not null,
Email varchar(50) not null
);
#年级表
create table grade1(
gradeld int comment '年级编号',
grade_name varchar(50) comment '年级名'
);
#给学生表中的年级编号添加外键在年级表中的年级编号主键中添加
ALTER TABLE `student1` ADD FOREIGN KEY (`gradeld`) REFERENCES `grade1` (`gradeld`);
# 直接在创建表中直接添加外键
# 创建图书类型
create table btype(
bid int primary key auto_increment,
bname varchar(255)
);
# 创建图书
create table book(
bid int primary key auto_increment,
bname varchar(255),
price double,
type_id int,
#添加外键
foreign key(type_id) references btype(bid)
);
八.添加数据
1.添加数据语法
insert into 表名(字段,字段.....)values(值,值....);
#创建表
create table abc(
id int primary key auto_increment,
name varcahr(255),
age int
);
#添加数据
insert into abc(id,name,age) values(1,'张三',18);
1.字段和值必须一 一对应
2.有外键时,必须符合要求。
3,主键不能重复。
4.字段不需要全部都写,必须要写的字段(没有自增的主键,非空的字段,外键)
5.不写字段时,必须按顺序添加所有数据
6.有自增主键的表,可以忽略主键,也可以使用默认值或空值。
# 创建表
create table abc(
id int primary key auto_increment,
name varchar(255) not null,
age int,
sex char(1)
);
#添加数据字段可以省略
#不写字段时,必须按顺序添加所有数据
insert into abc values(1,'李白',30,'男');
#没有自增的主键,非空的字段,外键必须要写数据
insert into abc(id,name) values(1,'杜甫');
#有自增主键的表,可以忽略主键
insert into abc(name) values('李清照');
insert into abc values(null,'王维');
insert into abc values(default,'白居易');
2.添加数据--默认值
1.有默认值的字段可以不写内容
2. 有默认值的default字段可以代替,使用null,值变成null
CREATE TABLE abc (
`aa` int PRIMARY KEY AUTO_INCREMENT ,
`bb` varchar(255) DEFAULT 'sss' ,
`cc` varchar(255) DEFAULT '默认值'
);
# 有默认值的字段可以不写内容
insert into abc(aa,cc) VALUES(null,'asd');
# 有默认值的default字段可以代替,null使用之后,值变成null
insert into abc values(null,null,null)
insert into abc values(null,DEFAULT,DEFAULT)
3.多行添加
insert into subjects(subject_id,subject_name,class_hour)
values(null,'as',120),
(null,'12',120),
(null,'34',120),
(null,'da2',120),
(null,'av4',120);
使用多行添加用逗号隔开。
九.更新数据
更新数据语法
update 表名 set 需要修改的字段=新的值 where 原字段=值
# 表里数据有一个名字叫'嘻嘻嘻'改为'孟三金' 地址改为北京
update student set student_name='孟三金',address='北京'
where student_name='嘿嘿嘿';
#表里有两个叫孟三金一个性别为男一个性别为女 此时需要把姓名叫孟三金 性别为女 改为张三,性别改为男
update student set student_name='张三',sex='男'
where student_name='孟三金' and sex='女';
# 表里有n个班 其中把1班或南京的学生密码改成654321
update student set login_pwd='654321'
where grade_id=1 or address='南京';
注意: 主键语法允许修改,但是项目中一般不允许修改主键
十. 删除数据
删除表语法
删除考试不及格的学生成绩
-- delete from 表名 [where条件];
DELETE from result where student_result<60;
清空表
# 清空表
-- truncate table 表名;
truncate table result;
十一.事务处理
1.什么是事务
事务是作为单个逻辑工作单元执行的一系列操作。
多个操作作为一个整体向系统提交,要么都执行、要么都不执行
事务是一个不可分割的工作逻辑单元。
2.为什么需要事务处理
数据库事务处理是数据库管理系统(DBMS)的核心功能之一,它对于维护数据的正确性和可靠性至关重要
3.事务的特性
事务必须具备以下四个属性,简称ACID属性
1.原子性(Atomicity)
事务是一个完整的操作,事务的各步操作是不可分的(原子的),要么都执行,要么都不执行。
2.一致性(Conslstency)
当事务完成时,数据必须处于一致状态
3.隔离性(lsolation)
并发事务至今啊彼此隔离、独立,它不应以任何方式依赖于或影响其他事务
4.持久性(Durability)
事务完成后,它对数据库的修改被永久保持
4.如何创建事务
MySQL中支持事务的存储引擎有lnnoDB和BDB
-- 语法
-- 开始事务:
BEGIN;
--提交事务
COMMIT;
--回滚(撤销)事务
ROLLBACK;
5.使用事务解决银行转账问题
# 从张三的账户转出500,存入李四的账户中
#创建一个bank数据表 字段为 id name pwd money
create table bank(
id int primary key auto_increment comment '序号',
name varchar(255) comment '姓名',
pwd varchar(255) commnet '密码',
money double comment '余额'
);
#添加张三 李四的数据
insert into bank(id,name,pwd,money) values(1,'张三','123456',500),(2,'李四','654321',1000);
#进行事务前需要先关闭自动提交
set autocommit=0;
#使用事务进行转账 张三给李四转账500元
BEGIN;
update bank set money=moeny-500 where name='张三'
update bank set money=moeny+500 where name='李四'
commit;
end;
#事务结束之后,需要把自动提交重新打开
set autocommit=1;
6.自动关闭和开启事务
默认情况下,每条单独的SQL语句视为一个事务
关闭默认提交状态后,可手动开启、关闭事务
语法:SET autocommit=0|1
值为0:关闭自动提交
值为1:开启自动提交
关闭自动提交后,从下一条SQL语句开始则开启新事务,需使用COMMIT 或ROLLBACK语句结束该事务。
7.回滚事务 ROLLBACK
回滚事务是指该事务已经完成的对数据库的更新操作撤销。
例如:同时修改两个数据时,其中有一条数据已经完成,另一条数据因为异常而没能进行修改的情况下,通过事务回滚,这两条数据都回到未修改的状态,这就是事务回滚。
# 事务回滚
CREATE TABLE `ab` (
`ab` varchar(255) NOT NULL ,
`ac` int NULL ,
PRIMARY KEY (`ab`),
FOREIGN KEY (`ac`) REFERENCES `bank` (`id`)
);
张三给李四转500后销户,
此时另一张表有个外键使用这张表,就会导致销户进行异常,后面数据无法正常运行
这时就用到事务回滚,从而保证了数据的原子性跟一致性。
begin;
update bank set money=money-500 where name='张三';
DELETE from bank where id=1;
update bank set money=money+500 where name='李四';
ROLLBACK;