一.什么是数据库
数据库是存储数据和管理的仓库,进行复杂度较高的数据交换业务处理。
二.数据库工具安装下载
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)
);