mysql
数据库的基本概念
-
数据库的英文单词: DataBase 简称 : DB
-
什么数据库?
-
用于存储和管理数据的仓库。
-
-
数据库的特点
-
持久化存储数据的。其实数据库就是一个文件系统
-
方便存储和管理数据
-
使用了统一的方式操作数据库 -- SQL
-
-
常见的数据库软件:mysql、oracle、sqlserver 等
MySQL数据库
-
MySQL服务启动
-
手动
cmd --> services.msc
打开服务的窗口 -
使用管理员打开cmd
# 启动mysql的服务 net start mysql # 关闭mysql服务 net stop mysql
-
-
MySQL 登录
mysql -u root -p密码 mysql -h ip -uroot -p连接目标的密码 mysql --host=ip --user=root --password=连接目标的密码
-
MySQL 退出
mysql> exit; # 或 mysql> quit;
-
几个概念
-
数据库:文件夹
-
表:文件
-
数据:表记录
-
SQL
-
什么是SQL? Structured Query Language:结构化查询语言 其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。
-
SQL通用语法
-
SQL 语句可以单行或多行书写,以分号结尾。
-
可使用空格和缩进来增强语句的可读性。
-
MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。
-
2 种注释
-
单行注释
-- 注释内容 # 注释内容(mysql特有)
-
多行注释
/* 多行注释 可换行 */
-
-
-
SQL分类
-
DDL(Data Definition Language)数据定义语言 用来定义数据库对象:数据库,表,列等。关键字:
create
、drop
、alter
等 -
DML(Data Manipulation Language)数据操作语言 用来对数据库中表的数据进行增删改。关键字:
insert
、delete
、update
等 -
DQL(Data Query Language)数据查询语言 用来查询数据库中表的记录(数据)。关键字:
select
、where
等 -
DCL(Data Control Language)数据控制语言 用来定义数据库的访问权限和安全级别,及创建用户。关键字:
GRANT
、REVOKE
等
-
DDL:操作数据库、表
-
操作数据库(
CRUD
)
-
C
(Create):创建-- 创建数据库 create database 数据库名称; -- 创建数据库,判断不存在,再创建 create database if not exists 数据库名称; -- 创建数据库,并指定字符集 create database 数据库名称 character set 字符集名;
-
R
(Retrieve):查询-- 查询所有数据库的名称: show databases; -- 查询某个数据库的字符集:查询某个数据库的创建语句 show create database 数据库名称;
-
U
(Update):修改-- 修改数据库的字符集 alter database 数据库名称 character set 字符集名称;
-
D
(Delete):删除-- 删除数据库 drop database 数据库名称; -- 判断数据库存在,存在再删除 drop database if exists 数据库名称;
-
使用数据库
-- 查询当前正在使用的数据库名称 select database(); -- 使用数据库 use 数据库名称;
-
操作表
在数据库中,数据表是最重要,最基本的操作对象,是数据存储的基本单位。数据在表中是按照行和列的格式来存储的。
MySQL 支持多种数据类型:
-
数值类型:包括整数类型
int
、smallint
、bigint
等,浮点类型包括float
、double
,定点类型decimal
。
浮点类型和定点类型都可以使用
(m,n)
形式定义,m 表示总位数、n 表示小数的位数。-
字符串类型
-
char(M)
:为固定长度字符串,在定义时指定字符串列长,当保存时在右侧填充空格以达到指定长度。M 的范围是0~255
个字符。 -
varchar(M)
: 是长度可变的字符串,M 表示最大列长度,范围是0~65535
。 -
Text
:保存非二进制字符串,如文章内容,评论等
-
-
日期/时间类型
-
date
:日期,只包含年月日 yyyy-MM-dd -
datetime
: 日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss -
timestamp
: 时间戳类型,包含年月日时分秒 yyyy-MM-dd HH:mm:ss如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
-
-
C
(Create):创建基本语法:
create table 表名( 列名1 数据类型1, 列名2 数据类型2, .... 列名n 数据类型n );
注意:最后一列,不需要加逗号
,
-- 创建表 create table student( id int, name varchar(32), age int , score double(4,1), birthday date, insert_time timestamp ); -- 复制表 create table 表名 like 被复制的表名;
约束(constraint)
主键约束
主键,又称主码,是表中一列或多列的组合。主键约束要求:
-
主键的列的数据唯一(不能重复),并且不能为空
-
主键就是表中记录的唯一标识
主键能唯一的标识表中的一条记录,可以结合外键定义不同数据表之间的关系,可以加快数据库的查询速度。主键分为两种类型:单字段主键和多字段联合主键。 (1)单字段主键:主键由一个字段组成,定义方式有两种
-- 第一种 create table 表名( 列名 数据类型 primary key, ... ) -- 第二种 create table 表名( 列名 数据类型, ..., primary key(列名) )
(2)多字段联合主键:主键由多个字段联合组成,只能在定义完列之后定义
create table 表名( 列名1 数据类型, 列名2 数据类型, ..., primary key(列名1,列名2) )
外键约束
外键用来在两个表之间建立连接,可以是一列或多列。
-
一个表可以有一个或多个外键
-
外键可以为空值,如果不为空,那么值应该对应另外一张表中的某个主键值
-
外键对应表中的一个字段,可以不是本表的主键,但对应另外一个表的主键
create table tb_dept( id int primary key, name varchar(22), location varchar(50) ); -- 定义表格 tb_emp,将字段 deptid 作为外键与 tb_dept 表的 id 关联 create table tb_emp( id int(11) primary key, name varchar(25), deptid int(11), salary float, constraint fk_dept_emp foreign key(deptid) references tb_dept(id) );
(1)增加外键约束 对于定义的表格,如果需要,可以在表之间通过外键建立关联关系。语法格式如下:
alter table 表名 add constraint 外键名字 foreign key(列名) references 参照表(列名) [on delete cascade|set null]
alter table tb_emp add constraint fk_dept_emp foreign key(deptid) references tb_dept(id);
(2)删除外键约束 对于定义的外键,如果不再需要可以删除,就可以解除主表和从表之间的关联关系。语法格式如下:
alter table 表名 drop foreign key 外键约束名字;
非空约束
指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统会报错。语法规则:
字段名 数据类型 not null;
create table tb_emp( id int(11) primary key, name varchar(25) not null, deptid int(11), salary float, constraint fk_dept_emp foreign key(deptid) references tb_dept(id) );
唯一性约束
要求该列唯一,允许为空,但是只能有一个空值。唯一约束可以确保一列或者多列不出现重复值。语法规则如下: (1)在定义列之后直接指定唯一约束
列名字 数据类型 unique
(2)在定义完所有列之后指定唯一约束
constraint 约束名 unique 列名
Uninque 和 primary key 的区别:
-
一个表中可以有多个字段使用 unique 约束,但是只能有一个 primary key
-
Primary key 不允许空值;unnique 允许空值(只能有一个)
默认约束
指定某列的默认值,如果插入数据的时候没有为这个字段设定值,系统自动将该字段赋值为默认值。 语法规则:
字段名 数据类型 default 默认值
create table tb_emp( id int(11) primary key, name varchar(25) not null, deptid int(11) default 1, salary float, constraint fk_dept_emp foreign key(deptid) references tb_dept(id) );
自动增加
在应用中,如果希望在插入记录的时候系统自动生成主键值,可通过为表的主键增加
auto_increment
关键字实现。在 MySQL 中,auto_increment
的初始值是1,每增加一条记录,字段值自动加1。每一张表中只能有一个字段使用auto_increment
约束,并且该字段必须是主键或部分主键。语法规则:
字段名 数据类型 auto_increment
create table tb_emp( id int(11) primary key auto_increment, name varchar(25) not null, deptid int(11) default 1, salary float, constraint fk_dept_emp foreign key(deptid) references tb_dept(id) );
-
-
R
(Retrieve):查询-- 查询某个数据库中所有的表名称 show tables; -- 查询表结构 desc 表名;
-
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 列名;
-
D
(Delete):删除drop table 表名; drop table if exists 表名;
-
DML:增删改表中数据
-
添加数据
语法:
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
注意:
-
列名和值要一一对应。
-
如果表名后,不定义列名,则默认给所有列添加值
insert into 表名 values(值1,值2,...值n);
-
除了数字类型,其他类型需要使用引号(单双都可以))引起来
-
-
删除数据
语法:
delete from 表名 [where 条件];
注意:
-
如果不加条件,则删除表中所有记录
-
如果要删除所有记录
delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作 TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
-
-
修改数据
语法:
update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];
注意:
-
如果不加任何条件,则会将表中所有记录全部修改。
-
练习
-
首先创建数据库表格 pet ,其表格结构如表1,将表2中的记录插入到 pet 表中
-
使用 update 语句将名字为 Fang 的狗的主人改为 Kevin
-
将没有主人的宠物的 owner 字段值都改为 Duck
-
删除已经死亡的宠物记录
-
删除所有表中的记录
表1
字段名 | 字段说明 | 数据类型 | 主键 | 非空 | 唯一 | 自增 |
---|---|---|---|---|---|---|
id | 宠物编号 | int | 是 | 是 | 是 | 是 |
name | 宠物名称 | varchar(20) | 否 | 是 | 否 | 否 |
owner | 宠物主人 | varchar(20) | 否 | 否 | 否 | 否 |
species | 种类 | varchar(20) | 否 | 是 | 否 | 否 |
sex | 性别 | char(1) | 否 | 是 | 否 | 否 |
birth | 出生日期 | date | 否 | 是 | 否 | 否 |
death | 死亡日期 | date | 否 | 否 | 否 | 否 |
表2
id | name | owner | species | sex | birth | death |
---|---|---|---|---|---|---|
1 | Fluffy | Harold | cat | f | 2013-06-12 | 2020-08-23 |
2 | Claws | Gwen | cat | m | 2014-05-17 | |
3 | Buffy | dog | f | 2019-12-22 | ||
4 | Fang | Benny | dog | m | 2010-02-01 | |
5 | Bowser | Diane | dog | m | 2013-03-02 | 2019-08-15 |
6 | Chirpy | bird | f | 2018-10-11 |