1. 数据库mysql
数据库使用和可视化
关系型数据库mysql使用:
开启服务: net start mysql
登录:mysql -u root -p
关闭服务:net stop mysql
图形化MySQL数据库管理工具: SQLyog
安装后的秘钥:
cr173
8d8120df-a5c3-4989-8f47-5afc79c56e7c
2. 操作数据库
操作数据库>操作数据库表 >操作数据库表的数据
-- 多行注释 /* */
create database westos; --创建一个数据库
show databases; --查看所有的数据库
use school --切换数据库
show tables; --显示某个数据库里面的表
describe student; --显示数据库中某个表的信息
exit --退出连接
2.1操作数据库
1.创建数据库
CREATE DATABASE [IF NOT EXISTS] xxx;
2.删除数据库
DROP DATABASE xxx;
3.使用数据库
-- 如果你的字段或者表名字和关键字重复,就需要加上 `` 比如 : `database`
USE `database`
4.查看数据库
SHOW DATABASES;
学习思路:需要学习某个命令时,可以自己在SQLyog中操作,然后看里面的历史记录
2.2数据库的列类型
-
数值
列名字 描述 字节数 tinyint 十分小的数据 1 smallint 较小的数据 2 mediumint 中等大小的 3 int 标准的整数 4 bigint 表达的数据 8 float 浮点数 4 double 浮点数 8 decimal 字符串形式的浮点数 自定义 -
字符串
char 字符串固定大小 0-255 varchar 可变字符串 0-65535 tinytext 卫星文本 2^8-1 text 文本串 2^16-1 -
时间日期
java.util.Date
分类 | 格式 | 说明 |
---|---|---|
date | YYYY-MM-DD | 日期格式 |
time | HH:mm:ss | 时间格式 |
timestamp | 时间戳:1970.1.1到现在的毫秒数! | |
year | 年份表示 | |
datetime | YYYY-MM-DD HH:mm:ss | 最常用的时间格式 |
-
null
没有值,未知
注意:不要使用NULL进行运算,使用的话结果为NULL
2.3数据库的字段属性(重点)
unsigned :无符号整数
自增:自动在上一条记录上 + 1(默认,亦可通过''高级''来修改),通常来设计唯一的主键
zerofill:不足的位数用0来填充 比如int(3) -> 003
非空:假设设置为NULL not null 如果不赋值,就会报错
默认:设置默认值
/* 一下五个字段做项目都需要用,表示一个记录存在意义
id 主键
`version` 乐观锁
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间
*/
2.4创建数据库表
/*
创建'student'表(如果其不存在)(
格式:`列名` 类型(大小) 其他操作
非空: NOT NULL
自增: AUTO_INCREMENT
注释:COMMENT '注释'
默认:DEFAULT '默认'
主键:PRIMARY KEY (`主键`)
默认
)
注意:int整数显示宽度已弃用,并将在将来的版本中删除。
*/
CREATE TABLE IF NOT EXISTS `student` (
`id` INT NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(10) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`password` VARCHAR(16) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf16
格式: []中是可选,int类型不用写大小(不唯一)
CREATE TABLE [IF NOT EXISTS] `表名`(
`字段名` 列类型(大小) [属性] [索引] [注释],
`字段名` 列类型(大小) [属性] [索引] [注释],
...
`字段名` 列类型(大小) [属性] [索引] [注释]
)ENGINE=[表类型][字符集设置][注释]
常用命令:
SHOW CREATE DATABASE `school` -- 查看创造数据库的语句
SHOW CREATE TABLE `student` -- 查看创造student表的语句
DESC `student` -- 显示表的结构
2.5数据表的类型
INNODB 默认使用
MYISAM 早些年使用的
MYISAM | INNODB | |
---|---|---|
事物支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 较小 | 较大,约2倍 |
常规使用操作:
- MYISAM 节约空间,速度较快
- INNODB 安全性高,事物的处理,多表用户操作
在物理空间存在的位置
所有的数据库文件都存在data目录下
本质还是文件的存储!
MySQL引擎在物理文件上的区别
- InnoDB 在数据库表中只有一个*.fm文件
- MYISAM 对应文件
- *.frm 表结构的定义文件
- *.MYD 数据文件(data)
- *.MYI 索引文件(index)
设置数据库表的字符集编码
CHARSET=utf16
不设置的话会是mysql默认的字符集编码~(不支持中文)
2.6字段的修改
修改
-- 修改表名 ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE student RENAME AS teacher
-- 增加表的字段 ALTER TABLE 旧表名 ADD 字段名 列属性
ALTER TABLE student ADD age INT
-- 修改字段 ALTER TABLE XX MODIFY XX XX
ALTER TABLE student MODIFY age VARCHAR(11)
-- 字段重命名
ALTER TABLE student CHANGE age age1 INT
-- 删除字段
ALTER TABLE student DROP age1
删除
-- 删除表(如果表存在在删除)
DROP TABLE IF EXISTS teacher
注意点:
- `` 字段名使用这个包裹!
- 注释
- sql 关键字大小写不敏感,建议用小写
3.MySQL数据管理
3.1外键(了解)
ALTER TABLE 表 ADD CONSTRAINT 约束名 FOREIGN KEY(`作为外键的列`) REFERENCES 哪个表(`哪个字段`)
不建议使用物理外键!!!(数据库多很困扰)
最佳实践
- 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
- 我们想使用多张表的数据,想使用外键就用程序去实现(应用层)
3.2DML语言(全部记住)
数据库意义:数据存储,数据管理
- Insert
- update
- delete
3.2.1插入
插入单条语句:
INSERT INTO 表名 (字段1,字段2,字段3]) values ('值1','值2','值3')
比如:INSERT INTO teacher
(name
,password
) VALUES ('张三','147')
teacher name password等字段名都用 两个` 围起来 ,后面的值用单引号
插入多条语句:
INSERT INTO teacher
(name
,password
) VALUES ('张三','147147'), ('李四','258')
注意事项:
- 字段是可以省略的,但是后面的值必须要一一对应,不能少
- 可以同时插多条语句,需要用逗号隔开每一个()
3.2.2修改
UPDATE 表名 SET 列=值 WHERE 条件
UPDATE `teacher` SET `name`='王' WHERE `id`=2
UPDATE `teacher` SET `name`='张',`password`='11111' WHERE `id`=3
条件操作符:
= ,!=,>,<,>=,<=基本的操作符,还有特殊操作符:
BETWEEN ... and ... 相当于 [2,5]
...AND... 相当于&&
OR 相当于||
注意事项:
-
一定要带上筛选的条件,不然全都被更改了(效果是致命的)
-
数据库的列,使用的时候带上 两个`
-
value是一个具体的值也可以是变量
3.2.3删除
delete from 表名 where 条件
DELETE FROM test
where id
=1
完全清空一个数据库表: TRUNCATE 表名
TRUNCATE和delete的区别
前者会刷新自增,后者不会刷新自增数据
4.DQL查询数据(最重点)
4.1DQL
Data Query Language:数据库查询语言
- 所有的查询操作都用它 Select
- 简单的查询,复杂的查询都可以做
- 数据库中最核心的语言,最重要的语句
- 使用频率最高的语句
4.2查询字段
SELECT 字段或者表达式 FROM 表 WHERE 表达式条件
查询版本:
SELECT VERSION()
查询全部表字段信息:
SELECT * FROM test
查询id和name的信息:
SELECT id
,name
FROM test
重命名他们(以及重命名表) AS :
SELECT id
as '编号',name
AS '姓名' FROM testAS ‘学生’
函数 CONCAT(a,b):
SELECT CONCAT('编号:',id) AS '编号' FROM test
去重操作DISTINCT :
SELECT DISTINCT id
from test
4.3 WHERE条件语句
作用:限制选择条件
逻辑运算符
可以用 英文 或者 字符
与: and 或者 &&
或: or 或者 ||
非: not 或者 !
区间: BETWEEN a AND b
模糊查询:比较运算符
-
空: IS NULL
-
非空:IS NOT NULL
-
BETWEEN: a between b and c 若a在b和c之间,则为真
-
Like : a like b SQL匹配,如果a匹配b,则为真
%代表任意字符
_代表一个字符
比如 :Select 'name' from 'student' where name like '李_'
则会返回所有两个字姓李的同学
where name like '%子%'
会返回所有名字中带有子的同学
-
In: a in (a1,a2,...) 若a存在于()里面的值,则为真
where id in (4,5,6)
返回id为4,5,6的数据
4.4连表查询
语法:
SELECT 列1,列2...
FROM 表1
INNER JOIN 表2
ON 条件
操作 | 描述 |
---|---|
Inner join | 如果表中至少有一个匹配,就返回行 |
left join | 即使右表中没有匹配项,也会返回左表中的值 |
right join | 即使左表中没有匹配项,也会返回右表中的值 |
两个表:
SELECT information.id,`name`,`core`
FROM information
INNER JOIN gradeone
ON information.`id`=gradeone.`id`
三个表:
SELECT information.id,`name`,`core`
FROM information
RIGHT JOIN gradeone
ON information.`id`=gradeone.`id`
INNER JOIN gradetwo
ON XXX = XXX
自连接(了解)
把一张同样的表看成两张一样的表
自连接可用于一张表中数据有关联的情况
SELECT a.x,b.y
FROM 表X AS a
INNER JOIN 表X AS b
ON a.xx=b.yy
4.5排序和分页
排序
升序:ORDER BY 列 ASC
SELECT * FROM `information` ORDER BY core ASC
降序:ORDER BY 列 DESC
SELECT * FROM `information`ORDER BY core DESC
分页
目的:缓解数据库压力,给人体验更好,一般图片采用瀑布流
LIMIT 偏移量,长度
LIMIT 0,5 --选择前五个数据
LIMIT 5,5 --选择第六个到第十个数据
4.6子查询(由里及外)
本质:在where语句中嵌套一个子查询语句
where(select * from)
标签:name,--,数据库,基础,TABLE,id,SELECT From: https://www.cnblogs.com/geeklee/p/17392518.html