数据库排名网站:db-engines.com/en/ranking
Oracle收费,MySQL免费,MongoDB和Redis是nosql型数据库,SQLite是移动端常用数据库。
- 当前物理的数据库都是按E-R模型设计的,其中E代表实体(entry),R代表关系(relationship)。
- 数据库设计三范式,后一个范式都是在前一个范式的基础上建立的。
1Nf:列不可拆分,2Nf:唯一标识,3Nf:引用主键 - 在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,包括数据字段的类型、约束。
- 数据类型
1. 数字: int(5):5位数; decimal(5,3):一共五位数,小数点后3位
2. 字符串:char(n):有限长度字符串; varchar(n):有限长度字符串; text():不定长度
Char为定长,varchar,text为变长、
(https://blog.csdn.net/leoly612200/article/details/74929161)
1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
2、VARCHAR。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的
值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。
从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。
3、TEXT。text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。
注意一点的,Char,Varchar不像数值类型,有系统默认长度,所以必须在括号里定义长度,可以有默认值
text不可以写默认值,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入(严格模式下没有测试)
总结:char会造成空间浪费,但是有速度优势;而varchar节省了空间,但是速度就不如char。
(1)经常变化的字段用varchar
(2)知道固定长度的用char
(3)尽量用varchar
(4)超过255字节的只能用varchar或者text
(5)能用varchar的地方不用text
3. 日期:datetime,date
4. 布尔:bit,用来做有限数量的选择,如性别 - 约束
- 主键:primary key 找数据快。一个表只能有一个主键。物理存储是按主键存储的。
- 非空: not null 检查非空否则报错
- 唯一: unique 属性值是不能重复的,主键也满足。
- 默认: default 不填就是默认值
- 外键约束:foreign key 第三范式的外键引用
- 逻辑删除:isDelete 保护数据
- 命令行数据库操作:
- 创建数据库:mysql>create database xxx charset=utf8;
- 查看所有数据库:show databases;
- 切换数据库:use xxx;
- 查看当前数据库: select database();
- 删除数据库: drop database xxx;
Ubuntu上登录sql
- 连接MySQL:sudo mysql -uroot -p
- 查看帮助:mysql –help
- 进入mysql后,查看版本:select version(); 分号结尾。 显示当前时间:select now();
- 远程连接:mysql -h(ip地址) -u(root) -p
1.-h后写要连接的ip地址
2.-u后写连接的用户名
3.-p回车后写密码 - mysql默认端口号3306
- 创建数据库: create database DBname charset=utf8;
- 删除数据库:drop database DBname;
- 切换数据库:use DBname;
- 查看当前数据库:select database();
- 查看所有存在的数据库:show databases;
表操作:
- 查看当前所有表:show tables;
- 创建表:mysql> create table yyy(id int auto_increment primary key not null,name varchar(10) not null, gender bit default 1,birthday datatime);
- 查看表的结构:desc yyy;
- 修改表: alter table yyy add|change|drop … …;
- 物理性删除表:drop table yyy;
- 更改表名称:rename table yyy to ttt;
- 查看表的创建语句:show create table ‘表名’
数据操作
- 查询: select * from 表名
- 增加: 全列插入:insert into 表名 values(…)
缺省插入:insert into 表名(列1,…) values(值1,…)
同时插入多条数据:insert into 表名 values(…),(…)…;
或insert into 表名(列1,…) values(值1,…),(值1,…)…; - values的常见格式有 int 整型;decimal(x,y) 浮点型表示共x位,小数点后y位 ;varchar(n),字符串长度为n, bit default 1 默认为1.
- 主键列是自动增长,但是在全列插入时需要占位,通常使用0,插入成功后以实际数据为准
- 修改数据:update 表名 set 列1=值1,… where 条件
- 物理删除: delete from 表名 where 条件 ; 逻辑删除:update students isdelete=1 where … ;
备份与恢复
- 备份:进入超级管理员 sudo -s
进入mysql库目录
cd /var/lib/mysql
运行mysqldump命令
mysqldump –uroot –p 数据库名 > ~/Desktop/备份文件.sql; - 恢复:连接mysql,创建数据库
退出连接exit,执行如下命令
mysql -uroot –p 数据库名 < ~/Desktop/备份文件.sql
根据提示输入mysql密码
- 备份:进入超级管理员 sudo -s
学习日记27--MySQL学习1
最新推荐文章于 2024-07-04 14:36:53 发布