[数据库 02] 数据库 数据类型 引擎类型
数据库基础操作
关系型数据库 SQL 非关系型数据库 NoSQL(Not noly sql) 常见:redis, MongDB
1. Mysql 基本命令行操作
每行都必须带;
结尾
-- 进入
mysql -uroot -p
-- 修改用户名密码(实际是对存储密码的表的修改)
update mysql.user set authentication_string=password('') where user = 'root' and Host = 'localhost';
-- 刷新权限
flush privileges;
-- 展示所有数据库
show databases;
-- 切换数据库
mysql> use school
Database changed
-- 展示所有的表
show tables;
-- 描述表中的行列等信息
desc student;-- student 是表名
DDL, DML, DQL, DCL D...L :数据库 ... 语言
定义,管理,查询, 控制
2. 操作数据库
操作数据库,操作表,操作数据
1. 操作数据库
-
创建
create database 数据库名 ; -- 加判断 create database if not exists 数据库名 ;
-
删除
drop database 数据库名 ; drop database if exists 数据库名 ;
-
使用
-- 切换数据库 use 数据库名 ; -- 如果对象名称为一个特殊字符或字段(和 sql 系统字段有重复,则增加 ``) select `user` from student; -- user 是 student 表中的一个属性
-
查看数据库
show databases;
2. 数据库数据类型
常用:
int 对应 java 中的 int
varchar 对应 String
text 用于存储长文本
timestamp 为时间戳,
datetime 常用
数据库中 int 类型,设置的 Length 只和字段属性中的 Zerofill 有关(补几个 0),设置为 int 之后,最大数据量就是 4 字节,和设置的 Length 无关。
-
数值
- 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🇲🇲ss 时间日期
- datetime 最常用的时间格式
- timestamp 时间戳 , 1970.1.1 到现在的毫秒数
- year 年份表示
-
null
- 没有值,未知
3. 数据库的字段属性
-
Unsigned:无符号整数,声明不能为负数
-
Zerofill: 0 填充,不足的位数,使用 0 填充
-
Auto Incr: 自增, 自动在上一条记录的基础上加 1,用来设置唯一主键,理解为 index,必须是整数类型,
可以自定义主键的初始值和增量(在 sqlyog 创建表格的 advanced 里设置)
-
Not null: 当设置为 not null 时,如果不给该属性赋值,就会报错。
-
Default:设置默认值
每张表中,必须存在的 5 个属性(项目阶段):表示一个记录存在的意义
id 主键
`version` 乐观锁
is_delete 伪删除
gmt_create 创建时间
gmt_update 修改时间
4. 创建数据库表
-- 字符串使用单引号
-- 所有的语句后加逗号, 最后一个不用加
CREATE TABLE IF NOT EXISTS `student`(
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`address` VARCHAR(100) DEFAULT NULL COMMENT 'address',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id
)
)ENGINE=INNODB DEFAULT CHARSET=utf8
格式:
create table 表名(
属性名 类型声明(类型长度) 字段属性,
primary key (属性名) -- 最后一个没有, 号
)表类型 字符编码
查看建好的数据库的定义 SHOW CTEATE TABLE 表明
3. 数据库引擎类型
InnoDB | MyISAM | |
---|---|---|
事务支持 | 支持 | 不支持 |
外键支持 | 支持 | 不支持 |
行级锁 | 支持 | 不支持(表级锁) |
聚集索引 | 支持 | 不支持 |
全文索引 | 不支持 | 支持 |
表空间 | 大,为 MyISAM 的两倍 | 小 |
全文索引:可以在一篇文章中索引内容
MyISAM:节约空间,速度快
InnoDB: 安全性高,事务处理, 支持多表多用户处理(支持行锁和外键)
所有的数据库都存在于 data 目录下,本质还是文件存储
存储区别:
InnoDB:生成*.frm
文件, 和上层文件夹中的ibdata1
文件。
MyISAM:
*.frm
表结构的定义文件*.MYD
数据文件 data*.MYI
索引文件 index
如果不设置 charset,mysql 默认字符集编码。
修改方法:1. 建表时选择 charset=utf8;2. 在 my.ini 中配置, 添加character-set-server=utf8
4. 修改和删除数据表字段
-- 注意 change 和 modify 的区别:一个可以重命名,一个不可以
-- 修改表名
alter table 旧表名 rename as 新表名;
-- 增加表的属性
alter table 表名 add 属性 属性类型(长度)
-- 修改表的属性约束(属性类型)
alter table 表名 modify 旧属性 varchar(11) -- 修改约束
alter table 表名 change 旧属性名 新属性名 varchar(11) -- 属性重命名,也可以修改约束
-- 删除表属性
alter table 表名 drop 属性名
删除表
drop table if exists 表名