基础概念
数据库系统DBMS:数据在计算机中存储并计算,用数据库系统进行管理
- 数据库系统可以持久化存储,优化读写,保证数据的有效性
当前数据库分两类:
- 文档型(如sqlite,以文件形式储存数据,复制文件即复制数据库)
- 服务型(如MySQL、postgre:数据存储在物理文件中,需要使用终端以tcp/ip协议链接来进行数据库读写操作)
E-R模型:Entity-Relationship model
- (1)实体集用矩形框
- (2)实体的属性用椭圆框,框内写上属性名,并用无向边与其实体集相连。
- (3)实体间的联系用菱形框,联系以适当的含义命名,用无向连线将参加联系的实体矩形框分别与菱形框相连,并在连线上标明联系的类型,即1—1、1—N或M—N。
字符编码:gb2312 中国通用;utf-8 国际通用。创建数据库时指定
数据库完整性:
数据被数据类型和约束所限制,以保证数据正确性
数据类型:(数据有效性保证)
- 数字:int,decimal
-
如:decimal(5,2)
-
- 字符串:char,varchar,text
-
如:char(4)右补空格固定长度:"32  " varchar(4)最长长度:"3232" text不限长
-
- 日期:datetime,date,time
-
如:datetime日期时间,date日期,time时间
-
- 位数据:bit
-
值为0或1,对于值为两个互斥的字段可以用bit类型来降低数据存储开销: 如性别、逻辑删除→扩展多状态0 1 10 11
-
约束:(数据正确性保证)
- 主键primary key 表中只有一个主键,值不重复(可标识实体唯一性),物理上存储结构是按主键维护的(作为外键引用效率快)
- 非空not null
- 惟一unique 表中可有多个唯一约束的字段,值不能重复。
- 默认default default(1) 默认值1
- 外键foreign key 指定其值只能来自特定表的主键的值
- 自动增长auto_increment
- 基本常用的主键约束:auto_increment primary key not null
- ps:表设计可以预留1~5个字段为扩展使用;逻辑删除:isDelete、DeleteFlag
mysql操作
软件操作
进入数据库命令行:mysql -uroot -p密码
- 查看版本:select version();
- 显示当前时间:select now();
- 退出 quit;
远程链接:mysql -hip地址 -uroot -P端口 -p密码
- -P不指定,为默认3306端口
密码设置:
-
root密码为空时:设置新密码
mysqladmin -uroot newpassword; -
密码不为空,使用sqladmin命令修改密码:
mysqladmin -uroot -p123456 password 1234567; -
使用set passsword命令修改密码:
set password for 用户名@localhost = password(‘新密码’); -
忘记root密码情况下(设置配置文件跳过验证再修改用户表的密码):
# 1.跳过MySQL的密码认证(windows下修改的是my.ini): vim /etc/my.cnf # /mysqld(vim编辑状态下搜索文本) # 在[mysqld]文本段:后面任意一行添加“skip-grant-tables”用来跳过密码验证,:wq # 2.重启MySQL(有些用户可能需要使用/etc/init.d/mysqld restart),进入mysql服务端: /etc/init.d/mysql restart mysql # 3.用sql修改root的密码 mysql>mysql -u root -p (回车) mysql> update user set password=password("你的新密码") where user="root"; mysql> flush privileges; mysql> quit # 注意:如果在执行该步骤时出现ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement 。 则执行flush privileges 命令后再执行该命令即可。 # 4.编辑my.cnf,去掉刚才添加的内容,然后重启MySQL。
数据库操作
创建数据库:create database 数据库名 charset=utf8;
删除:drop database 数据库名;
切换:use 数据库名;
查看当前选择的数据库:select database();
查看所有数据库:show databases;
表操作:
创建表:create table 表名(列及类型);
-
如: create table students( id int auto_increment primary key not null, sname varchar(10) not null );
修改表:alter table 表名 add|change|drop 列名 类型 约束;
-
如: alter table students add birthday datetime;
删除表:drop table 表名;
清空表:truncate table 表名; (删除内容释放空间但不删除定义(保留表数据结构))
查看当前选择的数据库的所有表:show tables;
查看表结构:desc 表名;
改表名:rename table 表名;
查看表创建语句:show create table ‘表名’;
-
PRIMARY KEY('id') ENGINE=InnoDB DEFAULT CHARSET=utf8; 标准写法。InnoDB引擎不一样则底层写入磁盘的底层数据结构不一样
数据操作
查询:select * from 表名;
增加:
-
全列插入:insert into 表名 values(...); 缺省插入:insert into 表名(列1,...) values(值1,...); 未设置值的字段会自动设置为null,若其约束为not null则会报错; 同时插入多条数据:insert into 表名 values(...),(...)...; 或insert into 表名(列1,...) values(值1,...),(值1,...)...;
删除:
-
delete from 表名 where 条件;
修改:
-
update 表名 set 字段=value where 条件; 逻辑删除实为修改:update students set isdelete=1 where ...;
备份和恢复
进入超级管理员:sudo -s
进入mysql库目录:cd /var/lib/mysql
备份数据库2中的数据(运行mysqldump命令):
-
mysqldump -uroot -p密码 数据库名2 > ~/备份文件名.sql;
在数据库1中恢复数据:
-
>>> mysql -uroot -p 数据库1名 < ~/备份文件名.sql >>> 密码