数据库—mysql

一、数据库基础

关系型数据库:mysql Oracle

非关系型数据库(NoSQL):MongoDB,Redis,Oracle NoSQ,Cassandra

NoSQL数据库

文档数据库——这些数据库通常将每个键与称为文档的复杂数据结构配对。文档可以包含键数组对、键值对甚至嵌套文档。示例:MongoDB、Apache CouchDB、ArangoDB、Couchbase、Cosmos DB、IBM Domino、MarkLogic、OrientDB。

键值存储——每个单独的项都存储为键值对。键值存储是所有NoSQL数据库中最简单的数据库。示例:Redis, Memcached, Apache Ignite, Riak。

宽列存储——这些类型的数据库针对大型数据集上的查询进行了优化,它们将数据列存储在一起,而不是行。示例:Cassandra,Hbase,Scylla。

图形存储——这些存储关于图形、网络的信息,例如社会关系、路线图、交通链接。示例:Neo4j,AllegroGraph。

二、初识mysql

2.1 进入mysql客户端

$mysql
mysql> select user();  #查看当前用户
mysql> exit     # 也可以用\q quit退出
# 默认用户登陆之后并没有实际操作的权限
# 需要使用管理员root用户登陆
$ mysql -uroot -p   # mysql5.6默认是没有密码的
#遇到password直接按回车键

# 远程登陆
$ mysql -uroot -p123 -h 192.168.10.3

2.2 当前库设置密码

mysqlmysql> set password = password('root'); # 给当前数据库设置密码

2.3 用户相关

1.创建用户

mysql> create user 'name'@'192.168.10.%' IDENTIFIED BY '123';# %指示网段
mysql> create user 'name'@'192.168.10.5'   # 指示某机器可以连接
mysql> create user 'name'@'%'                    #指示所有机器都可以连接  
mysql> show grants for 'name'@'192.168.10.5';查看某个用户的权限 

2.给用户授权

mysql> grant all on *.* to 'name'@'%';			# 第一个星表示库名
mysql> grant 权限类型 on 库名.* to 'name'@'*'
mysql> flush privileges;    # 刷新使授权立即生效
# 创建账号并授权
mysql> grant all on *.* to 'eva'@'%' identified by '123' 

# 查看用户权限
show grants for 用户名

# 删除用户
drop user 用户名@'%'

# Navicat连接mysql8+时报2059错误使用
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

2.4操作数据库

1.操作库

# 查看所有的数据库
show databases;
# 创建一个数据库
create database
# 切换到这个库下
use 数据库的名字
# 查看这个库下有多少表
show tables;
# 删除数据库
drop database 库名;

三、操作表

3.1 创建表

create table 表名(
字段名1 类型 [(宽度) 约束条件],
字段名2 类型 [(宽度) 约束条件],
);

3.2 查看表结构

describe [tablename];这种方法和desc [table] 效果相同,可以查看当前的表结构。

desc [table] :查看多少个字段、类型、长度、,看不到编码、引擎,具体的约束信息只能看到一部分

show create table:字段、类型、长度、编码、引擎、约束,查看创建表的SQL语句,

除了可以看到表定义之外,还可以看到engine(存储引擎)和charset(字符集)等信息。

3.3 修改表结构

语法:
1. 修改表名
      ALTER TABLE 表名 
                      RENAME 新表名;
2. 增加字段
      ALTER TABLE 表名
                      ADD 字段名  数据类型 [完整性约束条件…],
                      ADD 字段名  数据类型 [完整性约束条件…];                           
3. 删除字段
      ALTER TABLE 表名 
                      DROP 字段名;
4. 修改字段
      ALTER TABLE 表名 
                      MODIFY  字段名 数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
                      CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
      ALTER TABLE 表名 
                      CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

5.修改字段排列顺序/在增加的时候指定字段位置
    ALTER TABLE 表名
                     ADD 字段名  数据类型 [完整性约束条件…]  FIRST;
    ALTER TABLE 表名
                     ADD 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;
    ALTER TABLE 表名
                     CHANGE 字段名  旧字段名 新字段名 新数据类型 [完整性约束条件…]  FIRST;
    ALTER TABLE 表名
                     MODIFY 字段名  数据类型 [完整性约束条件…]  AFTER 字段名;

3.4 删除表

drop table 表名

四、数据类型

4.1 数值类型

严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

image-20200712112648926

int 不约束长度,最多表示10位

float(m, n) m:一共多少位 ,n:小数多少位

4.2 日期和时间类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP(时间戳)、TIME和YEAR。每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

  • date 20200710
  • time 131959
  • datetime 20200710131959

image-20200712130706538

# 插入当前时间
insert into tablename values(now(),now(),now(),now(),now())

4.3 enum/set

enum/set(单选/对选行为)

create table t(
id int,
name char(20),
gender enum('male', 'female'),
);

五、完整性约束

约束数据使不符合规范的数据不能进入数据库,约束条件和数据宽度都是可选参数

# NOT NULL :非空约束,指定某列不能为空; 
# UNIQUE : 唯一约束,指定某列或者几列组合不能重复
# PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录
# FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性
create table student(
id int unsigned
);

5.1 NOT NULL

create table tablename(id int not null);
create table student(id int unsigned not null);

5.2 DEFAULT

如果一列中经常有重复的内容,需要频繁的插入,可以设置默认值解决。

创建列时可以指定默认值,当插入数据时如果未主动设置,则默认添加默认值。

create table t(id int not null default 6666)

5.3 唯一约束

唯一约束,指定某列或者几列组合不能重复

mysql可以写入多个Null,即使设置了unique

create table student(
id int,
name varchar(20) unique
  # 或unique(name)
);

联合唯一

create table t(
id int,
ip char(15),
port char(5),
unique(ip, port)
);
# ip 和port 联合确定一条记录,单独的ip和port是可以重复的

5.4 PRIMARY KEY

主键保证了表中的每一条数据都是该字段的唯一值。唯一的标识表中一条记录。

主键可以包含一个字段或多个字段。当主键包含多个栏位时,称为组合键 (Composite Key),也可以叫联合主键。
主键可以在建置新表格时设定 (运用 CREATE TABLE 语句),或是以改变现有的表格架构方式设定 (运用 ALTER TABLE)。
主键必须唯一,主键值非空;可以是单一字段,也可以是多字段组合。

1、单字段主键

# 方法一:not null+unique
create table department1(
id int not null unique, #主键
name varchar(20) not null unique,
comment varchar(100)
);
#方法二:在某一个字段后用primary key
create table department2(
id int primary key, #主键
name varchar(20),
comment varchar(100)
);
#方法三:在所有字段后单独定义primary key
create table department3(
id int,
name varchar(20),
comment varchar(100),
primary key(id); #创建主键并为其命名pk_name
);

2、多字段主键

create table service(
ip varchar(15),
port char(5),
service_name varchar(10) not null,
primary key(ip,port)
);

5.5 自增

自增只对数字有效,自带非空约束,至少是unique的约束之后才能使用auto_increment。

crate table t(
id int unique auto_increment,
name char(20)
);
# 一般这么写
crate table t(
id int primary key auto_increment,
name char(20)
);

5.6 外键

create table stu(
class_id int,
foreign key (class_id) references class(cid)	# class是表名
);

必须先往class表中写数据,因为stu关联到了class表

猜你喜欢

转载自www.cnblogs.com/journeyer-xsh/p/13386524.html