寥寥几笔:
现在是累计什锦式学习MySQL部分的第2天
现在把最前头的记录都一起传上来,
虽然现在写的这一块还是太简单了,
但毕竟配置环境什么的还是花时间, 于是写一篇记录一下粗略的学习过程
现在越学越感觉对于相关知识的学习是由"简单, 繁杂" 到 "深入, 简约"的一个过程. 所以还是有点耐心吧哈哈
入门
数据库DB
数据库管理系统DBMS
关系型数据库(SQL)
- mySQL, Oracle, SQLlite
- 以表和表之间,行和列之间的关系进行储存
非关系型数据库(No SQL/ No only SQL)
- Redis, MongDB
- 以对象自身的属性来进行储存
DBMS
- 数据库的管理软件
- mySQL是数据库管理系统
mySQL->关系型数据库管理系统
使用SQL语句, 开源, 速度快
版本:5.7稳定
建议不要安装exe(卸载未更改注册表)
安装
- 解压
- 添加环境变量, 在系统变量里新建mySQL的bin目录
- 在mySQL目录下新建my.ini文件, 增改信息
- 在管理员模式下打开命令提示符, 按照说明操作’’
安装完成
账户:root
密码:123456
启动: net start mysql
登录:mysql -u root -p
退出:exit
关闭:net stop mysql
安装SQLyog
创建一张表
每一个sqlyog的执行操作, 本质就是对应了一个sql, 可以在软件的历史记录中查看
连接数据库
在cmd中
mysql -u root -p 连接数据库
在mysql命令行中
update user set password=password(‘123456’)where user=‘root’; 修改密码
flush privileges; 刷新权限, 在一些操作或使用
show databases; 查询所有数据库
use xxx; 使用表xxx, 切换数据库
show tables; 查看数据库中所有的表
describe user; 查看表user数据库所有信息
create database xxx; 创建一个数据库xxx
exit; 退出连接
– 单行注释
/* */多行
- DDL 定义语言
- DCL 控制语言
- DML 操作语言
- DQL 查询语言
DQL
DDL
DML
操作数据库
操作数据库->操作数据库中的表->操作数据库中表的数据
mySQL中命令不区分大小写
操作
1.创建数据库
CREATE DATABASE [IF NOT EXISTS] test;
中括号为可选
2.删除数据库
DROP DATABASE IF EXISTS test;
如果表名或字段名是特殊字符, 则使用`标出
3.使用数据库
USE `school`;
如果表名或字段名是特殊字符, 则使用`标出
4.查看数据库
SHOW DATABASES;
数据库的列类型
数值
- tinyint 占1个字节
- smallint 占2个字节
- mediumint 占3个字节
- int 占4个字节
- bigint 占8个字节
- float 占4个字节
- double 占8个字节
- decimal 字符串形式的浮点数 金融计算时使用
字符串
-
char 字符串 范围0~255
-
varchar 可变字符串 0~65535 对应Java中的String
-
tinytext 微型文本 2 8 − 1 2^8 -1 28−1
-
text 字符串文本 $2^{16} -1 $保存大文本
时间
- date YYYY-MM-DD 日期格式
- time HH:mm:ss 时间格式
- datetime YYYY-MM-DD HH:mm:ss 最常用的时间格式
- timestamp 时间戳
null
- 没有值, 未知
- 注意不要用NULL计算
数据库的字段属性(重点)
unsigned:
- 无符号整数
zerofill:
- 0填充
- 把不足的位数用0填充
自增:
- 自动在上一条的基础上+1
- 通常用来设计唯一的主键, 必须是整数
- 可以设置起始值和步长
非空:
- 如果设置为not null, 如果不赋值, 则报错
- 如果设置为NULL , 如果不赋值, 则默认为NULL
创建数据库表(重点)
CREATE TABLE [IF NOT EXIST] `表名`(
`字段名` 列类型 [属性] [索引] [注释],
`字段名` 列类型 [属性] [索引] [注释],
...
`字段名` 列类型 [属性] [索引] [注释]
PRIMARY KEY('id')
)[表类型] [字符集设置] [注释]
相关命令
SHOW CREATE DATABASE 数据库名
查看创建数据库的语句
SHOW CREATE TABLE 表名
查看表的定义语句
DESC 表名
显示表的结构
数据表的类型
INNODB: 默认使用
MYIAM: 早些年使用的
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约2倍 |
常规使用操作:
- MYISAM 节约空间, 速度较快
- INNODB 安全性高, 事务的处理, 多表多用户操作
在物理空间的位置
所以的数据库文件都存在data目录下, 一个文件夹就对应一个数据库
本质还是文件的存储
MySQL引擎在物理文件上的区别
- InnoDB 在数据库表中只有一个 *.frm文件, 以及上级目录下的idbata1文件
- MYISAM对应文件
- *.frm 表结构的对应文件
- *.MYD 数据文件(data)
- *.MYI 索引文件
设置数据库表的字符集编码
CHAREST=utf8
不设置的话, 将会是不支持中文的默认编码(Latin1)
在my.ini中配置默认编码
修改与删除表
修改表名
ALTER TABLE 旧名 RENAME AS 新名
增加表的字段
ALTER TABLE 表名 ADD 要添加的字段 列属性
修改字段类型和约束
ALTER TABLE 表名 MODIFY 字段名 列属性
修改字段名
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 列属性
删除表的字段
AKTER TABLE 表名 DROP 字段名
删除表
DROP TABLE IF EXISTS 表名
MySQL数据管理
外键(了解)
创建表后, 添加外键约束
ALTER TABLE 表 ADD CONSTRAINT 约束名 FOREIGN KEY(作为外键的列) REFERENCE 表名(字段名)
以上操作的外键都是物理外键, 数据库级版的外键, 不建议使用, 避免数据库过多造成困扰
建议
- 数据库就是单纯的表, 只用来存数据, 只有行和列
- 想使用多张表的数据, 使用程序实现的外键
DML语言(背)
数据库的意义:数据存储, 数据管理
DML语言: 数据操作语言
- Insert
- Update
- Delete
添加 Insert
插入语句
INSERT INTO 表名 ([字段名1, 字段名2, ...])VALUES('值1'), ('值2'), ...
-
一般写插入语句, 一定要数据和字段一一对应
-
字段可以省略, 但后面的值需要一一对应
-
可以同时插入多条数据, 在VALUES后用括号隔开
修改 Update
UPDATE 表名 SET 字段名 = 值 WHERE 条件
可以修改多个属性如,
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2 WHERE 条件
条件
where 子句 运算符
操作符 | 含义 |
---|---|
= | 等于 |
<>或!= | 不等于 |
< | |
> | |
<= | |
>= | |
BETWEEN a AND b | [a, b] |
AND | && |
OR | || |
删除 Delete
删除一些数据
DELETE FROM 表名 WHERE 条件
清空数据库
TRUNCATE 表名
相同点: 都删除数据, 且不会删除表结构
不同:
- TRUNCATE 会重新设置 自增列
- TRUNCATE 不会影响事务
DELETE删除问题–重启数据库后
- InnoDB 自增列会从1开始(存在内存当中, 断电就丢失)
- MyISAM 继续从上一个自增量开始(存在文件中, 不会丢失)
DQL查询数据(最重要)
DQL
Data Query Language–数据查询语言
SELECT 语句
SELECT 字段名 FROM 表名
字段名可以使用通配符 *, 也支持多个字段同时查
可以给结果起别名, 方便阅读
SELECT `StudentNo` AS 学生学号 FROM 表名
使用==concat()==函数, 返回结果为连接参数产生的字符串
select concat ('分数是', score) as 成绩表 from student;