mysql使用--列的属性

1.简单的查询和插入语句
_1.简单的查询语句
如:SELECT * FROM 表名;
_2.简单插入语句
如:INSERT INTO 表名(列1, 列2) VALUES (列1的值, 列2的值);
MYSQL中插入数据时以行为单位,未显示指定的列的值将被设置为NULL
_3.批量插入
如:INSERT INTO 表名(列1, 列2) VALUES (列1的值, 列2的值), (列1的值, 列2的值), (列1的值, 列2的值);

2.列的属性
_2.1.默认值
前面说,插入时未指定的列将采用NULL,若想采用指定值,可以定义列的时候增加一个DEFAULT属性。
如:列名 列的类型 DEFAULT 默认值
_2.2.NOT NULL
要求表中的某些列必须有值,不能存放NULL时,可以给列添加NOT NULL属性。
如:列名 列的类型 NOT NULL
_2.3.主键
有时在表中可以通过某个列或某些列的列组合来确定一条唯一的记录,可把这个列或这些列的列组合称为候选键。
一个表可能有多个候选键,我们可以选择一个候选键作为表的主键。一个表至多只能有一个主键。主键值不能重复,通过主键可找到唯一的一条记录。主键默认具备NOT NULL属性。
_2.3.1.定义方式1
如主键只是单个列的话,可直接在列后声明PRIMARY KEY

CTRAETE TABLE student_info
(
number INT PRIMARY KEY,
name VARCHAR(5)
);

_2.3.2.定义方式2
也可以把主键的声明单独提取出来,用下面的形式声明:PRIMARY KEY (列名1, 列名2);
此时,把这个主键声明放到列定义之后就好了。

CREATE TABLE student_info 
(
number INT,
name VARCHAR(5),
PRIMARY KEY (number)
);

_2.4.UNIQUE约束
除主键外,有时也希望其他某个列或列组合中存储的值是唯一的。此时,需给这些有必要保持唯一性的列或列组合添加UNIQUE约束。
_2.4.1.为单个列声明UNIQUE约束,可直接在该列后填写UNIQUEUNIQUE KEY
_2.4.2.也可把UNIQUE约束的声明单独提取出来,用下面的形式声明:UNIQUE [KEY] [约束名称] (列名1, 列名2);

_2.5.主键和UNIQUE约束的对比
主键和UNIQUE约束都能保证某个列或列组合的唯一性,但是:
(1).一张表中只能定义一个主键,却可定义多个UNIQUE约束。
(2).主键列不允许存放NULL,而声明了UNIQUE约束的列可以存放NULL,且NULL可重复地出现在多条记录中。
(3).如我们没有给表定义主键,MYSQL会将第一个声明为NOT NULL且具有UNIQUE约束的列或列组合自动定义为主键。

_2.6.外键
插入到学生成绩表的number(学号)列中的值必须在学生基本信息表的number列中找到。否则,我们就插入了一个未定义的学号。为解决此类问题,引入外键。
定义的语法是:CONSTRAINT [外键名称] FOREIGN KEY (列1, 列2) REFERENCES 父表名 (父列1, 父列2);
其中,外键名称是可选的。
如表A中的某个列或某些列依赖于B表中的某个列或某些列,就称A表为子表,B表为父表。子表和父表可用外键关联起来。

CREATE TABLE student_scode(
number INT,
subject VARCHAR(30),
score TINYINT,
PRIMARY KEY (number, subject),
CONSTRAINT FOREIGN KEY (number) REFERENCES student_info(number)
);

这样,每当向student_score插入记录时候,MYSQL会帮我们检查插入的学号是否能在student_info表中找到,找不到时,报错。
MYSQL中,父表中被子表依赖的列或列组合必须建立索引。如列或列组合已经是主键或有UNIQUE属性,则它们默认情况下就会建立索引。

_2.7.AUTO_INCREMENT
可以为使用整型类型或浮点数类型的列声明该属性,在之后插入新记录时,可不显式指定该列的值,MYSQL会自动帮该列生成自动增长的唯一值。
为某个列声明AUTO_INCREMENT属性语法:列名 列的类型 AUTO_INCREMENT
插入新纪录时,未显式指定AUTO_INCREMENT列值时,为其生成的值是在当前列的最大值基础上加1
注意:
(1).一个表中最多有一个具有AUTO_INCREMENT属性的列。
(2).具有AUTO_INCREMENT属性的列必须建立索引。主键和具有UNIQUE属性的列会自动建立索引。
(3).拥有AUTO_INCREMENT属性的列不能再通过指定DEFAULT属性来指定默认值。
(4).在日常工作中,AUTO_INCREMENT一般作为主键的属性,来自动生成唯一标识一条记录的主键值。

_2.8.列的注释
可在每一个列的末尾添加COMMENT来为列添加注释。

CREATE TABLE first(
id int COMMENT '首个列',
name char(10)
) COMMENT '测试表';

_2.9.显示宽度与ZEROFILL
对于无符号整数类型的列,如想在查询结果中让数字左边补0,就得给该列加一个ZEROFILL属性。
具备ZEROFILL的无符号整数类型列,在数值显示宽度不足列的显示宽度时,在左边补充0,以便达到显示宽度。
也可自己指定显示宽度,如:ALTER TABLE zerofill_table MODIFY i1 INT(5) UNSIGNED ZEROFILL;
上述将zerofill_tablei1列的显示宽度修改为5
注意:
(1).在创建表时,如声明了ZEROFILL属性的列没有声明UNSIGNED属性,则MYSQL会为该列自动生成UNSIGNED属性。
(2).不同的整数类型有不同的显示宽度。
TINYINT默认为4INT默认为11,加了UNSIGNED属性,类型的显示宽度减1
(3).显示宽度不影响列所需的存储空间及取值范围。
(4).只有列的实际值的位数小于显示宽度时才会在左侧补0,实际值的位数大于显示宽度则照原样属性。
(5).仅对列设置显示宽度,而不声明ZEROFILL属性的话,对查询结果无影响。

_2.10.查看表结构时的列属性
诸如:DESC student_info;
查看表属性时:
(1).Null列代表该列是否可存储NULL,值为NO,表示不允许存储NULLYES时,则允许。
(2).Key列存储关于所谓的键的信息,值PRIPRIMARY KEY的缩写;值为UNIUNIQUE KEY的缩写。
(3).Default列代表该列的默认值。
(4).Extra列显示一些额外的信息,比如说如某个列具有AUTO_INCREMENT属性,就会显示在这个列中。

_2.11.标识符的命名
诸如数据库名,表名,列名,约束名,别名,视图名,存储过程名等,统统称为标识符。
以下几种命名不允许:
(1).名称中全是数字
(2).名称中有空白字符。
(3).名称使用了MYSQL中的保留字。
CREATE,DATABASE,INT,DOUBLE,DROP,TABLE等,都是供MYSQL内部使用的,称为保留字。不用于自定义名称。

虽然某些名称可能会导致歧义,但如果坚持要用,需使用反引号将定义的名称引起来。

'1234567'
'world1 world2'
'create'

即使用反引号将名称引起来,数据库名,表名,列名仍需注意不能以空格字符结尾。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

raindayinrain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值