数据库:就是一种特殊的文件,其中存储着需要的数据
RDBMS(Relational Database Management System)
当前主要使用两种类型的数据库:关系型数据库、非关系型数据库
所谓的关系型数据库RDBMS,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据
关系型数据库核心元素
- 数据行(记录)
- 数据列(字段)
- 数据表(数据行的集合)
- 数据库(数据表的集合)
SQL
SQL是结构化查询语言,是一种用来操作RDBMS的数据库语言,当前关系型数据库都支持使用SQL语言进行操作,也就是说可以通过 SQL 操作 oracle,sql server,mysql,sqlite 等等
所有的关系型的数据库
SQL 是一门特殊的语言,专门用来操作关系数据库,不区分大小写
MySQL是一个关系型数据库管理系统 开源 免费
mysql操作
启动服务
sudo service mysql start
查看进程中是否存在mysql服务
ps ajx|grep mysql
停止服务
sudo service mysql stop
重启服务
- sudo service mysql restart
配置
配置文件目录为/etc/mysql/mysql.cnf
进入conf.d目录,打开mysql.cnf,发现并没有配置
进入mysql.conf.d目录,打开mysql.cnf,可以看到配置项
主要配置项如下
bind-address表示服务器绑定的ip,默认为127.0.0.1
port表示端口,默认为3306
datadir表示数据库目录,默认为/var/lib/mysql
general_log_file表示普通日志,默认为/var/log/mysql/mysql.log
log_error表示错误日志,默认为/var/log/mysql/error.log
命令行客户端
在终端运行如下命令,按提示填写信息
sudo apt-get install mysql-client
详细连接的命令可以查看帮助文档
mysql --help
最基本的连接命令如下,输入后回车
mysql -u root -pmysql
按ctrl+d或输入如下命令退出
quit 或者 exit
1.数据类型:
- 整数:int,bit
- 小数:decimal decimal表示浮点数,如decimal(5,2)表示共存5位数,小数占2位
- 字符串:varchar,char
–tinyint 1 -128~127 0~255(1表示字节大小 带负号表示有符号范围Signed)
–smallint 2 0~65535 (无符号范围Unsigned)
–mediumint 3 0~16777215
–int/integer 4 0~4294967295
–bigint 8 0~18446744073709551615
日期时间: date, time, datetime
–data 4 “2020-01-01”
–time 3 “12:29:59”
–datetime 8 “2020-01-01 12:29:59”
–year 1 “2017”
–timestamp 4 “1970-01-01 00:00:01” UTC ~ “2038-01-01 00:00:01” UTC
- 枚举类型(enum)
–char表示固定长度的字符串,如char(3),如果填充’ab’时会补一个空格为’ab ’
–varchar表示可变长度的字符串,如varchar(3),填充’ab’时就会存储’ab’
2. 约束:
-
auto_increment表示自动增长
-
主键primary key:物理上存储的顺序主键后 表示不能够重复,必须保证有序,但是不一定连续 (12489)
-
非空not null:此字段不允许填写空值
-
惟一unique:此字段的值不允许重复
-
默认default:当不填写此值时会使用默认值,如果填写时以填写为准
-
有符号Signed 无符号Unsigned
3 数据库操作:
-
连接数据库 mysql -uroot -pmysql
-
退出数据库 exit ,quit ,ctrl + d
-
查看所有数据库: show databases;
-
使用数据库: use 数据库名;
-
查看当前使用的数据库: select database();
-
显示数据库版本: select version();
-
显示时间: select now();
-
创建数据库: create database 数据库名 charset=utf8;
例:create database python charset=utf8;
创建数据库需要制定字符集 如果不指定就会使用默认的拉丁字符集 指定字符集 不是 utf-8
-
查看数据库的创建语句: show create database 数据库;
-
删除数据库: drop database 数据库名;
例:drop database python;
4 数据表操作:
-
查看当前数据库中所有表: show tables;
-
查看表结构: desc 表名;
-
创建表
auto_increment表示自动增长
create table 数据表名字 (字段 类型 约束); ---约束不分先后顺序
例:创建学生表
create table students(
id int unsigned primary key auto_increment not null,
name varchar(20) default '',
age tinyint unsigned default 0,
height decimal(5,2),
gender enum('男','女','人妖','保密'),
cls_id int unsigned default 0
)
-
查看表的创建语句:show create table 表名;
-
查看表结构:desc students;
-
修改表结构 alter
-
修改表-添加字段:alter table 表名 add 列名 类型及约束;
> 例:alter table students add birthday datetime default "2011-11-11 11:11:11";
> 例:alter table students add birthday datetime;
> 例:alter table students change birthday birth datetime not null;
> 例:alter table students modify birth date not null;
- 修改表-删除字段:alter table 表名 drop 列名;
> 例:alter table students drop birthday;
- 删除表:drop table 表名;
> 例:drop table students;
数据增删改查(curd)
±-------±------------------------------------±-----±----±--------±---------------+
| Field | Type | Null | Key | Default | Extra |
±-------±------------------------------------±-----±----±--------±---------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(15) | NO | | NULL | |
| age | tinyint(3) unsigned | YES | | 0 | |
| high | decimal(5,2) | YES | | 0.00 | |
| gender | enum(‘男’,‘女’,‘中性’,‘保密’) | YES | | NULL | |
| cls_id | int(10) unsigned | NO | | NULL | |
±-------±------------------------------------±-----±----±--------±---------------+
1. 增加 insert
- 全列插入 :值和表的字段的顺序一一对应
- insert [into] 表名 {values|value} (值1,…)
- 主键的占位关键字 NULL DEFAULT 0
- 枚举的原始值(枚举的哪些性别) 和枚举值(性别对应的标号) 在SQL中枚举值默认从1开始
- 全列插入在开发中使用的非常少(一旦表结构更新, sql语句就废了)
>insert into students values (0,"小乔",18,180.00,1,1);
>insert into students values (NULL,"大桥",18,180.00,2,1);
>insert into students values (NULL,"李逵",18,180.00,"男生",1);
> #错误insert into students values (NULL,"李逵",18,180.00,"男生",1);
> #错误insert into students values (NULL,"李逵",18,180.00,10,1);
- 指定列插入 :值和列一一对应
insert into 表名 (列1,...) values(值1,...)
insert into students (name, gender, cls_id) values ('鲁班',1,2);
- 多行插入 批量插入
insert into 表名(列1,...) values (值1,...),(值1,...),...
insert into students (name, gender, cls_id) values ('李白',1,2), ("陈咬金",1,3);
2.修改
- where 表示修改的范围
- update 表名 set 列1=值1,列2=值2… [where 条件]
不推荐update students set gender = 2; 会全表更新
update students set gender = 1 where id = 3;
update students set gender = 1, name = "李黑" where id = 5;
- sql中 通过一个等于号表示相等
3.删除
- 物理删除
DELETE FROM tbname [where 条件判断]
delete from students; -- 全表删除 不可逆,mysql从删库到跑路 dba
delete from students where id = 4; -- 个人中心 -> 我的订单 --> 订单详情 --> 商品详情
- 逻辑删除(推荐)
1. 添加一个标识字段
alter table students add is_delete bit default 0;
2. 如果要删除某条数据 就设置该字段的值为1 表示删除
update students set is_delete = 1 where id = 4;
3. 在查询的时候 就通过标识来判断是否被删除
-- 查询有哪些学生没有被删除
select * from students where is_delete = 0;