Mysql是一个关系型数据库管理连串

mysql简介

  数据库(Database)是依据数据结构来公司、存款和储蓄和治本数据的库房。每一个数据库都有三个或八个不等的API用于创立,访谈,管理,寻觅和复制所保存的数据。

  关系型数据库是白手起家在论及模型基础上的数据库,借助于会集代数等数学概念和办法来管理数据库中的数据。

  Mysql是一个关系型数据库管理连串,在WEB应用方面Mysql是最佳的PAJERODBMS(Relational
Database Management System,关周密据管理连串)应用软件之一。

mysql安装

  Mysql是跨平台的,采纳相应的阳台下载安装文件安装就能够。

#mysql Windows版安装
#1.下载
MySQL Community Server 5.7.16(http://dev.mysql.com/downloads/mysql/)
#2.解压
解压到指定目录
#3.添加环境变量
将MySQL的bin目录路径追加到变值值中
#4.初始化
mysqld --initialize-insecure
#5.启动mysql服务
mysqld
#6.启动mysql客户端并连接mysql服务
mysql -u root -p

图片 1图片 2

#制作mysql的windows服务(以管理员身份运行cmd)
F:\mysql-5.6.39-winx64\bin\mysqld --install
#移除mysql的windows服务
F:\mysql-5.6.39-winx64\bin\mysqld --remove
#注册成服务后,可以直接执行命令启动和关闭mysql服务
net start mysql
net stop mysql

将mysql服务营产生windows服务

mysql软件基本处理

报到,设置密码

图片 3图片 4

初始状态下,管理员root,密码为空,默认只允许从本机登录localhost
设置密码
[root@egon ~]# mysqladmin -uroot password "123"        设置初始密码 由于原密码为空,因此-p可以不用
[root@egon ~]# mysqladmin -uroot -p"123" password "456"        修改mysql密码,因为已经有密码了,所以必须输入原密码才能设置新密码

命令格式:
[root@egon ~]# mysql -h172.31.0.2 -uroot -p456
[root@egon ~]# mysql -uroot -p
[root@egon ~]# mysql                    以root用户登录本机,密码为空

View Code

忘掉密码

图片 5图片 6

#windows平台下,5.7版本mysql,破解密码的两种方式:
#方式一

#1 关闭mysql
#2 在cmd中执行:mysqld --skip-grant-tables
#3 在cmd中执行:mysql
#4 执行如下sql:
update mysql.user set authentication_string=password('') where user = 'root';
flush privileges;
#5 tskill mysqld #或taskkill -f /PID 7832
#6 重新启动mysql

#方式二
#1. 关闭mysql,可以用tskill mysqld将其杀死
#2. 在解压目录下,新建mysql配置文件my.ini
#3. my.ini内容,指定
[mysqld]
skip-grant-tables
#4.启动mysqld
#5.在cmd里直接输入mysql登录,然后操作
update mysql.user set authentication_string=password('') where user='root and host='localhost';
flush privileges;
#6.注释my.ini中的skip-grant-tables,然后启动myqsld,然后就可以以新密码登录了

View Code

 在windows下,为mysql服务钦命布署文件

#配置文件中的注释可以有中文,但是配置项中不能出现中文
#在mysql的解压目录下,新建my.ini,然后配置
#1. 在执行mysqld命令时,下列配置会生效,即mysql服务启动时生效
[mysqld]
;skip-grant-tables
port=3306
character_set_server=utf8
default-storage-engine=innodb
innodb_file_per_table=1
#解压的目录
basedir=E:\mysql-5.7.19-winx64
#data目录
datadir=E:\my_data #在mysqld --initialize时,就会将初始数据存入此处指定的目录,在初始化之后,启动mysql时,就会去这个目录里找数据


#2. 针对客户端命令的全局配置,当mysql客户端命令执行时,下列配置生效
[client]
port=3306
default-character-set=utf8
user=root
password=123

#3. 只针对mysql这个客户端的配置,2中的是全局配置,而此处的则是只针对mysql这个命令的局部配置
[mysql]
;port=3306
;default-character-set=utf8
user=egon
password=4573

#如果没有[mysql],则用户在执行mysql命令时的配置以[client]为准

会集字符编码

图片 7图片 8

#1. 修改配置文件
[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

#mysql5.5以上:修改方式有所改动
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

#2. 重启服务
#3. 查看修改结果:
\s
show variables like '%char%'

View Code

sql语句

  Sql语春神要用来存取数据,查询数据,更新数据和管理数据库系统。

#Sql语句分为3种类型
#1.DDL语句:数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
#2.DML语句:数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
#3.DCL语句:数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE

库操作

  安装并登录mysql后,查看数据库,开采有如下数据库:

  图片 9

#information_schema:虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等
#performance_schema:Mysql5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象
#mysql:授权库,主要存储系统用户的权限信息
#test:Mysql数据库系统自动创建的测试数据库

  创造数据库

#数据库命名规则
#可以由字母、数字、下划线、@、#、$组成
#区分大小写
#唯一性
#不能使用关键字如select、create
#不能单独使用数字
#最长128位

#数据库相关操作

#创建数据库
create database db1 charset utf8;
#查看数据库
show databases;
show create database db1;
select database();
#选择数据库
use db1;
#修改数据库
alter database db1 charset utf8;
#删除数据库
drop database db1;

  Mysql是一个关系型数据库管理连串。表操作

表相关操作

#先切换到库下
use db1;
#创建表
#create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度)约束条件]
);
#在同一张表中,字段名不能相同;宽度和约束条件可选;字段名和类型是必须的;表中的最后一个字段不要加逗号
create table t1(id int,name char);

#查看表
show tables;  #查看表
describe t1;   #查看表结构,可简写为 desc t1
show create table t1\G  #查看表详细结构

#修改表
alter table t1 modify name char(3);
alter table t1 change name name1 char(2);

图片 10图片 11

1. 修改表名
      ALTER TABLE 表名
                          RENAME 新表名;

2. 增加字段
      ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…],
                          ADD 字段名  数据类型 [完整性约束条件…];
      ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…]  FIRST;
      ALTER TABLE 表名
                          ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;

3. 删除字段
      ALTER TABLE 表名
                          DROP 字段名;

4. 修改字段
      ALTER TABLE 表名
                          MODIFY  字段名 数据类型 [完整性约束条件…];
      ALTER TABLE 表名
                          CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
      ALTER TABLE 表名
                          CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

  Mysql是一个关系型数据库管理连串。修改表语法

图片 12图片 13

#1. 修改存储引擎
alter table service engine=innodb;

#2. 添加字段
alter table t1  add name varchar(20) not null;

alter table t1 add stu_num varchar(10) not null after name;  //添加name字段之后

alter table t1 add sex enum('male','female') default 'male' first; //添加到最前面

#3. 删除字段
 alter table t1 drop sex;

alter table service drop mac;

#4. 修改字段类型modify
alter table t1 modify age int(3);
alter table t1 modify id int(11) not null primary key auto_increment;    //修改为主键

#5. 增加约束(针对已有的主键增加auto_increment)
alter table student10 modify id int(11) not null primary key auto_increment;
#ERROR 1068 (42000): Multiple primary key defined

alter table student10 modify id int(11) not null auto_increment;
#Query OK, 0 rows affected (0.01 sec)

#6. 对已经存在的表增加复合主键
alter table service2 add primary key(host_ip,port);

#7. 增加主键
alter table student1 modify name varchar(10) not null primary key;

#8. 增加主键和自动增长
alter table student1 modify id int not null primary key auto_increment;

#9. 删除主键
#a. 删除自增约束
alter table student10 modify id int(11) not null;

#b. 删除主键
alter table student10 drop primary key;

示例

#复制表
#复制表结构+记录
create table new_service select * from service;
#只复制表结构
create table new1_service select * from service where 1=2;
create table t4 like employees;

#删除表
drop table t1;

数据类型

  Mysql是一个关系型数据库管理连串。表内部存款和储蓄器放的多寡有差别的体系,每一种数据类型都有谈得来的肥瘦,但增长幅度是可选的

数值类型

  整数类型:TINYINT SMALLINT MEDIUMINT INT BIGINT

为该品种钦定宽度时,仅仅只是钦点询问结果的体现上升的幅度,与积存范围非亲非故,暗中同意的展现上升的幅度都以在最大值的根基上加1

图片 14

  Mysql是一个关系型数据库管理连串。  浮点型

  确定地点数类型:DEC等同于DESANTANAL,浮点类型:FLOAT DOUBLE

  位类型

  Mysql是一个关系型数据库管理连串。  BIT(M)可以用来寄放在多位二进制数,M范围从1  Mysql是一个关系型数据库管理连串。~64,借使不写暗中同意为1位

#对于位字段需要使用函数读取
bin()显示为二进制
hex()显示为十六进制

日子类型:DATE TIME DATETIME TIMESTAMP YEAXC60

图片 15图片 16

YEAR
            YYYY(1901/2155)

DATE
            YYYY-MM-DD(1000-01-01/9999-12-31)

TIME
            HH:MM:SS('-838:59:59'/'838:59:59')

DATETIME

            YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)

TIMESTAMP

            YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

View Code

字符串类型:char,varchar,

图片 17图片 18

1.CHAR 和 VARCHAR 是最常使用的两种字符串类型。
2.一般来说CHAR(N)用来保存固定长度的字符串,对于 CHAR 类型,N 的范围 为 0 ~ 255
VARCHAR(N)用来保存变长字符类型,对于 VARCHAR 类型,N 的范围为 0 ~ 65 535
CHAR(N)和 VARCHAR(N) 中的 N 都代表字符长度,而非字节长度。
3. char填充空格来满足固定长度,但是在查询时却会很不要脸地删除尾部的空格(装作自己好像没有浪费过空间一样),然后修改sql_mode让其现出原形
4.虽然 CHAR 和 VARCHAR 的存储方式不太相同,但是对于两个字符串的比较,都只比 较其值,忽略 CHAR 值存在的右填充,即使将 SQL _MODE 设置为 PAD_CHAR_TO_FULL_ LENGTH 也一样,,但这不适用于like
5.虽然varchar使用起来较为灵活,但是从整个系统的性能角度来说,char数据类型的处理速度更快,有时甚至可以超出varchar处理速度的50%。因此,用户在设计数据库时应当综合考虑各方面的因素,以求达到最佳的平衡
6.#其他字符串系列(效率:char>varchar>text)
TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT
BLOB 系列    TINYBLOB BLOB MEDIUMBLOB LONGBLOB
BINARY系列 BINARY VARBINARY
text:text数据类型用于保存变长的大字符串,可以组多到65535 (2**16 − 1)个字符。
mediumtext:A TEXT column with a maximum length of 16,777,215 (2**24 − 1) characters.
longtext:A TEXT column with a maximum length of 4,294,967,295 or 4GB (2**32 − 1) characters.

View Code

枚举类型与聚焦类型

  字段值只可以在给定的限量内选多个值,enum(单选)只好在加以的限定内选三个值,set(多选)在给定的范围内足以选拔贰个或多个值

create table consumer(
name varchar(50),
sex enum('male','female'),
hobby set('play','read','study')
);

表完整性约束

  约束原则与数据类型的小幅度同样,都以可选参数。首要用以保险数据的完整性和一致性。

primary key (PK) #标识主键,可以唯一的标识记录
foreign key (FK) #标识外键
not null  #标识字段不能为空
unique key (UK) #标识该字段唯一
auto_increment #标识该字段的值自动增长(整数类型且为主键)
default #为该字段设置默认值
unsigned #无符号
zerofill #用0填充

图片 19图片 20

1. 是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
2. 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值
sex enum('male','female') not null default 'male'
age int unsigned NOT NULL default 20 必须为正值(无符号) 不允许为空 默认是20
3. 是否是key
主键 primary key
外键 foreign key
索引 (index,unique...)

View Code

  not null与default

not null #不可空

create table t1(id int not null);
insert into t1 values(1); #设置id字段不为空则插入记录时不能插入空

null #可空
create table t2(id int);
insert into t2 values(); #默认可以插入空

default #默认值,无论字段是null还是not null都可以插入空,插入空填入默认值
create table t3(age int not null default 18);
create table t4(hobby varchar default 'read'); 

  unique

unique #设置唯一约束
#设置方法一
create table t1(name varchar(20) unique);

#设置方法二
create table t2(
name varchar(20),
constraint uk_name unique(name)
);

#联合唯一
create table t3(
name varchar(20),
host varchar(15) not null,
port int not null,
unique(host,post)
);

#not null+ unique
create table t4(id int not null unique); #数据库会自动识别为primary key

  primary key

  主键primary
key是innodb存款和储蓄引擎组织数量的依据,innodb称之为索引组织表,一张表中必需有且唯有一个主键

#not null + unique设置主键
create table t1(id int not null unique);

#primary key 设置主键方法一
create table t2(id int primary key);

#primary key 设置主键方法二
create table t2(
id int
constraint pk_name primary key(is)
);

#联合主键
create table t3(
host varchar(20),
port char(15),
primary key(host,port)
);

  auto_increment

  约束字段为活动增进,被封锁的字段必得同期被key约束

图片 21图片 22

#创建完表后修改自增字段的起始值方法一
create table student(
id int primary key auto_increment,
name varchar(20),
sex num('male','female') default 'male'
);

alter table student auto_increment=3;


#方法二
create table student(
id int primary key auto_increment,
name varchar(20),
sex enum('male','female') default 'male'
)auto_increment=3;

#设置步长
sqlserver:自增步长
    基于表级别
    create table t1(
        id int。。。
    )engine=innodb,auto_increment=2 步长=2 default charset=utf8

mysql自增的步长:
    show session variables like 'auto_inc%';

#基于会话级别
    set session auth_increment_increment=2 #修改会话级别的步长

#基于全局级别的
    set global auth_increment_increment=2 #修改全局级别的步长(所有会话都生效)

如果auto_increment_offset的值大于auto_increment_increment的值,则auto_increment_offset的值会被忽略

View Code

#不指定id,则自动增长
create table student(
id int primary key auto_increment,
name varchar(20),
sex enum('male','female') default 'male'
);

#插入数据时可不指定id
insert into student(name) values('lary')

#插入数据时也可以指定id
insert into student(id,name) values(3,'lily')

#对于自增的字段,在用delete删除后,再插入值,该字段仍按照删除前的位置继续增长
delete from student

#truncate 清空表,清空后,直接从0开始
truncate student 

   foreign key

#表类型必须是innodb存储引擎,且被关联的字段必须保证唯一
create table department(
id int primary key,
name varchar(20) not null
)engine=innodb;

create table employee(
id int primary key,
name varchar(20) not null,
dep_id int,
constraint fk_name foreign key(dep_id) references department(id)
on delete cascade        # 删除父表department,子表employee中对应的记录跟着删
on update cascade     #更新父表department,子表employee中对应的记录跟着改
)engine=innodb;            

 

  

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图