数据库概述

1. 主键

表中的任何列都可以作为主键,只要它满足以下条件:

  • 任意两行都不具有相同的主键值;
  • 每个行都必须具有一个主键值(主键列不允许NULL值)。

主键值规则 这里列出的规则是MySQL本身强制实施的。

主键通常定义在表的一列上,但这并不是必需的,也可以一起使用多个列作为主键。在使用多列作为主键时,上述条件必须应用到构成主键的所有列,所有列值的组合必须是唯一的(但单个列的值可以不唯一)。

数据库概述

SQL(structured query language)语言

3个部分定义语言DDL(Data definition Language)

  • DDL

    用于定义数据库表,视图等等

  • DML

    增改删查数据

  • DCL

    数据控制语言 用户控制用户低访问权限 grant,revoke

Mysql数据类型

数字类型

整数类型

# 6种 
- tinyint 1字节
- smallint 2 
- mediumint 3
- int integer 4
- bigint 8

浮点数和定点数类型

# 浮点数
- float 4
- double 8
# 定点数类型
- demical m+2
# 用法
- 数据类型(6,2)  常用decimal(6,2)来表示小数。
- 6表示总长度,2表示小数点长度 小数点不占位置

日期和时间类型

插入时可以用数字或者字符,常用now()函数

# 五种
# year yyyy
- 表示年
# time hh:mm:ss
- 表示时间
# date yyyy-mm-dd
- 表示日期
# datetime yyyy-mm-dd hh:mm:ss
- 表示日期和时间
# timestamp yyyy-mm-dd hh:mm:ss
- 跟datetime一样,但是范围比较小,可以根据不同的时区来转换时间

字符串

存储字符串的数据类型

# 用法
- 数据类型(m)
# char(m)  varchar(m)
# text
- 只能保存字符类型
# enum set
- 枚举 都是在创建表的时候,写好了取值范围。
- 属性 enum('值1',‘值2’)
- enum 只能插入一个,set可以插入多个。
- enum 包含65535 set 包含64

二进制

# binary(m)
# varbinary(m)
# bit(m)
# tinyblog
# blog
# mediumblog
# longblog

常见问题

字符串类型 字符 \ , 会被过滤 ,所以用 / 或者 两个\

操作数据库

删除数据库

drop database 数据库名;

创建数据库

create database 数据库名;

数据库引擎

就是表的类型,定义了表在计算机中的存储格式

特点InnoDBMyISAM
事务安全YN
外键YN
索引YY

查看引擎

show engines \G

创建,修改和删除表

  • 创建表的方法
  • 表的完整性约束条件
  • 查看表结构的方法
  • 修改表结构
  • 删除表结构

创建表

create table 表名 (
	属性名 数据类型 [完整约束条件],
  属性名 数据类型 [完整约束条件]
)engine=InnoDB Default charset=utf-8;

完整性约束条件

约束条件说明
Primary_key主键,非空,唯一
Foreign_key外键
Not null非空
Unique唯一
Auto_increment自增
Default默认

MYSQL中唯一约束和唯一索引的区别

MYSQL中唯一约束和唯一索引的区别

1、唯一约束和唯一索引,都可以实现列数据的唯一,列值可以有null。
2、创建唯一约束,会自动创建一个同名的唯一索引,该索引不能单独删除,删除约束会自动删除索引。唯一约束是通过唯一索引来实现数据的唯一。
3、创建一个唯一索引,这个索引就是独立,可以单独删除。
4、如果一个列上想有约束和索引,且两者可以单独的删除。可以先建唯一索引,再建同名的唯一约束。
5、如果表的一个字段,要作为另外一个表的外键,这个字段必须有唯一约束(或是主键),如果只是有唯一索引,就会报错

设置表的外键

constraint 外键别名 foreign_key(子属性1,子属性2 ) references 表名(父属性1,父属性2)

查看表结构

# desc 表
# show create table 表 \G

修改表

修改表名

alter table 表名 rename 新;

修改表的字段

alter tablemodify 属性名 数据类型

修改字段名

alter table 表 change 旧名 新名 (数据类型)

添加唯一约束的语法格式为:

ALTER TABLE <数据表名> ADD CONSTRAINT <唯一约束名> UNIQUE(<列名>);

为已创建的表添加默认值

语法:

alter table <表名>add<字段名><类型>default<默认值>

实例:

alter table users_data add column RegisterTime datetime default now();

删除默认值约束

当一个表中的列不需要设置默认值时,就需要从表中将其删除。

修改表时删除默认值约束的语法格式如下:

ALTER TABLE <数据表名>
CHANGE COLUMN <字段名> <字段名> <数据类型> DEFAULT NULL;

增加字段

alter table 表名 add 属性名 数据类型 [完整性约束条件] [first | after 属性名2(之前还是之后)]

删除字段

alter table 表名 drop 属性名

修改字段的排列位置

alter table 表名 modify 属性名 数据类型 first | after 属性名;

更改表的存储引擎

alter table 表名 engine=存储引擎名;

删除表的外键约束

alter table 表名 drop foreign key 外键名

删除表

删除没有关联的表

drop table

删除关联的表

先删除关联
在删除表

索引

作用:加快查询数据库表中的特定记录

类型

  • B型索引
  • 哈希索引

索引的分类(6种)

  • 普通索引

  • 唯一索引

    ​ 字段必须是唯一的

  • 全文索引

    使用FULLTEXT参数,只能创建在char varchar text 字段上

  • 单列/多列索引

    多列索引 只会在使用了第一个字段(在用作多列索引中的字段)起作用

  • 空间索引

    使用Spatial参数

创建索引(3种)

指在某个表的一列或多列上创建一个索引

在创建表的时候

create table 表名 (
字段 数据类型 ,

[索引类型 unique|fulltext| spatial] index|key 别名 (字段(长度) [asc|desc]) 
);

### 长度 只有是字符串的时候可以用。

在已经存在的表上创建索引

create [索引类型] index 别名 on 表名(属性名[(长度)] [asc|desc]);

用alter table 语句来创建索引

alter talbe 表 add [索引类型] index 索引名(属性名[(长度)] [asc|desc]);

删除索引

drop index 索引名 on 表名;

视图

有数据库一个表或者多个表导出的虚拟表,为查询语句的结果的集合。

触发器

Trigger 是由事件来触发某个操作

事件包括:

​ insert , update ,delete

SQL查询语句

查询数据

# mysql 默认不区分大小写
1. where 列 ='a'; A 和 a 都会被匹配。

基本查询语句

select * from 表名和视图列表	[where 条件]	[group by 属性名1 [having 条件]]	[order by 属性名2,属性名3] [asc desc]	[limit x,y]# 指定排序方向	升序 asc 默认参数进行排序 升序[1,2,3]	降序 desc 

查询指定的字段

where 条件
查询条件符号
比较< > 不等于 , > , < ,!<,!>
范围Between and ,not between and == <=x<=
集合in , not in x in (1,2,3,4)为1,2,3,4其中一个都可以。后面还可以包括 select子句。
字符like , not like
是否为空值is null , is not null
组合多个查询条件and , or
否定后面的关键字Not

and , or计算次序

# and 比 or 的优先级更高
- a or b and c  
-- 理解为符合b且c 或者 a
-- 解决方案使用(a or b) and c

通配符进行过滤

# like 
- % 代表多个字符>=0个字符
- ‘-’ 代表一个字符
- 汉字为两个字符。一个 - 代表一个字符。

使用Mysql正则表达式

# regexp '正则表达式'
# \\转字符。mysql自己解释一个,正则表达式解释一个。

查询结果不重复

distinct 属性名

作用于多列
distinct必须放在开头
select id, distinct name from A;   --会提示错误,因为distinct必须放在开头

对结果进行排序

order by 属性名[asc desc ]
# desc 降序,只应用前面一个列名。

分组查询

group by 属性名 [having 条件表达式] [with rollup]
  • 常跟集合函数一起使用。

    count() , sum()总和 ,avg() ,max() ,min()
    
  • 字段中取值相同记录为一组,但只显示该组的第一条记录。

  • Group_count(字段)函数,可以把分组后的字段全部显示。

  • 按多个字段进行分组

    Group by A ,B ; 将会进行先按 A进行分组 ,A相等的情况下再对B进行分组。

  • with rollup

    将会在所有记录的最后一条加上一条记录。

注意事项:

group by 的意思为分组汇总。
使用了group by 后,要求Select出的结果字段都是可汇总的,否则就会出错。

group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面。

​ 比如,有:{学号,姓名,性别,年龄,成绩}字段

  • 这样写:
    SELECT 学号,姓名,性别,年龄,sum(成绩)
    FROM 学生表
    GROUP BY 学号
    就是错的,因为 “姓名、性别、年龄”未被汇总,且不一定是单一。

  • 这样写:
    SELECT MAX(学号),MAX(姓名),MAX(性别),MAX(年龄),sum(成绩)
    FROM 学生表
    GROUP BY 学号
    是对的,汇总出每一同学号学生的总成绩。注意的是,只要学号相同,别的如果有不同,取它们值最大的一条作为显示输出。

  • 这样写:
    SELECT 学号,姓名,性别,年龄,sum(成绩)
    FROM 学生表
    GROUP BY 学号,姓名,性别,年龄
    这样写也是对的,但注意的是,学号,姓名,性别,年龄中,只要有一个不同,就会当成另一条记录来汇总。

使用Limit限制查询结果的数量

limit 起始 记录数; 起始从0开始的;
limit 返回行数;

创建计算字段

计算字段是运行时在Select语句内创建的

# 拼接字段
- Concat(串1,串2,串3);
- 其他sql使用 + ,mysql使用Concat(); 
# 去除空格
- Trim() 去除两边的空格
- rTirm()  lTrim()
# 算术计算
- +,-,*,/
- Select 3*2;

函数

数据处理函数

一般用在select 后 字段处理查询出来的数据和where子句后列使用 将以想要的格式展示出来。

  • 文本处理函数
  • 时间和日期处理函数
    • Year(),Month(),Day();Data(),Time()

集合函数

# count()函数 个数
# sum()  总和
# avg() 求平均值
# max() 求最大值。min()

连接查询

内连:

只会查询出指定字段取值相同的记录

外联:

  • 左连接

    以左表为准,显示全部

  • 右连接

    以右表为准,显示全部

子查询

子查询是将一个查询语句镶套在另一个查询语句里面,内层查询语句的结果,可以做为外层查询语句提供查询条件

关键字用法
inWhere id in (select) 查询出的集合
比较符的子查询where score >= (select xx where id = 1)
带exists 的子查询where exits (select ) 内层查询不返回查询的记录,返回一个真假值,内层查询语句查询到满足条件的记录,就返回一个真假值。为真外层查询才继续
any满足其中任意一条件 where score>= any (select)
all满足所有条件

合并查询结果

  • union

    合并并消除相同的记录

  • union all

    直接简单的合并

别名

  • 表取别名

    表 别名
    
  • 字段取别名

    属性名 [as] 别名
    

插入,更新和删除数据

插入数据

为表的所有字段插入数据

1. insert into 表 vaules(1 )
2. insert into(所有字段 字段1,字段2 ) values(1,值2 );

为表插入部分数据

insert into(属性1 ,属性2 ) values(1 ,值2 );

同时插入多条数据

insert into 表名([属性列表])
	values(取值列表1)(取值列表2)

将查询结果插入带表中

insert into 表名(属性列表1) 
	select 属性列表2 from 表名2  where 条件表达式

更新数据

update 表名 
	     set 属性名=取值1 ,属性名= 取值2where 条件表达式;

删除数据

delete from 表名
	[where 条件表达式];

Mysql运算符

用来对操作数进行计算的符号

举例:

select a + 20 

算法运算符

符号作用
+
-
*
/ div
% mod取余

比较运算符

符号作用
=
!=
Is null ,between and ,in ,like , regex

返回 0 / 1 。

逻辑运算符

符号作用
&& and
|| or
! not
Xor异或

返回值只有 1/0

0 或者 nullfalse0null 返回 0

位运算符

符号作用
&
|
~取反
^异或
<<左移
>>右移

左移 ,右移都是补零

Mysql函数

数学函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gyJ4sh1S-1628521462814)(/Users/apple/Desktop/notes/数据库概述.assets/1605867850085.jpg)]

字符串函数

日期和时间函数

# now()
- 返回日期和时间
# curdate()
- 返回日期
# curtime()
- 返回时间

条件判断函数

# if(expr,v1,v2)
- 如果expr成立,返回v1,否则返回v2
# ifnull(v1 ,v2)
- 如果v1不为空,返回v2
  • case函数

    case 
    	when expr then v1
    	when 
      else vx 
    end
    

系统信息函数

加密函数

格式化函数

存储过程和函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值