精华内容
下载资源
问答
  • 2021-03-16 02:01:04

    1、查询一个表中有多少个字段:

    SELECT COUNT(*) FROM information_schema. COLUMNS

    WHERE table_schema = ‘数据库名‘

    AND table_name = ‘表名‘;

    2、查询一个数据库中有多少张表:

    SELECT COUNT(*) TABLES, table_schema FROM information_schema.TABLES   WHERE table_schema = ‘数据库名‘ GROUP BY table_schema;

    3、查询一个数据库中一共有多少个字段:

    SELECT COUNT(column_name) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ‘数据库名‘;

    4、查询一个数据库中的所有表和所有字段、字段类型及注释等信息:

    SELECT TABLE_NAME, column_name, DATA_TYPE, column_comment FROM information_schema.COLUMNS

    WHERE TABLE_SCHEMA = ‘数据库名‘ ;

    原文:https://www.cnblogs.com/shiruina/p/9395365.html

    更多相关内容
  • 查找数据库中的所有字段的信息

    千次阅读 2021-08-06 08:37:26
    查找数据库中的所有字段 近期,小黄在工作接到了一项任务 因为要做一个数据分析系统,所有要求整理我们所有系统所在的数据库需要显示以下字段 数据库名、表名、字段名、字段类型、是否主键、是否索引、备注 这可把...

    查找数据库中的所有字段

    近期,小黄在工作中接到了一项任务

    因为要做一个数据分析系统,所有要求整理我们所有系统所在的数据库需要显示以下字段

    数据库名、表名、字段名、字段类型、是否主键、是否索引、备注

    这可把SQL功底不扎实的小黄给难坏了

    我们先来分析一下需求

    • 这些数据在我们平时所使用的表中完全查找不到
    • 从百度上打探到,数据库都对应的系统表(这个信息小黄竟然还是第一次了解到!!)
    • 所以我们应该从系统表下手

    公司的系统的数据库部署在不同的数据库上面,涉及到的有MySQL、Oracle、SQL server


    MySQL解决方案

    小黄第一想法就是先解决最常用的MySQL

    说句后话,MySQL数据库是处理起来最简单的

    MySQL数据库在创建的时候创建了以下4个数据库

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KGedCvTn-1628210217652)(C:\Users\YellowStar\AppData\Roaming\Typora\typora-user-images\image-20210805165047525.png)]

    在information_schema中可以找到我们所需要的数据
    在这里插入图片描述

    这里需要注意的是主键信息,他会给你返回四种情况

    • PRI:该列是主键的组成部分
    • MUL:该列的值可以重复, 该列是一个非唯一索引的前导列(第一列)或者是一个唯一性索引的组成部分但是可以含有空值NULL
    • UNI:该列是一个唯一值索引的第一列(前导列),并别不能含有空值(NULL)
    • 空的:该列值的可以重复, 表示该列没有索引, 或者是一个非唯一的复合索引的非前导列

    以上主键信息解释转载于https://www.cnblogs.com/licheng/archive/2010/10/16/1852938.html

    到此,我们只剩下一个索引没有解决

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dGmnYdQL-1628210217655)(C:\Users\YellowStar\AppData\Roaming\Typora\typora-user-images\image-20210805170647791.png)]

    以上数据我们都找到了,接下来就是写SQL让他们合并在一起

    select
    	ic.table_schema '数据库名',
    	ic.table_name '表名',
    	ic.column_name '列名',
    	ic.data_type '字段类型',
    case ic.column_key
    	when 'PRI' then
    		'是'
    	else 
    		'否'
    end '是否主键',
    IF(ist.column_name = ic.column_name,'是','否')	'是否索引',
    	ic.column_comment
    from 
    	information_schema.columns  ic	-- 字段表
    left join
    	information_schema.statistics ist  -- 索引
    on	
    	(ic.table_schema = ist.table_schema
    and
    	ic.table_name = ist.table_name)
    

    Oracle解决方案

    MySQL相对来说简单的原因是他是可视化操作,而Oracle我们需要输入命令来查找系统表

    select * from user_tab_columns	--这条语句可以找出类似于MySQL中columns的表
    

    这里有一个注意点(user_tab_columns中的user)

    • user:可以查看某一用户所拥有的所有对象
    • dba:可以查看所有对象(前提是该用户拥有dba权限)
    • all:可以查看某一用户拥有的或可以访问的所有对象

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8davmnRd-1628210217657)(C:\Users\YellowStar\AppData\Roaming\Typora\typora-user-images\image-20210805171819309.png)]

    这样我们可以获得表名、字段名、数据类型(这边没有获取数据库名是因为我们实际过程中当前用户只能访问一个数据库并且我们平时用的也是该数据库,所以数据库名另外加上即可)

    select * from  user_cons_columns
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lLWKBWuT-1628210217659)(C:\Users\YellowStar\AppData\Roaming\Typora\typora-user-images\image-20210805172748696.png)]

    这一块代表的是约束信息,这里1234显示的应该是顺序,而我观察了我这边的数据库可以得到‘1’是主键

    接下来我们需要查找索引,使用以下语句

    select * from user_IND_COLUMNS
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SWSXNzpQ-1628210217659)(C:\Users\YellowStar\AppData\Roaming\Typora\typora-user-images\image-20210805173010024.png)]

    可以通过外连接将其显示

    到此为止Oracle我们只剩下一个备注还没有搞定,通过下面这条语句可以找到字段对应的备注信息

    select * from user_col_comments
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H2vPQMQ1-1628210217660)(C:\Users\YellowStar\AppData\Roaming\Typora\typora-user-images\image-20210806080214895.png)]

    至此我们已经找到了所有需要的数据,接下来只需执行sql语句拼接即可

    select
    	dtc.table_name table_name,
    	dtc.column_name column_name,
    	dtc.data_type column_type,
    CASE ucc.position
    	WHEN 1 THEN
    		'是'
    	ELSE
    		'否'
    END iskey,
    CASE  
    	WHEN uic.COLUMN_POSITION is null THEN
    		'否'
    	ELSE
    		'是'
    END isindex,
    	utc.COMMENTS
    
    from
    	(select * from user_tab_columns) dtc
    LEFT JOIN
    	(select 
    	*
    	from  user_cons_columns col
    	WHERE col.POSITION = 1) ucc
    on 
    	(dtc.table_name = ucc.table_name and dtc.column_name = ucc.column_name)
    LEFT JOIN	
    	(select * from user_IND_COLUMNS) uic
    on 
    	(dtc.table_name = uic.table_name and dtc.column_name = uic.column_name)
    LEFT JOIN
    	(select * from user_col_comments) utc
    on
    	(dtc.table_name = utc.table_name and dtc.column_name = utc.column_name)
    ORDER BY
    	dtc.table_name
    

    SQL server解决方案

    说来惭愧,小黄至今都还未解决SQL server中索引和备注的信息,主要原因是查找到了索引但不知道如何将两张表连接在一起。在这里小黄也希望各位大佬来帮我诊断一下以上是否有错误,以及帮我补充一下SQL server的解决方案。

    select 	* from INFORMATION_SCHEMA.COLUMNS --这条语句作为我们的主表,其他的表进行外连接
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DVLfxPk2-1628210217661)(C:\Users\YellowStar\AppData\Roaming\Typora\typora-user-images\image-20210806083206130.png)]

    查找字段是否为主键

    select 	*  from INFORMATION_SCHEMA.KEY_COLUMN_USAGE	
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LlABRbad-1628210217661)(C:\Users\YellowStar\AppData\Roaming\Typora\typora-user-images\image-20210806083411875.png)]

    SQL server我的部分解决方案

    select 
    	tsc.table_catalog,
    	tsc.table_name,
    	tsc.column_name,
    	tsc.data_type,
    CASE 
    	WHEN iskc.ordinal_position is null 
    	THEN '否'
    	
    	ELSE '是'
    END iskey
    from INFORMATION_SCHEMA.COLUMNS tsc
    
    left join
    	(select 	*  from INFORMATION_SCHEMA.KEY_COLUMN_USAGE) iskc
    on 
    	(tsc.column_name = iskc.column_name and tsc.table_name = iskc.table_name)
    
    order by table_name
    

    2021.8.9更新

    小黄来更新啦!至今还没有解决SQL server索引的问题,但又遇到一个新的问题,简直就是一波未平一波又起!!!
    情况大致就是上面这么个情况,多了一个系统使用的是pgsql的数据管理系统,这可把小黄整懵了,上述三个数据系统大多都是有所耳闻,这个是我见识短浅,听都没听过。还是面向百度解决问题,让我们看看小黄是如何解决的

    pgsql解决方案

    小黄经过一早上的努力还是完全解决,没办法将索引表和字段表关联,希望大佬能帮我解决以下
    总结一下经验,我们主表一般都选择用字段来呈现,所以我们考虑查询一下字段信息

    SELECT * FROM pg_attribute
    

    调用以上方法可以得到数据库中所有的字段
    在这里插入图片描述
    那我们可以重新理一下sql语句

    SELECT * FROM pg_attribute where attnum > 0
    

    接下来我们先将表ID进行关联,以下是查找表的代码
    这里要着重讲一下系统字段,在字段表和表名表进行关联的时候
    关联条件是 字段表.attrelid = 表名表.oid
    而oid是需要显示定义的,直接查询时无法显示系统字段的

    SELECT 
    	C.oid,* 
    FROM
    	pg_class C 
    WHERE
    	relkind = 'r' 
    	AND relname NOT LIKE'pg_%' 
    	AND relname NOT LIKE'sql_%'
    

    在这里插入图片描述

    这里需要注意的时relking字段,我们可以来看一下官方文档pg_class官方文档
    我们需要的是普通表,所以将值为r的筛选出来
    而表名中pg开头的值和sql开头的值对应的都是系统表,我们也不需要

    接下来我们需要解决的是字段类型

    SELECT 	t.oid,* FROM 	pg_type  t
    

    在这里插入图片描述
    再者就是解决字段备注的语句,调用以下方法

    SELECT * FROM 	pg_description   d
    

    在这里插入图片描述
    pgsql的部分解决方案

    SELECT 
    	C.relname 表名,
    	cast(obj_description(relfilenode,'pg_class') as varchar) AS "表名描述",
      A.attname 字段名,
    	t.typname as "字段类型",
    	d.description AS "字段备注",
    	(case
    		when (
    		select
    			count(pg_constraint.*)
    		from
    			pg_constraint
    		inner join pg_class on
    			pg_constraint.conrelid = pg_class.oid
    		inner join pg_attribute on
    			pg_attribute.attrelid = pg_class.oid
    			and pg_attribute.attnum = any(pg_constraint.conkey)
    		inner join pg_type on
    			pg_type.oid = pg_attribute.atttypid
    		where
    			pg_class.relname = c.relname
    			and pg_constraint.contype = 'p'
    			and pg_attribute.attname = a.attname) > 0 then true
    		else false end) as 是否主键
    FROM
    	pg_attribute A 
    LEFT JOIN 
    	( SELECT c.oid,* FROM pg_class C WHERE relkind = 'r' AND relname NOT LIKE'pg_%' AND relname NOT LIKE'sql_%' ) C
    ON 
    	A.attrelid = C.oid 
    left join 
    	(SELECT 	t.oid,* FROM 	pg_type  t) T
    on
    	a.atttypid = t.oid
    left join 
      (SELECT * FROM 	pg_description   d) D
    on 
    	d.objoid=a.attrelid and d.objsubid=a.attnum
    WHERE
    	c.relname is not null
    and
    	a.attnum > 0
    order by 
      C.relname
    

    以上就是小黄的解决方案,欢迎各位补充!!!

    展开全文
  • Mysql数据库字段数据类型、长度详解

    千次阅读 2021-01-19 13:21:06
    许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否正负之分或者用零填补。 面列出了各种数值类型以及它们的允许范围和占用的内存空间。...

    一、数值类型

    列类型 需要的存储量

    TINYINT 1 字节

    SMALLINT 2 个字节

    MEDIUMINT 3 个字节

    INT 4 个字节

    INTEGER 4 个字节

    BIGINT 8 个字节

    FLOAT(X) 4 如果 X < = 24 或 8 如果 25 < = X < = 53

    FLOAT 4 个字节

    DOUBLE 8 个字节

    DOUBLE PRECISION 8 个字节

    REAL 8 个字节

    DECIMAL(M,D) M字节(D+2 , 如果M < D)

    NUMERIC(M,D) M字节(D+2 , 如果M < D)

    MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否有正负之分或者用零填补。

    面列出了各种数值类型以及它们的允许范围和占用的内存空间。

    类型 大小 范围(有符号) 范围(无符号) 用途

    TINYINT 1 字节 (-128,127) (0,255) 小整数值

    SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值

    MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值

    INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值

    BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值

    FLOAT 4 字节 (-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38)

    单精度 浮点数值

    DOUBLE 8 字节 (1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)

    双精度 浮点数值

    DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

    INT 类型

    在 MySQL 中支持的 5 个主要整数类型是 TINYINT,SMALLINT,MEDIUMINT,INT 和 BIGINT。这些类型在很大程度上是相同的,只有它们存储的值的大小是不相同的。

    MySQL 以一个可选的显示宽度指示器的形式对 SQL 标准进行扩展,这样当从数据库检索一个值时,可以把这个值加长到指定的长度。例如,指定一个字段的类型为 INT(6),就可以保证所包含数字少于 6 个的值从数据库中检索出来时能够自动地用空格填充。需要注意的是,使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。

    万一我们需要对一个字段存储一个超出许可范围的数字,MySQL 会根据允许范围最接近它的一端截短后再进行存储。还有一个比较特别的地方是,MySQL 会在不合规定的值插入表前自动修改为 0。

    UNSIGNED(未签署) 修饰符规定字段只保存正值。因为不需要保存数字的正、负符号,可以在储时节约一个“位”的空间。从而增大这个字段可以存储的值的范围。

    ZEROFILL(零填充) 修饰符规定 0(不是空格)可以用来真补输出的值。使用这个修饰符可以阻止 MySQL 数据库存储负值。

    FLOAT、DOUBLE 和 DECIMAL 类型

    MySQL 支持的三个浮点类型是 FLOAT、DOUBLE 和 DECIMAL 类型。FLOAT 数值类型用于表示单精度浮点数值,而 DOUBLE 数值类型用于表示双精度浮点数值。

    与整数一样,这些类型也带有附加参数:一个显示宽度指示器和一个小数点指示器。比如语句 FLOAT(7,3) 规定显示的值不会超过 7 位数字,小数点后面带有 3 位数字。

    对于小数点后面的位数超过允许范围的值,MySQL 会自动将它四舍五入为最接近它的值,再插入它。

    DECIMAL 数据类型用于精度要求非常高的计算中,这种类型允许指定数值的精度和计数方法作为选择参数。精度在这里指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的位数。比如语句 DECIMAL(7,3) 规定了存储的值不会超过 7 位数字,并且小数点后不超过 3 位。

    忽略 DECIMAL 数据类型的精度和计数方法修饰符将会使 MySQL 数据库把所有标识为这个数据类型的字段精度设置为 10,计算方法设置为 0。

    UNSIGNED(未签署) 和 ZEROFILL(零填充) 修饰符也可以被 FLOAT、DOUBLE 和 DECIMAL 数据类型使用。并且效果与 INT 数据类型相同。

    2、日期和时间类型

    列类型 需要的存储量

    DATE 3 个字节

    DATETIME 8 个字节

    TIMESTAMP 4 个字节

    TIME 3 个字节

    YEAR 1 字节

    在处理日期和时间类型的值时,MySQL 带有 5 个不同的数据类型可供选择。它们可以被分成简单的日期、时间类型,和混合日期、时间类型。根据要求的精度,子类型在每个分类型中都可以使用,并且 MySQL 带有内置功能可以把多样化的输入格式变为一个标准格式

    类型 大小(字节) 范围 格式 用途

    DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值

    TIME 3 ‘-838:59:59′/’838:59:59′ HH:MM:SS 时间值或持续时间

    YEAR 1 1901/2155 YYYY 年份值

    DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值

    TIMESTAMP 8 1970-01-01 00:00:00/2037 年某时 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

    DATE、TIME 和 TEAR 类型

    MySQL 用 DATE 和 TEAR 类型存储简单的日期值,使用 TIME 类型存储时间值。这些类型可以描述为字符串或不带分隔符的整数序列。如果描述为字符串,DATE 类型的值应该使用连字号作为分隔符分开,而 TIME 类型的值应该使用冒号作为分隔符分开。

    需要注意的是,没有冒号分隔符的 TIME 类型值,将会被 MySQL 理解为持续的时间,而不是时间戳。

    MySQL 还对日期的年份中的两个数字的值,或是 SQL 语句中为 TEAR 类型输入的两个数字进行最大限度的通译。因为所有 TEAR 类型的值必须用 4 个数字存储。MySQL 试图将 2 个数字的年份转换为 4 个数字的值。把在 00-69 范围内的值转换到 2000-2069 范围内。把 70-99 范围内的值转换到 1970-1979 之内。如果 MySQL 自动转换后的值并不符合我们的需要,请输入 4 个数字表示的年份。

    DATETIME 和 TIMESTAMP 类型

    除了日期和时间数据类型,MySQL 还支持 DATEYIME 和 TIMESTAMP 这两种混合类型。它们可以把日期和时间作为单个的值进行存储。这两种类型通常用于自动存储包含当前日期和时间的时间戳,并可在需要执行大量数据库事务和需要建立一个调试和审查用途的审计跟踪的应用程序中发挥良好作用。

    如果我们对 TIMESTAMP 类型的字段没有明确赋值,或是被赋与了 null 值。MySQL 会自动使用系统当前的日期和时间来填充它。

    3、字符串类型

    列类型 需要的存储量

    CHAR(M) M字节,1 <= M <= 255

    VARCHAR(M) L+1 字节, 在此L <= M和1 <= M <= 255

    TINYBLOB, TINYTEXT L+1 字节, 在此L< 2 ^ 8

    BLOB, TEXT L+2 字节, 在此L< 2 ^ 16

    MEDIUMBLOB, MEDIUMTEXT L+3 字节, 在此L< 2 ^ 24

    LONGBLOB, LONGTEXT L+4 字节, 在此L< 2 ^ 32

    ENUM('value1','value2',…) 1 或 2 个字节, 取决于枚举值的数目(最大值65535)

    SET('value1','value2',…) 1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员)

    MySQL 提供了 8 个基本的字符串类型,可以存储的范围从简单的一个字符到巨大的文本块或二进制字符串数据。

    类型 大小 用途

    CHAR 0-255字节 定长字符串

    VARCHAR 0-255字节 变长字符串

    TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串

    TINYTEXT 0-255字节 短文本字符串

    BLOB 0-65 535字节 二进制形式的长文本数据

    TEXT 0-65 535字节 长文本数据

    MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据

    MEDIUMTEXT 0-16 777 215字节 中等长度文本数据

    LOGNGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据

    LONGTEXT 0-4 294 967 295字节 极大文本数据

    CHAR 和 VARCHAR 类型

    CHAR 类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围从 0-255。比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补。

    CHAR 类型可以使用 BINARY 修饰符。当用于比较运算时,这个修饰符使 CHAR 以二进制方式参于运算,而不是以传统的区分大小写的方式。

    CHAR 类型的一个变体是 VARCHAR 类型。它是一种可变长度的字符串类型,并且也必须带有一个范围在 0-255 之间的指示器。CHAR 和 VARCHGAR 不同之处在于 MuSQL 数据库处理这个指示器的方式:CHAR 把这个大小视为值的大小,不长度不足的情况下就用空格补足。而 VARCHAR 类型把它视为最大值并且只使用存储字符串实际需要的长度(增加一个额外字节来存储字符串本身的长度)来存储值。所以短于指示器长度的 VARCHAR 类型不会被空格填补,但长于指示器的值仍然会被截短。

    因为 VARCHAR 类型可以根据实际内容动态改变存储值的长度,所以在不能确定字段需要多少字符时使用 VARCHAR 类型可以大大地节约磁盘空间、提高存储效率。

    VARCHAR 类型在使用 BINARY 修饰符时与 CHAR 类型完全相同。

    TEXT 和 BLOB 类型

    对于字段长度要求超过 255 个的情况下,MySQL 提供了 TEXT 和 BLOB 两种类型。根据存储数据的大小,它们都有不同的子类型。这些大型的数据用于存储文本块或图像、声音文件等二进制数据类型。

    TEXT 和 BLOB 类型在分类和比较上存在区别。BLOB 类型区分大小写,而 TEXT 不区分大小写。大小修饰符不用于各种 BLOB 和 TEXT 子类型。比指定类型支持的最大范围大的值将被自动截短。

    3、复合类型

    MySQL 还支持两种复合数据类型 ENUM 和 SET,它们扩展了 SQL 规范。虽然这些类型在技术上是字符串类型,但是可以被视为不同的数据类型。一个 ENUM 类型只允许从一个集合中取得一个值;而 SET 类型允许从一个集合中取得任意多个值。

    ENUM 类型

    ENUM 类型因为只允许在集合中取得一个值,有点类似于单选项。在处理相互排拆的数据时容易让人理解,比如人类的性别。ENUM 类型字段可以从集合中取得一个值或使用 null 值,除此之外的输入将会使 MySQL 在这个字段中插入一个空字符串。另外如果插入值的大小写与集合中值的大小写不匹配,MySQL 会自动使用插入值的大小写转换成与集合中大小写一致的值。

    ENUM 类型在系统内部可以存储为数字,并且从 1 开始用数字做索引。一个 ENUM 类型最多可以包含 65536 个元素,其中一个元素被 MySQL 保留,用来存储错误信息,这个错误值用索引 0 或者一个空字符串表示。

    MySQL 认为 ENUM 类型集合中出现的值是合法输入,除此之外其它任何输入都将失败。这说明通过搜索包含空字符串或对应数字索引为 0 的行就可以很容易地找到错误记录的位置。

    SET 类型

    SET 类型与 ENUM 类型相似但不相同。SET 类型可以从预定义的集合中取得任意数量的值。并且与 ENUM 类型相同的是任何试图在 SET 类型字段中插入非预定义的值都会使 MySQL 插入一个空字符串。如果插入一个即有合法的元素又有非法的元素的记录,MySQL 将会保留合法的元素,除去非法的元素。

    一个 SET 类型最多可以包含 64 项元素。在 SET 元素中值被存储为一个分离的“位”序列,这些“位”表示与它相对应的元素。“位”是创建有序元素集合的一种简单而有效的方式。并且它还去除了重复的元素,所以 SET 类型中不可能包含两个相同的元素。

    希望从 SET 类型字段中找出非法的记录只需查找包含空字符串或二进制值为 0 的行。

    展开全文
  • 数据库 - 字段属性

    2021-11-25 09:29:33
    数据库 - 字段属性 主键 – 唯一键和自增长 主键 增加主键 大体分为三种增加主键的方式: 方案一: 高清图: 方案二:多个字段作为主键可以是复合主键。 方案三:

    数据库 - 字段属性

    主键 – 唯一键和自增长

    主键
    在这里插入图片描述
    增加主键
    大体分为三种增加主键的方式:
    方案一:
    在这里插入图片描述
    高清图:
    在这里插入图片描述

    方案二:有多个字段作为主键可以是复合主键。
    在这里插入图片描述
    方案三:
    在这里插入图片描述
    主键约束
    创建约束的目的就是保证数据的完整性和一致性

    主键对应的字段中的数据必须唯一,且不能为NULL, 一旦重复,数据操作失败(增和改)

    建议主键使用数字类型,因为数字的检索速度非常快,并且主键如果是数字类型,还可以设置自动增长,主键的原理其实就是一个计数器

    更新主键 and 删除主键
    没有办法来更新主键,主键必须先删除,才能增加
    Alter table 表名 drop primary key;
    在这里插入图片描述
    主键分类 - 逻辑主键
    在这里插入图片描述
    在这里插入图片描述
    自动增长
    在这里插入图片描述
    新增自增长
    自增长的特点:

    • 任何一个字段要做自增长必须前提是本身是一个索引(key一栏有值 - 像之前的key那一栏中主键的话,),auto_increment表示自动编号
    • 自增长字段必须是数字(整型)
    • 一张表最多只能有一个自增长

    自增长的使用

    当自增长被给定的值为NULL或者默认值的时候会触发自动增长

    先建立一张自增长表
    在这里插入图片描述
    切记:在每次书写语句以后,在最后一句后面不用添加逗号,直接用小括号加上分号结束即可。

    当自增长被给定的值为NULL或者默认值的时候会触发自动增长.
    在这里插入图片描述
    在这里插入图片描述
    自增长如果对应的字段输入了值,那么自增长失效,但是下一次还是能够正确的自增长,(最大值 + 1)
    在这里插入图片描述
    删除自增长
    自增长是字段的一个属性,可以通过modify 来进行修改(保证字段没有auto_increment即可)
    Alter table 表名 modify 字段 类型;
    在这里插入图片描述

    唯一键

    一张表往往有很多字段需要具有唯一性,数据不能重复: 但是一张表中只能有一个主键: 唯一键(unique key)就可以解决表中有多个字段需要唯一性约束的问题.
    一张表只有一个主键,但是可以有很多的唯一键。

    唯一键的本质与主键差不多: 唯一键默认的允许自动为空,而且可以多个为空(空字段不参与唯一性比较)

    添加唯一键的三种方案:基本与主键差不多!

    • 在创建表的时候,字段之后直接跟上 unique / unique key
    • 在所有的字段都添加之后,增加unique key(字段列表) – 复合唯一 键
    • 在创建表之后增加唯一键
      (alter table 表名 add unique key(列名);)

    唯一键约束
    唯一键与主键本质相同: 唯一的区别就是唯一键默认允许为空,而且是多个为空.
    一般在设置主键以后,自己自己添加自增长。
    如果唯一键也不允许为空: 与主键的约束作用是一致的.
    如果唯一键也不允许为空: 与主键的约束作用是一致的.
    在这里插入图片描述
    更新唯一键 & 删除唯一键
    在这里插入图片描述
    在这里插入图片描述

    外键

    外键:即外面的键:键不在自己表中,如果一张表中有一个字段(非主键)指向另外一张表的主键,那么该字段称之为外键。

    增加外键
    在这里插入图片描述
    reference 提及,谈到
    在这里插入图片描述
    !!! 在命令行书写时,我们的注释 – 后面需要空出一格来!

    展开全文
  • 复合主键:于字段编写最下方设置约束 CONSTRAINT 约束名 PRIMARY KEY(主键名); 例:CREATE TABLE A.TABLE ( DT DATE NOT NULL, NAME VARYING(255) NOT NULL, CONSTRAINT YUESHU PRIMARY KEY(DT,NAME) ); .
  • 4、经常出现在Where子句字段,特别是大表的字段,应该建立索引; 5、索引应该建在选择性高的字段上; 6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引; 7、复合索引的建立需要进行...
  • 数据库、表、字段命名规范

    千次阅读 2021-07-01 15:32:54
    一、数据库命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔,一个项目一个数据库,多个项目慎用同一个数据库 二、表命名规范 采用26...
  • 数据库中复合主键与联合主键

    千次阅读 2020-10-16 10:27:05
    复合主键:数据库表的主键由两个及以上的字段组成。 例如: CREATE TABLE `asm_device_config_info` ( `asmModel` varchar(32) NOT NULL COMMENT '自助机型号', `deviceType` varchar(32) NOT ...
  • 最近学习一点数据库的基本知识,被一个问题困惑了许久:主键是唯一的索引,那么为何一个表可以创建多个主键呢?其实“主键是唯一的索引”这话有点歧义的。举个例子,我们在表创建了一个ID字段,自动增长,并设为...
  • 1、自增字段必须唯一(UNIQUE),可以是主键或者UNIQUE修饰 2、一个表只能一个主键或者联合主键 现有的数据库如下: CREATE TABLE `questionnaire_form` ( `id` bigint(20) NOT NULL, `tenant_id` varchar(36) ...
  • 【第四章】Mysql数据库字段详解

    千次阅读 2020-07-17 18:02:55
    学习目标:了解字段类型的作用,掌握MySQL字段类型,熟练运用字段类型来设计数据表 字段类型的作用 整数类型 小数类型 时间日期类型 字符串类型 1、字段类型作用 目标:了解为什么要有字段类型以及字段类型...
  • 数据库的唯一标识符字段

    千次阅读 2021-05-07 03:55:12
    要在 ArcGIS 中用作唯一标识符,字段必须不为空、包含唯一值,并且属于以下数据类型之一:整型(仅限正值)字符串GUID日期型由于唯一标识符字段中的值是用于识别 ArcGIS 中行或要素对象的唯一值,因此,该字段中的值...
  • 数据库索引的理解及适合建立索引的字段

    万次阅读 多人点赞 2018-03-06 13:17:43
    转载深入浅出数据库索引原理,哪些字段适合建立索引 问题 为什么要给表加上主键? 为什么加索引后会使查询变快? 为什么加索引后会使写入、修改、删除变慢? 什么情况下要同时在两个字段上建索引? 这些问题...
  • 1.第一范式:数据库字段是单一属性,不可再分  不能是复合属性,如果存在,应该拆分为多个属性  不能是多值属性,如果存在,应该建立一个实体,而让此属性与其存在1对多的关系)  不能是重复属性    2....
  • 索引使用简介一、 关于索引的知识要写出运行效率高的sql,需要对索引的机制一定了解,下面对索引的基本知识做一介绍。1、 索引的优点和局限索引可以提高查询的效率,但会降低dml操作的效率。所以建立索引时需要...
  • 经常出现在where字句字段,特别是大表的字段,应该建立索引5. 索引应该建在选择型高的字段上6. 索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引7. 复合索引的建立需要进行仔细分析,尽量考虑...
  • 1.数据库设计14规则 1. 原始单据与实体之间的关系   可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对应且只对应一个实体。  在特殊情况下,它们可能是一对多或多对...
  • 文章目录字段类型1、字段类型作用2、整数类型3、显示宽度4、小数类型(浮点型)5、小数类型(定点型)6、字符串类型(定长型)7、字符串类型(变长型)8、字符串类型(文本字符串)9、字符串类型(枚举)10、字符串...
  • 如何在数据库建立复合主键

    万次阅读 2014-05-29 10:41:05
    (即多个字段同时作为主键)主键是数据库表的一个重要属性,建立主键可以避免表存在完全相同的记录,也就是说主键在一张表的记录值是唯一的。 建立主键两种方法:一种是在数据库提供的GUI环境建立,另一种...
  • 数据库字段属性和索引

    千次阅读 2019-07-05 23:30:25
    字段属性 ...SQL操作中有多种方式可以给表增加主键:大体分为三种 方案1:在创建表的时候,直接在字段之后,跟primary key 关键字(主键本身不允许为空) 例如:创建表course,设置主键为Cname creat...
  • 数据库字段和长度的设计对于任何字段长度都不应该过于小气,否则未知的变化会造成前后台都要修改 1、对于开关型字段建议number(1,0) 而不是varchar2(1),避免用户错误保存Y/N,而不是1/0,这样可能会引入大小写问题 .....
  • search api就是对存储在elastic search(以下简称es)的数据进行查询的相关API,可以类比mysql的select语句。es的search主要分为URI ...es的Query DSL以_search为endpoint,主要分为字段类查询和复合查询()...
  • 对于复合索引:Mysql从左到右的使用索引字段,一个查询可以只使用索引的一部份,但只能是最左侧部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧...
  • 6数据库设计规范.doc

    2022-06-16 15:31:39
    数据库设计规范 (一)、命名规范 1、 表名 使用每个文字的汉语拼音首字母。 备份表:BAK_表名_姓名拼音日期(BAK_YJBYSMD_ZHJ0619) 临时表:TMP_表名_姓名拼音日期(TMP_YJBYSMD_ZHJ0619) 2、 键名 前缀为PK_。...
  • 复合主键:数据库表的主键由两个及以上的字段组成。  例如: CREATE TABLE `asm_device_config_info` ( `asmModel` varchar(32) NOT NULL COMMENT '自助机型号', `deviceType` varchar(32) NOT NULL COMMENT '...
  • 数据库表字段命名规范

    千次阅读 2020-09-11 14:32:55
    一、数据库命名规范 1.1 数据库命名规范 采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成,命名简洁明确,多个单词用下划线'_'分隔,一个项目一个数据库,多个项目慎用同一个数据库 全部...
  • 1.在数据库查询语句使用别名,让别名和实体类的属性名一一对应 2.使用resultMap。 1.在查询标签引入resultMap的id 2.定义resultMap 代码属性的含义与解释 <id />:此属性表示查询结果集的唯一...
  • MySQL数据库中数据表的约束条件

    千次阅读 2022-03-31 19:19:30
    MySQL数据库中数据表的约束条件
  • 数据库中的五种约束

    万次阅读 多人点赞 2018-11-14 09:51:38
    数据库中的五种约束 #五大约束  1、主键约束(Primay Key Coustraint) 唯一性,非空性  2、唯一约束 (Unique Counstraint)唯一性,可以空,但只能一个  3、检查约束 (Check Counstraint)对该列数据的范围...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 72,646
精华内容 29,058
关键字:

哪些数据库中有复合字段