默认端口:3306
清屏:system clear
Mysql是一个关系模型数据库管理软件,那么什么是关系模型呢?说白了关系模型指的就是一张张的数据表,通过下边的表格我们可以清楚看到关系模型以及表的相关概念以及对比:
关系模型 | 数据表 |
关系 | 表(行+列) |
属性 | 列(字段) |
域 | 字段的取值范围 |
元组 | 一行记录(一条记录) |
数据库:多张表构成数据库
1.基于C-S架构
由于mysql开源且免费,所以我们可以通过Linux作为操作系统,Apache 或Nginx作为 Web 服务器,MySQL 作为数据库,PHP/Perl/Python作为服务器端脚本解释器可以建立起一个稳定、免费的网站系统。
WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
mysql是基于CS架构进行开发的,服务端用来提供数据库的存储服务,一切数据都存储在mysql服务端。而我们可以通过客户端来实现对服务器的增删改查的操作。
2.mysql的安装
防火墙关闭相关配置(ubuntu firewall):
sudo apt-get install ufw
sudo ufw enable(开启)
sudo ufw status
sudo ufw disable (关闭)
①安装服务端:
sudo apt-get install mysql-server
②安装客户端:
sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev
还可以安装navicat可视化客户端软件方便对数据库的操作(ubuntu下不好用)
③检查是否安装成功:
sudo netstat -tap | grep mysql
mysql -uroot -p
④设置mysql允许远程访问
允许特定人访问:
首先编辑文件/etc/mysql/mysql.conf.d/mysqld.cnf:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉bind-address = 127.0.0.1/改成:0.0.0.0
保存退出,然后进入mysql服务,执行授权命令:
grant all on *.* to root@'%' identified by '你的密码' with grant option;(所有)
grant all on *.* to 'root'@'10.10.11.12' identified by '123456' with grant option; (特定)
flush privileges;
然后执行quit命令退出mysql服务,执行如下命令重启mysql:
service mysql restart
这样,我们的数据库就可以被远程连接了。
允许所有人访问:
指定权限(所有人都可以操作数据库):
修改mysql数据库的user表中的host为%
update `user` set host=”%” where user=”root”
3.mysql中的默认数据库
information_schema:元数据,记录对数据库操作的时间,编码,数据类型;
mysql:当前数据库信息,用户,密码等;
performance_schema:数据库优化,与性能有关,经常访问的进行优化,使访问更快;
sys:information_schema+performance_schema+mysql:切换上边三个数据库进行操作。
4.数据库操作
创建数据库:
create database 名称 character set utf8
显示创建过程:
show create database 数据库名
修改数据库编码:
alter database 数据库名 character set utf8
删除数据库:
drop database 数据库名
切换数据库:
use 数据库名
显示选择的数据库:
select database()
5.表操作
数据类型:
①整数(注意区分有符号以及无符号)
tinyint,smallint,mediumint,integer,bigint
②小数(有效位不同)
有效位:从左第一个非0到最后的位数
float,double,decimal
decimal(5,2)
5:总位数
2:小数点位数
③字符串
char、varchar、text、blob
固定长度:char(8) 不够补满再存
可变长度:varchar(8) 不够就存实际大小
④enum 枚举
emum('男','女')
⑤日期和时间
date:yy:mm:dd
datetime:yy-mm-dd hh:mm:ss
time:hh:mm:ss
创建表:
create table 表名
(
字段1 字段类型,
字段2 字段类型,
字段3 字段类型……
)
删除表:+++
drop table 表名
6.查询语句
执行顺序:
from --> select-->destinct
可以给select出来的项起别名,如:select a as 列 from 表名
①distict
select distinct 列名 from 表名
distinct只对所有字段都一样的才会去重,有一个不一样就不会去,
②limit
limit:限制查询个数(limit 5;limit 2,3)2代表从第三个开始【用于分页】
7.添加语句
①所有列都插入值
语法:insert into table values(v1,v2,v3….)
特点:列值同数,列值同序
②为指定列插入值
语法:insert into table(col1,col2,col3) values(v1,v2,v3)
特点:指定顺序,列值对应
③一次性插入多条记录
语法:insert into table(co1,col2,col3…)values
(v1,v2,v3),
(v1,v2,v3),
(v1,v3,v3)…..
8.修改数据
①修改指定数据
语法:update 表名 set {col1=value1}[…n]where expressioin
②修改全部数据
语法:update 表名 set {col1=value1}[…n]
9删除数据
①delete
delete from goods
delete from goods where id= 1
②truncate
truncate 表名
注意:只能删所有数据,不能根据条件删除,删除整张表数据时比delete快得多
10.数据库的导入以及导出
导出(在终端):
mysqldump -uroot -p 数据库名 >/路径/文件名.sql
导入(在mysql中):
创建新的数据库-->选定该数据库-->source /路径/文件名
11.对列进行增删改查
①增加一列
alter table 表名 add 列名 数据类型 unsigned(无符号数)
②删除一列
alter table 表名 drop column 列名
③修改列的数据类型
alter table 表名 modify 列名 数据类型
④修改列的数据类型并且改名
alter table 表名 change old_colname new_colname 数据类型
12.约束
约束就是对数据进行限制,介绍约束之前先看一下没有约束会带来什么问题!
问题1:下边两个表明显出现了数据冗余
name | age |
fenghua | 24 |
laowang | 25 |
name | age | math |
fenghua | 24 | 89 |
laowang | 25 | 98 |
问题2:丢失数据完整性(id标记数据独一无二,不能重名)
id | name |
1 | fenghua |
2 | laowang |
2 | 小菜鸟 |
3 | rourou |
问题3:数据缺少唯一标识(id,有唯一标识name但是重复,所以还是缺少唯一标识)
name | project | grade | status |
fenghua | 化学 | 80 | 升 |
laowang | 物理 | 98 | 升 |
laowang | 政治 | 66 | 降 |
rourou | 数学 | 78 | 升 |
问题4:缺少实体完整性(同2,3缺少唯一标识)
num | name | project | grade | status |
1 | fenghua | 化学 | 80 | 升 |
2 | laowang | 物理 | 98 | 升 |
laowang | 政治 | 66 | 降 | |
4 | rourou | 数学 | 78 | 升 |
问题5:丢失引用完整性
name | num |
fenghua | 1 |
fenghua1 | 2 |
fenghua2 | 3 |
fenghua3 | 4 |
fenghua4 | 5 |
fenghua5 | 6 |
fenghua6 | 7 |
num | grade |
2 | 69 |
4 | 89 |
9 | 77 |
7 | 95 |
问题6:丢失域完整性
name | gender | idcard |
fenghua | 男 | 4546546486 |
laowang | 女 | 453131264123 |
rourou | 人妖 | 79798789798 |
重点来啦!约束!!!!
主键约束
自动增长
唯一约束
非空约束
默认约束
检查约束
外键约束
①主键约束(不允许为NULL)
作用:让数据拥有唯一标识
primary key
eg:给id添加主键约束id int primary key
②自增长(插入即使错误也会加1,下一次会跳过)
作用:使数据自动增长,一般给主键设置(都设0即可)
语法:
id int primary key unsigned primary key auto_increment
③唯一约束
作用:保证数据的准确性
语法:
qq int unique
特点:可以为多列设置唯一约束
④非空约束
作用:保证数据不为空
语法:
name varchar(30) not null
⑤默认约束
作用:给字段设置默认值
语法:
sex char(2) default ‘男’ not null (此时不插入也不报错,有默认值)
⑥检查约束(mysql里不适用)
作用:检查数据的完整性
语法:
sex char(2) check(‘男’ or ‘女’)
sex enum(‘男’,’女’)
⑦外键约束
作用:让两表之间产生联动关系
语法:
create table class
(
id int primary key auto_increment,
classname varchar(30) not null
)
create table score
(
id int primary key auto_increment,
chinese_score int not null,
foreign key(id) references class(id)
)
要想删除class表和score表,首先要删除score表