今日内容
- 数据库简介
- MySQL的安装、卸载与管理
- SQL语言(DDL DML)
- 约束
一. 数据库简介
(一)理解
用于持久化保存数据的管理软件
保存数据的技术:
1. 将数据保存到内存中:① 变量 ② 对象 ③ 数组 ④ 集合
特点:易失性(临时存在计算机内存中,不能持久保存)
2. 持久化保存技术:IO 数据库
特点:可操作性比较差 效率低
(二)特点
1. 可以持久化保存数据
2. 保存数据是有组织、有结构的
3. 以表的形式保存数据,方便操作
4. 提供了丰富的sql语句,操作数据
(三)数据库的分类
① 关系型数据库:以二维表的形式存储数据 ,表与表之间是有关联的
例如:Orcale、MySQL 、SQLServer...
② 非关系型数据库:以文档或键值对的形式存储数据,没有关联,操作灵活方便,效率高
例如:redis、Mongodb、HBase...
对比:
(四)数据库系统的结构
1. 一个DBMS(数据库管理系统)中 可以有多个数据库(database) DB
2. 一个数据库(database)中 可以有多个表(table)
3. 一个表中 可以有多条数据 多个字段(列)
二. MySQL的卸载和安装
(一)MySQL的安装
下载mysql地址:MySQL
下载时注意操作系统和位数,选择合适的版本进行下载。
1. 安装MySQL服务,参考MySQL安装视频
注意事项:
- 安装过程中必须设置登录密码,记住,记住,记住!!!
- 安装过程中记得修改编码方式为UTF8
- 修改my.ini文件中的编码方式,如果文件没有权限修改,可以将修改后的文件另存为,然后再去替换源文件即可。
2. 安装客户端SQLyog,可视化显示数据库中的内容,傻瓜式安装。
(二)卸载
1. 控制面板程序和功能里,卸载软件
2. 清除残留文件
① 安装目录 默认:C:\Program Files\mysql
② 保存数据结构的目录 默认:C:\ProgramData\mysql 这是一个隐藏文件,必须先将显示隐藏文件的复选框选中才能找到。
3. 检查注册表:删除mysql相关 win+r :regedit 后百度查找文件位置
如需要重新安装,必须重新启动电脑。
(三)测试
两种检测数据库是否安装成功的方式:
- 使用mysql自带的命令行窗口
- 使用windows自带DOS窗口
打开DOS窗口的方式:win+R键
连接服务器的命令:mysql -hlocalhost -uroot -proot
说明:
mysql:是连接数据库服务器的命令,相当于之前java中的javac编译命令
-hlocalhost: -h 表示主机名 localhost表示本机,也可以用ip地址127.0.0.1 如果连接远程服务器则使用远程服务器的ip地址。
-uroot:-u 表示 username用户名,root是超级管理员的用户名,大家都一样
-proot:-p 表示password密码,安装数据时配置的密码,我的密码是root,你设置的是什么用什么。
问题:提示mysql不是内部命令,需要配置系统的环境变量
配置好环境变量后一定要重新开启一个DOS窗口进行测试。
(四)开启和关闭MySQL服务
如果连接mysql数据库服务器时,出现下面的连接不上的问题:
有两种方式开启和关闭mysql服务:
- 界面操作
多半的原因是因为服务器被关闭了,只需要打开服务。
- 命令操作
net start mysql 开启服务
net stop mysql 关闭服务
使用命令控制服务开启和关闭时,可能会遇到下面的错误,原因是没有通过管理员身份打开DOS窗口。
通过管理员身份打开DOS窗口:
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
分类
- DDL 数据定义语言: 针对数据库以及数据库对象(表、视图、存储过程、触发器、索引)进行创建、修改、查询、删除操作,关键字:create、drop、alert、show。
2、 DML 数据操作语言:对数据库表中数据的增 删 改 关键字:insert、delete、update
3、 DQL 数据查询语言:对数据库表中数据 查询 关键字:select
4、 DCL 数据控制语言:指定用户分配权限 关键字:grant、revoke
5、 TCL 事务控制语言:对事务进行提交和回滚操作,关键字:commit、rollback
四. DDL
Data Definition Language数据定义语言
关键字: create drop alter show
(一)库的基本操作
1. 查看所有的数据
show databases;
2. 创建数据库
create database [if not EXISTS] 库名;
3. 删除数据库
drop database [if EXISTS] 库名;
4. 选中库
use 库名;
5. 查看创建数据库语句
show create database 库名;
(二)表的操作
数据库中的数据类型:
- 整型 : tinyint int bigint
- 浮点型:double(8,2) float
- 字符类型:char(len)固定长度类型 varchar(len)可变长度类型 char(10) varchar(10)
1)固定长度类型char表示申请的多长就占用多长,没有字符的位置用空格填充;
2)可变长度类型varchar表示申请了一定的空间后占用其中一部分,剩余部分空间释放。
注意:一个汉字占2个字符空间。
- 日期类型:
1)time 时分秒
2)date 年月日
3)datetime 年月日时分秒(推荐)
表操作:
1. 查看所有表
show tables;
2. 创建表
create table 表名(
列名1 数据类型 【约束说明】,
列名2 数据类型 【约束说明】,
.......
列名n 数据类型 【约束说明】
);
3. 删除表
drop table [ if exists] 表名;
4. 查看表结构
desc 表名;
5. 查看创建表语句
show create table 表名;
6. 修改表
1)修改表名
alter table 原表名 rename 新表名;
2)修改列名
alter table 表名 change 【column】 原列名 新列名 类型;
3)修改列的类型
alter table 表名 modify 【column】列名 新类型;
4)添加列
alter table 表名 add 【column】 列名 类型;
5)删除列
alter table 表名 drop 【column】 列名;
约束:指的是一种规则,确定数据库中数据的准确性(完整性)。这些约束都是给数据库中表添加的。
约束分类:
- 非空约束:not null 设置了非空约束的列不允许给null值
- 主键约束: primary key 在一张表中一般是要设置一个主键约束的,也可以没有。设置了主键约束的列,非空且唯一,一个表中主键约束的个数最多就有一个。
- 唯一约束 :unique 设置了唯一约束的列不能出现重复数据,唯一约束在一张表中可以有多个,而且可以为null,但null值最多只有一个。
- 默认值约束:default 设置了默认值约束的列,插入操作时如果不给值就会使用设置的默认值来代替。
添加约束
方式一:创建表的同时添加约束
方式二:通过修改表的属性添加约束
方式三:通过添加约束的语法添加约束(表级约束)
- 方式一:创建表的同时添加约束
CREATE TABLE stu( id INT PRIMARY KEY,-- 学号主键,自动非空 NAME VARCHAR(30) NOT NULL UNIQUE, -- 姓名非空唯一 age INT NOT NULL, sex INT NOT NULL DEFAULT 1,-- 性别非空默认为1 pic VARCHAR(500) NOT NULL, degree VARCHAR(200) NOT NULL, mark VARCHAR(200) ); |
2.方式二:通过修改表的属性添加约束
alter table 表名 modify 【column】 字段名 类型 约束;
# 添加学号主键约束 ALTER TABLE student MODIFY sid INT PRIMARY KEY; # 添加姓名为唯一非空约束 ALTER TABLE student MODIFY sname VARCHAR(50) UNIQUE NOT NULL; # 添加年龄非空约束 ALTER TABLE student MODIFY age INT NOT NULL; # 添加性别默认值非空约束 ALTER TABLE student MODIFY sex INT NOT NULL DEFAULT 1; |
3.方式三:通过添加约束的语法添加约束(主要针对表级约束)
alter table 表名 add constriant 约束名 约束类型(作用的列名)
# 修改添加主键约束 ALTER TABLE student ADD CONSTRAINT PRIMARY KEY (sid); # 修改添加唯一约束 ALTER TABLE student ADD CONSTRAINT UNIQUE (sname); # 修改添加默认约束 ALTER TABLE student ALTER sex SET DEFAULT 1; |
补充:自增列AUTO_INCREMENT,设置了自增列的字段,可以不给值,让它自动增长,从1开始的,也可以后动给值,但给值一定是表中没有的。
- 只有整型列才可以设置自增
- 必须是主键才可设置自增
- 自增列从1开始,每次增加1
- 一旦设置了自增列的记录被删除,修改,插入时出错了,没有一次插入成功,被使用过的自增列编号就不会再出现了。
- 在删除表中数据时,如果使用delete删除后,自增列不会从头开始,如果用truncate删除,自增列会从头开始。
ALTER TABLE student MODIFY sid INT AUTO_INCREMENT; |
列级约束:对一个数据列建立的约束,称为列级约束。例如:非空约束、默认值约束。
列级约束既可以在列定义时声明,也可以在列定义后声明。
表级约束:对多个数据列建立的约束,称为表级约束。例如:组合主键,外键约束。
表级约束只能在列定义后声明。
删除约束
# 删除主键约束 ALTER TABLE student DROP PRIMARY KEY; # 删除唯一约束 ALTER TABLE student DROP INDEX sname; # 删除默认约束,直接修改列的属性 ALTER TABLE student MODIFY sex INT NOT NULL; # 删除非空约束 ALTER TABLE student MODIFY age INT; |
五. DML
Data Manipulation Language数据操作语言
关键字: 增insert 删delete 改update
(一)插入
1.单行插入
语法:
insert into 表名(列名1,列名2,...) values(值1,值2,....);
注意事项:列名可以省略,如果省略列名就要求值与原始表中列的个数、类型、顺序保持一致,这种方法不推荐,容易出错。
2. 多行插入
insert into 表名(列名1,列名2,...) values(值1,值2,....),(值1,值2,....),......
注意:
1. 整型、浮点型不需要加引号,字符型和日期类型需要加引号
2. 插入的值必须满足类型和约束
3. 值和列名一一对应
4. 如果约束是 null 和 default 可以不插入
(二)删除
语法:
1. 删除单个
delete from 表名 where 条件;
2. 删除所有
① delete from 表名;
② truncate table 表名;
【面试题】简述delete删除和truncate删除的区别
1. delete 删除 后可以接where条件 truncate不可以。
2. delete 删除一行一行删除 truncate删除整个表,再创建一个与原表结构相同的新表,truncate删除效率高。
3. delete支持事务,truncate不支持事务。
4. delete删除自增值再次插入自增继续接着自;truncate 删除自增从新从1开始。
(三)修改
语法:
update 表名 set 列名1=新值1,列名2=新值2,... where 条件;
六. 综合案例
1. 创建数据库bookdb
2. 在数据库中创建两张表:bookType表和book表
bookType:图书分类表
表中包含2列:
cid (类型编号)
cname(类型名称)
book:图书表
表中包含8列:
id(编号)
title(书名)
price (价格)
author(作者)
publisher(出版社)
description (描述信息)
pdate(出版日期) datetime
要求:
1)两个表中cid和id分别都是主键自增
2)两个表中cname和title都要求唯一
3)两个表中所有字段均不允许为空
4)表中publisher字段要求默认为‘中国教育出版社’
3. 分向两张表中添加以下测试数据:下图数据仅供参考
INSERT INTO booktype(cname)VALUES('小说'),('散文'),('诗歌'),('历史'),('计算机'); INSERT INTO book(title,price,author,publisher,description,pdate) VALUES('java编程思想',23,'张三','北京出版社','读书好','1998-3-4'), ('摆渡人',45.6,'李四','天津出版社','好书再不买就没了','2009-5-4'), ('mysql数据库入门',34.5,'刘小东','中国教育出版社','数据库是后台技术','2003-3-4'), ('百年孤独',44,'李小明','工业大学出版社','适合中老年人','2010-3-4'), ('计算机基础',11,'李四','清华大学出版社','学习IT必备读本','2009-3-4'), ('jsp从入门到精通',67,'王小丽','北京理工出版社','jsp服务器技术','2020-3-4'), ('你好,李焕英',99,'贾玲','北京出版社','票房过亿','2021-3-4'); |
- 根据以上表的数据完成以下练习:
-- 1.将图书编号为7的书名改成“喜剧人生”
UPDATE book SET title = '喜剧人生' WHERE id = 7;
-- 2.由于图店重新装修,现将每本图书的价格上调5元钱
UPDATE book SET price = price + 5;
-- 3.将图书价格少于20元的图书信息删除
DELETE FROM book WHERE price < 20;
-- 4.使用两种方法清空表中所有数据
DELETE FROM book;
TRUNCATE TABLE book;
-- 5.将图书表从数据库中删除
DROP TABLE book;
-- 6.将图书数据库删除
DROP DATABASE bookdb;