MySQL基础

数据的存储

单程序的数据存储在文件中(独有)
但程序程序(共有)

数据库MySql

MySQL:是用于管理文件的软件

服务端软件

  • socket服务端
  • 本地文件操作
  • SQL语句解析

客户端软件

  • socket客户端
  • 发送命令
  • SQL语句解析

技能

  • 安装客户端 服务端
  • 连接
  • 学习SQL语句

  • 其他类似软件:

    关系型数据库:sqllite,db2,oracle,access,sql server MySQL
    非关系型数据库:MongoDB,redis
    

MySql安装

Windows版本

下载地址

  • 安装版本就是一路next

  • 解压版的安装方式

    • 初始化 找到bin文件下的mysqld
      • 服务端 E:\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld –initialize-insecure
      • 用户名默认是 root 面默认为空
    • 启动服务端

      • E:\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld
    • 客户端连接

      • E:\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld -u root -p
    • 通过设置环境变量的方式

      • 添加环境变量 E:\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld
    • windows服务

      • 制作Windows服务 E:\mysql-5.7.16-winx64\mysql-5.7.16-winx64\bin\mysqld –install
      • 可以用 net start mysql启动服务 net stop mysql停止服务
linux -cenos7

CentOS 7的yum源中没有正常安装mysql时的mysql-sever文件,需要去官网上下载

1
2
3
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
# yum install mysql-community-server

成功安装之后重启mysql服务
service mysqld restart
初次安装mysql是root账户是没有密码的
设置密码的方法
mysql -u root
mysql> set password for ‘root’@‘localhost’ = password(‘mypasswd’);
mysql> exit

MySQL连接

数据库的格式是:
  • (文件夹)数据库
    • (文件)表
      • (行)数据行
      • 数据行
数据库的连接

默认的是 mysql -u root -p

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
查看数据库:show databases; # 最后是s 代表多个 分号结尾
创建数据库: create database db1; #没有s db1是数据库的名字
进入数据库:use db1;
查看数据库中的表: show tables;
查看所有的表:select * from 表名字; # 查看表中的内容
查看所有的用户:用户存在在mysql的user表中,select user,host from user;查看
+------+-----------+
| user | host |
+------+-----------+
| abc | % |
| root | 127.0.0.1 |
| root | ::1 |
| | haha |
| root | haha |
| | localhost |
| root | localhost |
+------+-----------+
创建用户
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
创建一个用户,用户名是aaa,密码是123 ,只能是192.168.1.0登录
create user 'aaa'@'192.168.1.0' identified by '123';
创建一个用户,用户名是bbb,密码是123 ,只能是192.168.1.% 在这个范围内登录
create user 'bbb'@'192.168.1.%' identified by '123';
任意IP都能登录
create user 'ccc'@'%' identified by '123';
最后查看所有的用户:
mysql> select user,host from user;
+------+-------------+
| user | host |
+------+-------------+
| abc | % |
| root | 127.0.0.1 |
| bbb | 192.168.1.% |
| aaa | 192.168.1.0 |
| root | ::1 |
| | haha |
| root | haha |
| | localhost |
| root | localhost |
+------+-------------+

在操作Linux登录mysql的时候,用户用空的密码也可以登录。通过查找是是因为mysql 系统表(mysql.user)里默认有几条空用户与空密码的数据,所以导致以上的问题,使用如下命令,把空用户的数据行删除掉即可;

1
2
3
mysql> select * from mysql.user;
mysql> delete from mysql.user where user = "";
mysql> flush privileges;

http://63638790.blog.51cto.com/513514/1556935

授权
1
2
3
4
5
6
部分授权
grant select,insert,update on db1.t1 to 'abc'@'%';
全部授权
grant all privileges on db1.t1 to 'abc'@'%';
取消授权
mysql> revoke all privileges on db1.t1 from 'abc'@'%';

SQL语句规则

操作文件夹(数据库)

  • 查看所有的数据库 show databases;
  • 创建数据库 create database db1;
  • 设置数据库的编码 create database db1 default charset utf8; # 这里没有等号
  • 删除数据库 drop database db1;

操作文件(表)

注意在创建表的时候,首先要选择具体的数据库

  • 查看所有的表 showtables;
  • 创建表 create table t1(id int ,name char(10));
  • 创建表的时候设置字符编码 create table t1(id int ,name char(10)) engine=innodb default chatset=utf8; # 注意这里有等号,Innode是事务操作,支持自动的回滚(主要用在转账操作,一方转账失败,自动回滚)
    - innodb 支持事务,原子性操作
    - myisam myisam
    
1
2
3
4
create table t1(
id int not null auto_increment primary key,
name char(10)
)engine=innodb default charset=utf8;

auto_increment 表示自增
primary key;# 主键 表示约束,不能重复切不能为空

以后通常的设置

1
2
3
create table t2(
id int not null auto_increment primary key,
name char(10))engine=innodb default charset=utf8;

  • 清空表
    delete from t1;#这种删除不会删除索引 插入内容从原来的索引位置
    truncate table t1;# 会删除索引

  • 删除表 drop table t1;

数据类型
  • 数字

    • tinyint
    • int
    • bigint
    • FLOAT
    • DOUBLE
    • decimal 可以定制精确的小数
      decimal(a,b);a是数据的总长度 b是小数位数
  • 字符串

    • char(10) 定义了10个就会占用10个,空的用空格补齐,速度快
    • varhar(10) 可变长度 节省空间
      ps: 数据库优化,创建表的时候吧定长的房前面 不定长的放后面

    • text 存放大的数据

    • 更大的数据就是文件,存放在文件服务器中,db中存放路径
  • 时间类型 DATATIME

  • 枚举
  • set

操作文件中的内容(表的内容)

  • 插入数据 insert into t1(id,name) values(1,’aaa’);
  • 删除 delete from t1 where id<6
  • 修改
    update t1 set age=18;
    update t1 set age=18 where age=17;
  • 查看 select * from t1;

外键

要先创建没有外键的表,然后再创建与外键有关联的表

先操作用户表,然后操作部门表

外键的数据类型要一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
-- 班级表class
create table class(
cid int auto_increment primary key,
caption varchar(12)
)engine=innodb default charset=utf8;
-- 老师表
create table teacher(
tid int auto_increment primary key,
caption varchar(12)
)engine=innodb default charset=utf8;
-- 学生表 有外键
create table student(
sid bigint auto_increment primary key,
sname varchar(10),
-- gneder enum('男','女') not null,
gneder varchar(20),
class_id int,
constraint fk_stuendt_key foreign key (class_id) references class(cid)
)engine=innodb default charset=utf8;
-- 课程表 有外键
create table course(
cid int auto_increment primary key,
cname varchar(20),
teacher_id int,
constraint fk_course_key foreign key (teacher_id) references teacher(tid)
)engine=innodb default charset=utf8;
-- 成绩表 有外键
create table score(
sid int auto_increment primary key,
student_id bigint,
course_id int,
score_number int,
constraint fk_stu_key foreign key (student_id) references student(sid),
constraint fk_score_key foreign key (course_id) references course(cid)
)engine=innodb default charset=utf8;

主键
一个表只有一个主键,可以关联多个列

外键
外键可以有多个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CREATE TABLE t1(
pid int NOT NULL auto_increment ,
nid int NOT NULL auto_increment ,
PRIMARY KEY(pid,nid)
)ENGINE=INNODB DELETE CHARSET=utf8;
create table t2(
sid int auto_increment primary key,
id1 int,
id2 int,
constraint fk_key foreign key (id1,id2) references t1(pid,nid),
)engine=innodb default charset=utf8;

对于自增可以修改

show create table t1 ;#横屏显示
show create table t1 \G; # 旋转90度
alter table t1 auto_increment=2; # 修改这个值可以改变自增的值

© 2018 Peter's Blog Center All Rights Reserved.
Theme by hiero