【mysql主键创建 取消】自增主键 】【【自动增添】【唯一约束 UNIQUE】【null与not null空值】【unsigned属性】【指定字符集】【默认约束】【删除默认值】

表完整性约束

作用:用于保证数据的完整性和一致性
约束条件 说明
PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录,不可以为空 UNIQUE + NOT NULL
FOREIGN KEY (FK) 标识该字段为该表的外键,实现表与表之间的关联
NULL 标识是否允许为空,默认为NULL。
NOT NULL 标识该字段不能为空,可以修改。
UNIQUE KEY (UK) 标识该字段的值是唯一的,可以为空,一个表中可以有多个UNIQUE KEY
AUTO_INCREMENT 标识该字段的值自动增长(整数类型,而且为主键)
DEFAULT 为该字段设置默认值
UNSIGNED 无符号,正数
.主键
每张表里只能有一个主键,不能为空,而且唯一,主键保证记录的唯一性,主键自动为NOT NULL。
一个 UNIQUE KEY 又是一个NOT NULL的时候,那么它被当做PRIMARY KEY主键。

定义两种方式:

#表存在,添加约束 案例1
mysql> alter table g1 add primary key(id); 给已有表添加 主键 唯一性
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> desc g1; 查看表结构
±------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| age | varchar(10) | YES | | NULL | |
±------±------------±-----±----±--------±------+
2 rows in set (0.00 sec)
在这里插入图片描述
测试
在这里插入图片描述

第二种创建主键方法

创建表并指定约束;
mysql> create table g6(id int,name enum(‘man’,‘woman’),age int,primary key(id)); 创建表 指定主键
Query OK, 0 rows affected (0.01 sec)

mysql> desc g6; 查看表结构
±------±--------------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±--------------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| name | enum(‘man’,‘woman’) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
±------±--------------------±-----±----±--------±------+
3 rows in set (0.00 sec)
在这里插入图片描述
测试案例:
在这里插入图片描述

取消主键

mysql> alter table g1 drop primary key; 取消表主键
Query OK, 1 row affected (0.06 sec)
Records: 1 Duplicates: 0 Warnings: 0

mysql> desc g1; 查看表结构
±------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±------------±-----±----±--------±------+
| id | int(11) | NO | | NULL | |
| age | varchar(10) | YES | | NULL | |
±------±------------±-----±----±--------±------+
2 rows in set (0.00 sec)
在这里插入图片描述
主键被删除之后,这个字段仍然不允许为空值;

主键自动增添

2.auto_increment自增--------自动编号,且必须与主键组合使用默认情况下,起始值为1,每次的增量为1。当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况:

  • 如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;
  • 如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。
    (每张表只能有一个字段为自增) (成了key才可以自动增长)
    案例:
    mysql> create table mingqing2(id int primary key auto_increment,name varchar(30),age enum(‘nan’,‘nv’)); 添加自动填补主键
    Query OK, 0 rows affected (0.00 sec)

mysql> desc mingqing2; 查看表结构
±------±-----------------±-----±----±--------±---------------+
| Field | Type | Null | Key | Default | Extra |
±------±-----------------±-----±----±--------±---------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(30) | YES | | NULL | |
| age | enum(‘nan’,‘nv’) | YES | | NULL | |
±------±-----------------±-----±----±--------±---------------+
案例:
在这里插入图片描述

删除自动增长

删除自动增长
mysql> alter table mingqing2 change id id int not null
前面不变 表格名称 更改这个名字不变,int改成不允许为空值
mysql> desc mingqing;
±------±-----------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±-----------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(30) | YES | | NULL | |
| age | enum(‘nan’,‘nv’) | YES | | NULL | |
±------±-----------------±-----±----±--------±------+
3 rows in set (0.00 sec)
在这里插入图片描述

设置唯一约束 UNIQUE

字段添加唯一约束之后,该字段的值不能重复,也就是说在一列当中不能出现一样的值。
步骤:
mysql> create table g2(id int(5),name varchar(5) unique,comment char(5));
Query OK, 0 rows affected (0.01 sec) 添加唯一性

mysql> desc g2; 查看表结构
±--------±-----------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±--------±-----------±-----±----±--------±------+
| id | int(5) | YES | | NULL | |
| name | varchar(5) | YES | UNI | NULL | |
| comment | char(5) | YES | | NULL | |
±--------±-----------±-----±----±--------±------+
3 rows in set (0.00 sec)
在这里插入图片描述
实验案例:![
![](https://img-blog.csdnimg.cn/d35b1596d9304030b146d17670181c21.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5a2m5LqR6K6h566X55qE5bCP6Z2S,size_20,color_FFFFFF,t_70,g_se,x_16)

撤销唯一键

4.null与not null

  1. 是否允许为空,默认NULL,可设置NOT NULL,字段不允许为空,必须赋值
  2. 字段是否有默认值,缺省的默认值是NULL,如果插入记录时不给字段赋值,此字段使用默认值
    步骤:
    mysql> create table g3(id int(5),name varchar(6),sex enum(‘nan’,‘nv’) not null default ‘nan’); 创建表格设置不允许为空值
    Query OK, 0 rows affected (0.00 sec)

mysql> desc g3; 查看表结构
±------±-----------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±-----------------±-----±----±--------±------+
| id | int(5) | YES | | NULL | |
| name | varchar(6) | YES | | NULL | |
| sex | enum(‘nan’,‘nv’) | NO | | nan | |
±------±-----------------±-----±----±--------±------+
3 rows in set (0.00 sec)
在这里插入图片描述
测试案例:
在这里插入图片描述

unsigned属性:

unsigned属性:
整数类型有可选的UNSIGNED属性,表示不允许负值,这大致上可以使正数的上限提高一倍
可以使用这几种整数类型:TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT。分别使用8,16,24,32,64位存储空间
它们可以存储的值的范围从-2(n-1)到2(n-1)-1,其中n是存储空间的位数。
案例;
mysql> create table g4(id tinyint(10) default null, qq tinyint(12) unsigned default null);
Query OK, 0 rows affected (0.00 sec) 创建 不可负数不可空值选项

mysql> desc g4; 查看表结构
±------±---------------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±------±---------------------±-----±----±--------±------+
| id | tinyint(10) | YES | | NULL | |
| qq | tinyint(12) unsigned | YES | | NULL | |
±------±---------------------±-----±----±--------±------+
2 rows in set (0.00 sec)
在这里插入图片描述
案例测试:
在这里插入图片描述

指定字符集

修改字符集 :在创建表的最后面指定一下: default charset=utf8 #可以指定中文

mysql> create table g5(id int(2),name char(5),age int(4)) default charset=utf8;
Query OK, 0 rows affected (0.01 sec)
指定字符集
mysql> show create table g5; 查看创建过程
±---- --±------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
±------±------------------------------------------------------------------------------------------------------------------------------------------------+
| g5 | CREATE TABLE g5 (
id int(2) DEFAULT NULL,
name char(5) DEFAULT NULL,
age int(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
±------±------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
在这里插入图片描述
测试案例:
在这里插入图片描述

设置mysql字符集为utf8

要求MySQL版本>= 5.5.3

查看字符集
查看MYSQL数据库服务器和数据库字符集
方法一:show variables like ‘%character%’;
在这里插入图片描述
方法二:show variables like ‘collation%’;
在这里插入图片描述
查看MYSQL所支持的字符集
show charset;
查看库的字符集
语法:show database status from 库名 like 表名;
查看表的字符集
语法:show table status from 库名 like 表名;
查看表中所有列的字符集
语法:show full columns from 表名;

设置全局字符集

/数据库客户端的编码/
set character_set_client = utf8mb4;
/建立连接使用的编码/
set character_set_connection = utf8mb4;
/数据库的编码/
set character_set_database = utf8mb4;
/结果集的编码/
set character_set_results = utf8mb4;
/数据库服务器的编码/
set character_set_server=utf8mb4;

在这里插入图片描述

重启,查看如下
service mysqld restart

单独设置字符集

修改库的字符集
语法:alter database 库名 default character set 字符集;
alter database shiyan default character set gbk;
修改表的字符集
语法:alter table 表名 convert to character set 字符集;
alter table test1 convert to character set utf8;
修改字段的字符集
语法:alter table 表名 modify 字段名 字段属性 character set gbk;
alter table test1 modify name char(10) character set gbk;
————————————————
以上字符集修改为转载

5.默认约束

添加/删除默认约束
mysql> create table g6(id int not null,name varchar(20),number int,primary key(id)); 创建一个表
Query OK, 0 rows affected (0.00 sec)

mysql> desc g6; 查看表结构
±-------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±-------±------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| number | int(11) | YES | | NULL | |
±-------±------------±-----±----±--------±------+
3 rows in set (0.00 sec)
在这里插入图片描述
添加约束条件 添加默认值是0
mysql> alter table g6 alter number set default 0; 添加约束条件
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> desc g6;
±-------±------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±-------±------------±-----±----±--------±------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| number | int(11) | YES | | 0 | |
±-------±------------±-----±----±--------±------+
3 rows in set (0.00 sec)
在这里插入图片描述
添加一个 自动增长
mysql> alter table g6 change id id int not null auto_increment;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> desc g6;
±-------±------------±-----±----±--------±---------------+
| Field | Type | Null | Key | Default | Extra |
±-------±------------±-----±----±--------±---------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
| number | int(11) | YES | | 0 | |
±-------±------------±-----±----±--------±---------------+
3 rows in set (0.00 sec)
在这里插入图片描述

删除默认值

删除默认值 自动增加
mysql> alter table g6 change id mq_id int not null default 0;
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值