关于mysql:MySql二基本概念与基础操作

36次阅读

共计 4663 个字符,预计需要花费 12 分钟才能阅读完成。

基本概念与根底操作

  • 基本概念
  • 单表查问
  • 多表查问

1 基本概念

  • 数据类型
  • 完整性束缚
  • 根底语句

1.1 数据类型

  • 字符串

    数据类型 大小 形容
    char(n),character(n) 0~255 byte 定长为 n 的字符串
    varchar(n),charactervarying(n) 0~65535 byte 最大长度为 n 的字符串
    tinyblob 0~255 byte 二进制短字符串
    blob 0~65535(64K) byte 二进制长文本数据
    mediumblob 0~16777215(8M) byte 二进制中等长度文本数据
    longblob 0~4294967295(4G) byte 二进制大文本数据
    clob 0~65535(64K) byte 字符串大对象
    tinytext 0~255 byte 短文本字符串
    text 0~65535(64K) byte 长文本字符串
    mediumtext 0~16777215(8M) byte 中长文本字符串
    longtext 0~4294967295(4G) byte 大文本字符串
  • 数字

    数据类型 大小 形容
    tinyint 1byte (Byte)-127~128 / 0~255
    smallint 2byte (Short)-32768~32767 / 0~65535
    mediumint 3byte (Integer)-8388608~8388607 / 0 ~ 16777215
    int,integer 4byte (Integer)-2147483648~2147483647 / 0~4294967295
    bigint 8byte (Long)-9223372036854775808~9223372036854775807 / 0~18446744073709551615
    numeric(p,d),decimal(p,d),dec(p,d) —– 定点数,p 位数,d 位小数
    float 4byte float(p,d)同定点数
    double 8byte double(p,d)同定点数
  • 日期

    数据类型 大小 格局 形容
    date 3byte YYYY-MM-DD 1000-01-01~9999-12-31
    time 3byte HH:MM:SS -838:59:59~838:59:59
    timestamp 4byte YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:00/2038
    datetime 8byte YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~9999-12-31 23:59:59
    year —– —– —–

1.2 完整性束缚

  • 列完整性约束条件
    列规定,限度退出表的数据,保证数据的有效性、正确性和完整性

    # 可对约束条件命名
    [CONSTRAINT < 束缚名 >] < 束缚类型 >
    束缚名称 形容 关键字 其余
    主键束缚 每行数据的惟一标识,非空且惟一 PRIMARY KEY auto_increment 自增长(数字 惟一)
    外键束缚 用来让两个表建设连贯,保证数据的一致性和参照完整性 FOREING KEY REFERENCES 指明参照哪些表的主键
    非空束缚 该列数据不能为 null NOT NULL —–
    惟一束缚 该列数据各不相同 UNIQUE —–
    查看束缚 该列的值满足对立的条件 CHECK —–
    默认束缚 默认值 DEFAULT —–

外键束缚
建表时:

[CONSTRAINT 束缚名] 
FOREING KEY(<column_name>)
REFERENCES 主表名(<column_name>);

建表后:

ALTER TABLE <table_name> ADD
[CONSTRAINT 束缚名] 
FOREING KEY(<column_name>)
REFERENCES 主表名(<column_name>);

删除束缚:

ALTER TABLE 从表名 DROP FOREING KEY 束缚名;

1.3 根底语句

  • 数据库

    # 查看所有
    show databases; 
    # 创立 
    create database <name>;
    # 进入
    use <name>;
    # 查看以后
    select database();
    # 删除
    drop database <name>  
  • DDL

    # 查看所有
    show tables;
    # 创立
    create table <name>(<column_name1> <data_type> [列完整性约束条件],
    ...,
    [表完整性约束条件]
    );
    # 查看所有列
    show columns form <name>;
    
    # 批改
    alter table <table_name> rename to <new_talbe_name>; # 批改表名
    alter table <table_name> add <column_name> <data_type>; # 增加一列
    alter table <table_name> modify <column_name> <new_data_type>; 批改数据类型
    alter table <table_name> change <column_name> <new_column_name> <new_column_type>; #批改数据类型与表名 
    alter table <table_name> drop <column_name>; # 删除一列
    
    # 删除
    drop table <name> [cascade|restrict];
    drop table if exists <name>; # 如果表存在 则删除
  • 表 数据 DML

    # 增加
    insert into <table_name>(column1,colum2...) values(value1,value2...); # 指定列
    insert into <table_name>(column1,colum2...) values(value1,value2...),(value1,value2...); # 指定列 批量增加
    insert into <table_name> values(value1,value2...); # 全部列
    insert into <table_name> values(value1,value2...),(value1,value2...); # 全部列 批量增加
    
    # 批改
    update <table_name> set column1=value1,column2=value2,... [where 条件];
    
    # 删除
    delete from <table_name> [where 条件];

2 单表查问

  • 根底查问
  • 条件查问
  • 排序查问
  • 分组查问
  • 分页查问
select
    字段列表
from
    表名列表
where
    条件列表
group by
    分组字段
having
    分组后条件
order by
    排序字段
limit
    分页限定

2.1 根底查问

# 查问多个字段
select <column_name1,column_name2...> from <table_name>;
select * from <table_name>; # 查问所有数据

# 查问去重
select distinct <column_name1,column_name2...> from <table_name>;

# 别名 能够省略 空格隔开
column_name as alias_column_name

2.2 条件查问

# 条件查问
select
     <column_name1,column_name2...>
from
     <table_name>
where
    <condition1,condition2...>

条件列表

符号 含意
> 大于
< 小于
>= 大于等于
<= 小于等于
= 等于
<> 或 != 不等于
between … and … 闭区间内
in(…) 多选一
like 占位符 含糊查问 _ 单个任意字符 % 多个任意字符
is null 是 null
is not null 不是 null
and 或 && 单元 4
or 或 ||
not 或 !
# 含糊查问
select * from student
where address like "% 江 %";
# 区间查问
select * from student
where math_score between 60 and 80;
# 多选一
select * from student
where address not in("北京","上海","天津","重庆");

2.3 排序查问

select 
    <column_name1,column_name2...>
from 
    <table_name>
order by
    <column_name1> [order_type],
    <column_name2> [order_type];
符号 含意
ASC 升序(默认)
DESC 降序

以后判断条件相等时,启用后续排序条件

2.4 分组查问

select 聚合函数(column_name) from <table_name>;

聚合函数: 将一列数据作为一个整体,进行纵向计算。

函数 含意
count 统计数量
max 最大值
min 最小值
sum 求和
avg 平局值
select 
    <column_name1,column_name2>
from 
    <table_name>
where 
    <condition1,condition2...> # 分组前的条件限定
group by
    <column_name1,column_name2...> [having 分组后条件过滤];

分组之后,查问的字段为 聚合函数 分组字段
where > 聚合函数 > having
where 过滤分组前所有数据,且不能应用聚合函数
having 过滤分组后的数据,能够应用聚合函数

2.5 分页查问

select
    <column_name1,column_name2...>
from
    <table_name>
limit
    <start_index>,<query_num>;

start_index(起始索引)从 0 开始
query_num(查问条数) 个别是固定值
个别咱们会固定每页数量 而后查问第几页的数据,start_index = (页码 -1)* 每页条数

3 多表查问

  • 连贯查问
  • 子查问(嵌套查问)
  • 汇合查问
# 多表查问
select * from <table_name1>,<table_name2>
# 后果为两张表的笛卡尔积 全组合

3.1 连贯查问

  • 内连贯
    表的交加
## 隐式内连贯
select 字段列表 from 表 1, 表 2... where 条件
## 显式内连贯
select 字段列表 from 表 1 [inner] join 表 2 on 条件
  • 外连贯
    左外连贯:交加 + 右表补集
    右外连贯:交加 + 左表补集

一张表的所有数据 + 交加的数据

# 左外连贯 以左表为准
select 字段列表 from 表 1 left [outer] join 表 2 on 条件
# 右外连贯 以右表为准
select 字段列表 from 表 1 right [outer] join 表 2 on 条件

3.2 子查问 / 嵌套查问

在一条查问中 将 一条或多条 查问后果 作为 条件 或者 应用

子查问后果 应用 操作
单行单列 比拟
多行单列 汇合 in/ 通过谓词做比拟
多行单列 虚构表 select
  • 谓词
  • any(some)

    # 子查问为 多行单列时 与局部查问后果做比拟 满足一个即可
    select 字段列表 from <table_name> where < 比拟运算符 >any(子查问)

    =any 等价于 in

    # 子查问为 多行单列时 与全副查问后果做比拟 须要满足全副
    select 字段列表 from <table_name> where < 比拟运算符 >all(子查问)
  • exists

    # 存在 判断子查问是否有查问后果 返回逻辑真与逻辑假
    select * from <table_name> where exists(子查问)

3.3 汇合查问

  • 并 UNION

    # 查问后果的并集 默认去掉反复元组 UNION ALL 保留所有数据
    (查问 1) UNION [ALL] (查问 2)

    查问的列数保持一致

  • 交 INTERSECT

    # 查问后果的交加
    (查问 1) INTERSECT (查问 2)
  • 差 EXCEPT

    # 查问后果的差集
    (查问 1) EXCEPT (查问 2)

    其实就是 查问 1 和 查问 2 的补集 的 并集

正文完
 0