数据库
数据库(DB DataBase)
概念:数据仓库,软件,安装在操作系统(window,linux,mac…)之上!SQL,可存储大量数据,500万!
作用:存出数据,管理数据
数据库分类
关系型数据库
-
数据库分类:Mysql, Oracle, Sql Server, DB2, SQLlite
-
通过表和表之间,行和列之间的关系进行数据的存储, 学员信息表,考勤表,… …
非关系型数据库 (NO SQL)
Redis, MongDB
非关系型数据库, 对象存储,通过对象的自身的属性来决定
DBMS(数据库管理系统)
数据库的管理软件,科学有效的管理我们的数据库,维护和获取数据:
连接数据库
命令行连接!
mysql -uroot -p#### -- 连接数据库
#必须要在MySQL安装位置bin目录下面,要不就把MySql环境比变量设置为相对路径
update mysql user set authentication_string=password('123456') where user='root' and Host = 'localhost'; -- 修改用户密码
flush privileges; -- 刷新权限
---------------------------------
-- 所有结尾语句使用 ;结尾
show databases; -- 查看所有的数据库
mysql> use school -- 切换数据库 use 数据库名
Database changed
show tables; -- 查看你数据库中的所有表
describe student; -- 显示数据库中所有的表的信息
create database westos; -- 创建一个数据库
exit; -- 退出连接
-- 单行注释(SQL 的本来注释)
/*
hello
dasdav
*/
数据库xxx语言 CRUD增删改查!
DDL 定义
DML 操作
DQL 查询
DCL 控制
操作数据库
操作数据库 > 操作数据库中的表 > 操作数据库中表的数据
不区分大小写
- 创建数据库
create database [if not exists] westos;
- 删除数据库
drop database [if not exists] westos;
- 使用数据库
use `school`; -- tab键的上面,如果你的表名或者字段名是一个特殊字符,就需要 ``
- 查看数据库
show database; -- 查看数据库
数据库的列类型
数值:
- tinyint 十分小的数据 1个字节
- smallint 较小的数据 2个字节
- mediumint 中等大小的数据 3个字节
- int 标准的整数 4个字节
- bigint 较大的字节 8个字节
- flaot 浮点数 4个字节
- double 浮点数 8个字节
- decimal 字符串形式的浮点数(用于商业金融)
字符串:
- char 字符串固定大小的 0~255
- varchar 可变字符串 0~065535 常用变量 String
- tinytext 微型文本 2^8 -1
- text 文本串 2^16 -1 保存大文本
时间日期:
java.util.Data
- date YYYY-MM-DD ,日期格式
- time HH: mm: ss 时间格
- datetime YYYY-MM-DD HH: mm: ss 最常用的时间格式
- timestamp 时间戳, 1970.1.1到现在的毫秒数! 也较为常用
- year 年份表示
null
- 没有值,未知
- 注意,不要使用NULL进行运算
数据库的字段属性
Unsigned:
- 无符号的整数
- 声明了该列不能声明为负数
zerofill
- 0填充的
- 不足的位数,使用0来填充, int(3), 5 … 005
自增
- 通常理解为自增,自动在上一条记录的基础上+1(默认)
- 通常用来设计唯一的主键 ~ index, 必须是整数类型
- 可以自定义设计主键自增的起始值和步长
非空NULL not NULL
- 假设设置为 not null ,如果不给它赋值,就会报错
- NULL ,如果不填写值,默认就是NULL
默认
- 设置默认的值
- sex, 默认值为男, 如果不指定该列的值,则会有默认的值
创建数据库
格式:
create table [if not exists] '表名'(
'字段名' 列类型 [属性] [索引] [注释],
'字段名' 列类型 [属性] [索引] [注释],
......
'字段名' 列类型 [属性] [索引] [注释],
primary key(`id`)
)[表类型][字符集设置][注释]
查看创建语句
show create database school; -- 查看创建数据库的语句
show create tables student; -- 查看student数据表的定义语句
desc student -- 显示表的结构
-- 关于数据库引擎
/*
INNOOB 默认使用
MYISAM 早些年使用
*/
INNOOB | MYISAM | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为2倍 |
常规使用操作:
- MYISAM 节约空间,速度较快
- INNOOB 安全性高 事物的处理,多表多用户操作
MySql 引擎在物理文件上的区别
- InnoDB在数据库表中只有一个 *.frm文件,以及上级目录下面的 ibdata1文件
- MYISAM 对应文件
。*.frm 表结构的定义文件
。*.MYD 数据文件(data)
。*.MYI 索引文件(index)
设置数据库的字符集编码
CHARSET=UTF8
不设置的话,会是mysql默认的字符集编码~ (不支持中文!)
MYSQL的默认编码是Latin1, 不支持中文
在my.ini中配置默认的编码
character-set-server=utf8
修改删除表
修改
删除
-- 删除表 (如果表存在再删除)
drop table if exists teacher;
#加上判断以免报错
MYSQL数据管理
外键
# ALTER TABLE 表名 ADD FOREIGN KEY [外键名字] (外键字段) REFERENCES 父表 (主键字段);
-- 已存在表增加外键
ALTER TABLE Products ADD FOREIGN KEY products_vendors_fk_1 (vend_id) REFERENCES Vendors (vend_id);
DML语言
原文链接:https://blog.csdn.net/qq_40925004/article/details/89920977
数据操作语言:
插入:insert
/*
语法:
insert into 表名(列名,...) values(值1,...);
*/
# 插入的值的类型要与列的类型一致或兼容
INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','1898888888',NULL,2);
#或者
INSERT INTO beauty
VALUES(13,'唐艺昕','女','1990-4-23','1898888888',NULL,2);
#多行插入
INSERT INTO beauty
VALUES(23,'唐艺昕1','女','1990-4-23','1898888888',NULL,2),
(24,'唐艺昕2','女','1990-4-23','1898888888',NULL,2),
(25,'唐艺昕3','女','1990-4-23','1898888888',NULL,2);
#方式二:
/*
语法:
insert into 表名
set 列名=值,列名=值,...
*/
INSERT INTO beauty
SET id=19,NAME='刘涛',phone='999';
修改:update
/*
语法:
update 表名
set 列=新值,列=新值,...
where 筛选条件;
语法:
sql92语法:
update 表1 别名,表2 别名
set 列=值,...
where 连接条件
and 筛选条件;
sql99语法:
update 表1 别名
inner|left|right join 表2 别名
on 连接条件
set 列=值,...
where 筛选条件;
*/
#案例 修改beauty表中姓唐的女神的电话为13899888899
UPDATE beauty SET phone = '13899888899'
WHERE NAME LIKE '唐%';
#案例 修改boys表中id好为2的名称为张飞,魅力值 10
UPDATE boys SET boyname='张飞',usercp=10
WHERE id=2;
#修改多表的记录
#案例 修改张无忌的女朋友的手机号为114
UPDATE boys bo
INNER JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`phone`='119',bo.`userCP`=1000
WHERE bo.`boyName`='张无忌';
#案例 修改没有男朋友的女神的男朋友编号都为2号
UPDATE boys bo
RIGHT JOIN beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`boyfriend_id`=2
WHERE bo.`id` IS NULL;
删除:delete
/*
单表的删除
delete from 表名 where 筛选条件
夺表删除
delete 表1的别名,表2的别名
from 表1 别名,表2 别名
where 连接条件
and 筛选条件;
delete 表1的别名,表2的别名
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件;
*/
#案例:删除手机号以9结尾的女神信息
DELETE FROM beauty WHERE phone LIKE '%9';
#案例:删除张无忌的女朋友的信息
DELETE b
FROM beauty b
INNER JOIN boys bo ON b.`boyfriend_id` = bo.`id`
WHERE bo.`boyName`='张无忌';
删除: truncate
#delete pk truncate
1.delete 可以加where 条件,truncate不能
2.truncate删除,效率高一丢丢
3.假如要删除的表中有自增长列,
如果用delete删除后,再插入数据,自增长列的值从断点开始,
而truncate删除后,再插入数据,自增长列的值从1开始。
4.truncate删除没有返回值,delete删除有返回值
5.truncate删除不能回滚,delete删除可以回滚.
#案例:将魅力值>100的男神信息删除
# 首先插入信息
INSERT INTO boys (boyname,usercp)
VALUES('张飞',100),('刘备',100),('关云长',100);
TRUNCATE TABLE boys;
原文链接:https://blog.csdn.net/qq_40925004/article/details/89920977
DELETE删除问题,重启数据库现象
- InnoDB 自增列会重1开始 (存在内存当中的, 断电及失去)
- MyISAM 继续从上一个自增量开始 (存在文件中,不会丢失)