目录

数据库(MySQL)

分类

  • 关系型数据库:例如MySQL
  • 非关系型数据库:例如MongoDB

区别 此处参考链接

  • 关系型数据库:表和表、表和字段、数据和数据存在着关系

优点:
1.数据之间有关系,进行数据的增删改查的时候是非常方便的
2.关系型数据库是有事务操作的,保证数据的完整性和一致性。

缺点: 1.因为数据和数据是有关系的,底层是运行了大量的算法,大量算法会降低系统的效率,会降低性能
2.面对海量数据的增删改查的时候会显的无能为力
3.海量数据对数据进行维护变得非常的无力

适合处理一般量级的数据(银行转账和钱)

  • 非关系数据库:为了处理海量数据,非关系数据库设计之初就是为了替代关系型数据库的关系

优点: 1.海量数据的增删改查是可以的
2.海量数据的维护和处理非常轻松

缺点: 1.数据和数据没有关系,他们之间就是单独存在的 2.非关系数据库没有关系,没有强大的事务关系,没有保证数据的完整性和安全性

适合处理海量数据,保证效率,不一定安全(统计数据,例如微博数据)

MySQL

启动、停止服务

service mysql start
service mysql stop
service mysql restart

基础操作

  1. 登陆数据库服务器
    mysql -u root -p password
  2. 查询数据库服务器中所有的数据库
    show databases;
  3. 选中某一个数据库进行操作
    use test;
  4. 查询数据库中所有的数据表
    show tables;
  5. 显示表table1的结构信息
    desc table1
  6. 创建数据库
    create database DatabaseName;
  7. 创建一个数据表
CREATE TABLE pet (
	name VARCHAR(20),
	owner VARCHAR(20),
	species VARCHAR(20),
	sex CHAR(1),
	birth DATE,
	death DATE);
  1. 向数据表中添加记录
insert into pet values('name','gender','birthday');
  1. 删除表中记录
    delete from pet where name='Fluffy';
  2. 修改表中记录
    update pet set name='旺旺财' where owner='周星驰';
  3. 增删改查
    增加 INSERT – 删除 DELETE – 修改 UPDATE – 查询 SELECT

数据查询

  1. 显示表table1中的所有记录
    select * from table1;
  2. 显示表table1中列名为name和age的数据
    select name,age from table1
  3. 用distinct关键字显示不同的年龄
    select distinct age from table1
    若age列中有3个18岁则只会显示1个
  4. 用limit限制搜索行数 select name from table1 limit 5 限制从前5行中搜索
    select name from table1 limit 5,10 限制从第5行开始向下搜索10行(第一行为0行)

数据排序

  1. 对一列数据排序,默认升序 order by select name from table1 order by name; 按字母顺序对name(若name是用字符串存储)进行排序
  2. 对多列数据排序 select name,age,salary from table1 order by name,salary; 首先按字母排序,若name相同则按salary从小到大排序
  3. 降序排序 desc select name from table1 order by name desc; 按z-a排序
    select name,age,salary from table1 order by name,salary desc; 首先按字母排序,若name相同则按salary由大到小排序
  4. 从排序结果中选取数据 select name from table1 order by name limit 5; 取排序结果中的前5条

过滤数据

  1. where子句 select name from pet where owner = "Gwen"; 选取名字这一列中owner = “Gwen"的行
    注意:在同时使用where和order by时应让order by在where之后,否则会出错;where在匹配时不区分大小写
    支持的操作符:= != < <= > >= between(在指定的两个值之间,例between 2 and 5)
  2. 空值NULL检查 select name from pet where owner = NULL;

操作符

and or in not like

其中like相当于正则表达式 like 'abc%_' , %表示多个字符,_表示单一字符

正则表达式 REGEXP

常用数据类型

主要三类:数值、日期/时间、字符串

  1. 数值
类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度浮点数值
DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度浮点数值
DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值
  1. 日期/时间
类型 大小(字节) 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 ‘-838:59:59’/‘838:59:59’ HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间2038年1月19日 凌晨 03:14:07 YYYYMMDD HHMMSS 混合日期和时间值,时间戳
  1. 字符串(字符)类型
类型 大小 用途
CHAR 0-255字节 定长字符串
VARCHAR 0-65535字节 变长字符串
TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
TINYTEXT 0-255字节 短文本字符串
BLOB 0-65535字节 二进制形式的长文本数据
TEXT 0-65535字节 长文本数据
MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
LONGTEXT 0-4 294 967 295字节 极大文本数据

解决MySQL不用密码也可登陆问题的方法(并非修改密码方法)

mysql -u root -p 或 mysql  //登录mysql
use mysql;
update user set authentication_string=PASSWORD("密码") where user='root';
update user set plugin="mysql_native_password";
flush privileges;
quit;
/etc/init.d/mysql restart;
mysql -u root -p 密码;

参考文章