【主键】
1、主键(primary key)①一一列(或一组列),其值能够唯一区分表中每个行。
2、表中的任何列都可以作为主键,只要它满足以下条件:
任意两行都不具有相同的主键值;
每个行都必须具有一个主键值(主键列不允许NULL值)。
【列】
列(column) 表中的一个字段。所有表都是由一个或多个列组成的
【数据库命令行】
use databases; 选择数据库
show databases; 查看所有的数据库,
status; 查看mysql数据库的运行状态
show tables 查看数据库中的表
show columns from table; 查看列字段信息
show columns from schemaname.tablename
SHOW COLUMNS from xtp_credit_asset_auto ;
SHOW COLUMNS from xtp_credit_asset_20200717
describe table;查看表结构
【mysql自带的数据库】
【information_schema】
1、information_schema 看作是一个数据库,确切说是信息数据库
TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表
SELECT
CONCAT(
'ALTER TABLE ',
table_name,
' RENAME TO ',
REPLACE(table_name, '20200716', '20200717'),
';'
) //contact 拼凑字段 >> alter table_name rename to table_name_new ;
FROM
information_schema.TABLES // 正常用法 数据库.表名称的引用方法
WHERE
table_schema = 'xtp2' // 字段 显示其他数据库的名称
and table_name LIKE '%20200716' // 该字段显示数据库里面的表的名称
//这个sql语句的执行结果 得到很多sql语句 最后再执行以下 拼凑sql出来
【replace 用法】
REPLACE(s,s1,s2)使用字符串s2 替代字符串s 中所有的字符串s1
【select】
select 检索的理解:
select * from table
1、筛选出来的结果是一行行的 也就是会先匹配一行到数据 检索出一行当中的需要的数据 拉出来
2、再继续检索下一行
【检索数据】
1、检索单个 多个列
select zd from table; select zd,zd1 from table;
2、检索所有的列
select * from table
>>>可以用*匹配所有筛选 也可以只选择指定的字段
>>> SELECT == select SQL语句对大小写不敏感
3、消除重复的该字段 返回唯一
当distinct应用到多个字段的时候,其应用的范围是其后面的所有字段,而不只是紧挨着它的一个字段,而且distinct只能放到所有字段的前面
select distinct zd from table
select distinct zd,zd1 from table 消除后面所有重复的字段
select distinct * from table
不能部分使用DISTINCT
>>> distinct 默认去重后面所有的字段 【理解错误】 多个字段distinct 会导致去重范围缩小的
保留更多 因为 需要满足多个字段的同时重复 才会去重
如果给出SELECT DISTINCT vend_id,
prod_price,除非指定的两个列都不同,否则所有行都将被
检索出来。
【限制结果】
select zd fom table limit 5;
返回前五行
select zd fom table limit 5,5;
返回从行5开始的5行 start,rows_count
>>>第一行是 0行 最后一行是 -1
LIMIT 4 OFFSET 3意为 从行3开始取4行
<问题? 如何选取后五行?>
答:默认顺序的最后五行
排序取 order by zd desc limit 5
不排序取 limit 95,-1; // 检索记录行 96-last.
【使用完全限定的表明】
使用列名 引用列
使用表明.列名 引用列 完全限定
select table.zi from table
数据库名.表名 完全限定的方法引用
>>> 也可以使用别名来引用
【排序检索】
不指定排序方式 order by
select ..... order by A,B 升序 从低往上排 默认升序 理解就是 从小往大排序
先升A再升B
单列排序///
之前的检索 出来的数据结果都是按照 随机 默认的排序来的
order by 语句默认按照升序对记录进行排序。
目前 看来是 先标点符号 后 数字升序 再 字母 升序
select zd from table order by zd;
对返回的数据进行排序
select zd from table order by zd;
select zd from table order by zd1; 非检索列排序 也可以
多列排序///
select zd,zd1 from table order by zd2,zd3;
优先zd2 排序 仅在有多个zd2的字段值 相等 相重复的情况下 才按照zd3来排序 否则用不到zd3
指定排序方向 order by desc 降序排列 单个
单列指定排序
select sz,zd1 from table order by zd desc; 降序排列
多列指定排序 如果想在多个列上进行降序排序,必须对每个列指定DESC关键字
如果既不指定ASC也不指定DESC,则假定为ASC 默认
不指定就变成升序了
select sz,zd1 from table order by zd desc,name desc 降序排列
首先按照价格 降序排列 再在前面的排序基础上 二级排序按照名字 升序排列
讨论1: a 于 A 这么排序?
在字典(dictionary)排序顺序中,A被视为与a相同,这是MySQL(和大多数数据库管理系统)的默认行为 需要区分的话 需要管理员的帮助
注意:
order by 作用到其后面的所有字段
desc 只作用 其前面的字段,
distinct 作用到后面所有的字段
ASC 升序排列 默认 没用
<组合使用>
order by zd desc limit 1 最大的一个 升序 取第一个
order by zd limit 1 默认 升序 取最小的一个
<组合使用的位置顺序 注意>
from order by limit
from .. on.. join.. where .. group by .. having ..select distinct ...order by .. limit..
问:如何按照指定的 方式排序??指定的列名称
答:order by zd