MySQL数据库技术
一、数据库基本概念
1.java数据是如何存储的呢?
变量、数组、集合、对象
内存中:速度快,但是缺点不能永久保存,数据处于临时状态
文件中:可以通过IO保存在文件,永久性,但是数据库操作不安全,不方便
数据库:永久保存,查询速度快,方便数据管理,安全,缺点占用资源
2.什么是数据库
用于存储和管理数据的仓库,存放在计算机内,有组织,可共享的大量数据的集合
数据库:DataBase 简称:DB
3.数据库优点
可存储大量数据
方便检索
保持数据的一致性、完整性
安全、可共享
通过组合分析、可产生新数据
4.常用的数据库
关系型数据库SQL
MySQL
Oracle
SQL Server
MongoDB
IBM Db2
非关系型数据库NOSQL
5、MySQL为什么选择
MySQL数据库目前是流行开源、免费关系的数据库
小巧、功能齐全
使用便携
可运行于windows或Linux操作系统
适用于中小型甚至大的网站应用
二、MySQL数据库的常用操作
1.MySQL启动服务
①手动启动:我的电脑—管理—服务
②DOS命令启动:win+r 运行窗口输入cmd,输入services.msc打开服务窗口
③在运行窗口中直接输入services.msc直接打开服务窗口
④使用管理员身份打开cmd命令行,输入 net start mysql
net stop mysql 结束
2、登录MySQL数据库
① mysql -u用户名 -p密码
② mysql -hIP地址 -u用户名 -p密码
3、退出MySQL数据库
exit 或 quit
4、MySQL数据库的目录
①
三、SQL语言
1、什么是SQL语言?
结构化查询语言:Structured Query Language 是一种所有关系型数据库的查询规范,不同的数据库都支持,通用的数据库操作语言,操作所有关系型数据库的规则
2、SQL通用语法
1.SQL 语句可以单行或者多行,以分号结束
show databases;显示所有数据库信息
2.MySQL数据库的SQL语句不区分大小写,关键字建议使用大写
Show DataBases;
3.三种注释
①-- 注释 (-- 后面有空格)
②#注释内容
③/* 注释 */
3、SQL分类
1.DDL(Data Definition Language) 数据定义语言:
用来定义数据库对象,数据库、数据表、列表,关键字:creat drop alter等等
2.DML(Data Manipulation Language) 数据操作语言:
用来对数据中表的数据进行增删改操作,关键字:insert delete update等等
3.DQL(Data Query Language) 数据查询语言:
用来查询数据库中表的数据, 关键字:select where等等
4.DCL(Data Control Language)数据控制语言
用来定义数据库的访问权限和安全级别,关键字:grant revoke等等
四、DDL数据定义语言,操作数据库、表
1、操作数据库
CRUD:
1.1C:Create 创建
-- 创建数据库
create database 数据库名称;
-- 判断不存在,则创建
create database if not exists 数据库名称;
-- 指定字符集
create database 数据库名称 character set 字符集名称;
1.2R:Retrieve 查询
-- 查询所有数据库的名称
show databases;
-- 查询某个数据库的字符集
show create database 数据库名称;
1.3U:Update 修改
-- 修改数据库的字符集
alter database 数据库名称 character set 字符集名称
1.4D:Delete 删除
-- 删除数据库
drop database 数据库名称;
-- 判断数据库存在,则删除
drop database if exists 数据库名称;
1.5其他操作
-- 查询当前是否处于某一个数据库下
select database();
-- 切换到当前数据库
use 数据库名称;
2、操作数据表
2.1Create创建
-- 创建表语法
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
……
列名n 数据类型n
);
mysql在自定义表名和列名时,规则
①必须以字母开头
②长度不能超过30字符
③不能使用关键字,如mysql
④只能使用如下字符:A-Z,a-z,0-9,$,下划线,但不能使用空格和单引号
-- 常用数据类型,主要使用在列上
1.整数类型:int(长度);
age int(2);
2.小数类型:double(长度);
score double(5,2);5为最多位,2表示保留2位小数,最大值999.99
3.日期类型:date
表示:yyyy-MM-dd
4.datatime:不赋值默认null
表示:yyyy-MM-dd HH:mm:ss
5.timestamp:时间戳类型
包含年月日时分秒,但是秒值精确到小数位后6位,一般银行会用
不赋值,默认当前系统时间,自动赋值
6.字符类型:char(长度);
固定长度字符类型,
name char(10);
'你好'占用了前4个字符,后6个会空格补齐
7.字符串类型:verchar(长度)
动态,
name verchar(10);
'你好'占用了前4个字符,则自动分配4个字符,节约空间
8.字符串类型:text 长度(0-65535字节)
9.bolb:字节类型
10.clob:字符类型
-- 创建学生表
create table student(
id int,-- 学号
name varchar(50), -- 姓名
age int(10), -- 年龄
score double(4,1), -- 成绩
birthday date, -- 生日
insert_time timestamp -- 添加时间
);
2.2Retrieve查询
-- 查询某个数据库中所有表名称
show tables;
-- 查询创建表的SQL语句
show create table 表名;
-- 查询表的结构;
desc 表名;
2.3Update修改
1.添加一列,学生性别 sex
alter table 表名 add 列名 数据结构
2.修改列名、数据类型
alter table 表名 change 列名 新类名 数据类型;
alter table 表名 modify 列名 新数据类型;
3.删除列
alter table 类名 drop 列名;
4.修改表名
alter table 表名 rename 新表名;
5.修改表的字符集
-- 显示创建时的SQL语句
show create table 表名;
alter table 表名 character set utf8;
2.4D:Delete 删除
-- 删除表
drop table 表名;
drop table if exists 表名; -- 存在则删除
五、DML(数据操作语言)数据表进增删改操作
1.1插入数据
语法:
insert into 表名(列名1,列名2……列名n) values(值1,值2……值n);
-- 案例
insert into stu(id,name,sage,score,birthday,insert_time)values(001,'zhangsan',18,97.5,null,null);
-- 第一个null就是null,第二个null,因为是时间戳类型,默认当前时间
-- 插入所有列时,可以不定义列名,默认插入顺序和创建顺序一致
insert into stu values(003,'changjian',18,97.5,null,null);
-- 注意:
1.列名和值要一一对应;
2.除了数字类型,其他类型都要引号
-- 插入部分字段(部分列)
insert into stu(id,sage,score) values(004,19,99.99);
-- 复制表
create table 新表名 like 表名;-- 只是创建了表结构,表内无数据
-- 数据迁移
insert into 新表 select * from 表名;
-- 复制部分字段
insert into 新表(id,name,age) select id,name,age from 表名;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ooxtEKTp-1607864427611)(C:\Users\24582\AppData\Roaming\Typora\typora-user-images\image-20201212122246714.png)]
1.2删除数据
语法:
delete from 表名 [where 条件]
1.删除一条记录
delete from stu where
id=2;
2.如果不加条件则会删除全部数据,但是表结构还在
写日志,速度慢,但安全性高,可以恢复
delete from 表名;
drop table 表名;-- 直接删除表结构以及数据
3.如果我们要删除所有记录,速度快,不写日志,不可以恢复
truncate table 表名; -- 先删除表,再给创建一张一样的表,无法数据恢复
注意:delete和truncate区别?
1.3修改数据
语法:
update 表名 set 列名1 = 值1,列名2 = 值2……[where 条件]
-- 修改一个字
update stu set sage = 20 where id=2;
-- 修改多个字段
update stu set name='taoc',sage = 18,score = 99.0 where id=3;
-- 数据库默认编码格式UTF8 客户端gbk,
所有插入中文应该转化;
-- 注意:当修改含有null值的数据,不能用 = null,要用is null,is not null 判断