数据库基础操作
关系型数据库 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:mm: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