数据库(MySQL)
目录
分类
- 关系型数据库:例如MySQL
- 非关系型数据库:例如MongoDB
区别 此处参考链接
- 关系型数据库:表和表、表和字段、数据和数据存在着关系
优点:
1.数据之间有关系,进行数据的增删改查的时候是非常方便的
2.关系型数据库是有事务操作的,保证数据的完整性和一致性。
缺点:
1.因为数据和数据是有关系的,底层是运行了大量的算法,大量算法会降低系统的效率,会降低性能
2.面对海量数据的增删改查的时候会显的无能为力
3.海量数据对数据进行维护变得非常的无力
适合处理一般量级的数据(银行转账和钱)
- 非关系数据库:为了处理海量数据,非关系数据库设计之初就是为了替代关系型数据库的关系
优点:
1.海量数据的增删改查是可以的
2.海量数据的维护和处理非常轻松
缺点: 1.数据和数据没有关系,他们之间就是单独存在的 2.非关系数据库没有关系,没有强大的事务关系,没有保证数据的完整性和安全性
适合处理海量数据,保证效率,不一定安全(统计数据,例如微博数据)
MySQL
启动、停止服务
service mysql start
service mysql stop
service mysql restart
基础操作
- 登陆数据库服务器
mysql -u root -p password - 查询数据库服务器中所有的数据库
show databases; - 选中某一个数据库进行操作
use test; - 查询数据库中所有的数据表
show tables; - 显示表table1的结构信息
desc table1 - 创建数据库
create database DatabaseName; - 创建一个数据表
CREATE TABLE pet (
name VARCHAR(20),
owner VARCHAR(20),
species VARCHAR(20),
sex CHAR(1),
birth DATE,
death DATE);
- 向数据表中添加记录
insert into pet values('name','gender','birthday');
- 删除表中记录
delete from pet where name='Fluffy'; - 修改表中记录
update pet set name='旺旺财' where owner='周星驰'; - 增删改查
增加 INSERT – 删除 DELETE – 修改 UPDATE – 查询 SELECT
数据查询
- 显示表table1中的所有记录
select * from table1; - 显示表table1中列名为name和age的数据
select name,age from table1 - 用distinct关键字显示不同的年龄
select distinct age from table1
若age列中有3个18岁则只会显示1个 - 用limit限制搜索行数
select name from table1 limit 5限制从前5行中搜索
select name from table1 limit 5,10限制从第5行开始向下搜索10行(第一行为0行)
数据排序
- 对一列数据排序,默认升序 order by
select name from table1 order by name;按字母顺序对name(若name是用字符串存储)进行排序 - 对多列数据排序
select name,age,salary from table1 order by name,salary;首先按字母排序,若name相同则按salary从小到大排序 - 降序排序 desc
select name from table1 order by name desc;按z-a排序
select name,age,salary from table1 order by name,salary desc;首先按字母排序,若name相同则按salary由大到小排序 - 从排序结果中选取数据
select name from table1 order by name limit 5;取排序结果中的前5条
过滤数据
- where子句
select name from pet where owner = "Gwen";选取名字这一列中owner = “Gwen"的行
注意:在同时使用where和order by时应让order by在where之后,否则会出错;where在匹配时不区分大小写
支持的操作符:= != < <= > >= between(在指定的两个值之间,例between 2 and 5) - 空值NULL检查
select name from pet where owner = NULL;
操作符
and or in not like
其中like相当于正则表达式 like 'abc%_' , %表示多个字符,_表示单一字符
正则表达式 REGEXP
常用数据类型
主要三类:数值、日期/时间、字符串
- 数值
| 类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
|---|---|---|---|---|
| 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的值 | 小数值 |
- 日期/时间
| 类型 | 大小(字节) | 范围 | 格式 | 用途 |
|---|---|---|---|---|
| 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 | 混合日期和时间值,时间戳 |
- 字符串(字符)类型
| 类型 | 大小 | 用途 |
|---|---|---|
| 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 密码;