郑统京 发表于 2023-9-16 11:19:26

随笔十九 :SQL的约束条件

9、约束条件(constraint)1、null   not null(不为空)​                        create table t1(id int,name char not null);​                        宽度和约束条件到底什么关系?​                        宽度时用来限制数据的存储​                        约束条件时在宽度基础之上增加额外约束2、zerofill(零填充)3、unsigned(无符号)4、default 默认值
      ## 补充知识点 插入数据的时候可以指定顺序
            create table t1(
                id int,
                name varchar(16)
            );
            insert into t1(id,name) values(1,'egon');
            create table t2(
                id int,
                name varchar(16),
                gender enum('male','female','others') default 'male'
            );
            insert into t2(id,name) values(1,'egon');=>gender默认字段位male   
            insert into t2(id,name) values(1,'egon','female');
            5、unique唯一
      # 单列唯一
      create table t3(
                id int unique,
                name varchar(16)
            );
      insert into t3 values(1,'jason'),(1,'egon');
      insert into t3 values(1,'jason'),(2,'egon');
      # 联合唯一
      """
      ip和port
      """
      idipport
      1   1   2
      2   1   2
      3   1   2
      create table t4(
                id int,
                ip char(16),
                port int,
                unique(ip,port) # 放到最后写辨识度高一点
            );
      insert into t4 values(1,'127.0.0.1',8080);
      insert into t4 values(2,'127.0.0.1',8081);
      insert into t4 values(3,'127.0.0.2',8081;
      insert into t4 values(3,'127.0.0.2',8080); =>错误6、primary key 主键
    """
    1、单单从约束效果来看primary key 等价于not null +unique
    非空且唯一!!!
    """
                  create table t5(id int primary key);
                  insert into t4 values(null); =》报错
                  insert into t4 values(1),(1); =》报错
                  insert into t4 values(1),(2);
    """
    2、他除了有约束效果之外 他还是Innodb存储引擎组织数据的依据
    Innodb存储引擎在创建表的时候必须有primary key
    因为他类似与书的目录 能够帮助提示查询效率并且也是建表的依据
    """
    # 1、一张表有且只有一个主键 如果你没有设置主键 那么会从上往下搜索,直到遇到一个非空且唯一的字段将他自动升级位主键
         create table t6(
               id int,
               name char(16),
               age not null unique,
               addr not null unique
               );
                                    
                                    
    # 2、如果表中没有主键也有其他任何非空且唯一字段 那么Innodb会采用自己内部提供的一个隐藏字段作为主键,隐藏以为这你无法使用他,也无法提升查询速度
    # 3、一张表中通常都应该有一个主键字段 通常以id字段作为主键
    create table t5(
      id int primary key
      name char(16)
      );
    #### 4、联合主键(多个字段联合起来作为表的主键 本质还是一个主键)
    create table t4(
                ip char(16),
                port int,
                primary key(ip,port) # 放到最后写辨识度高一点
            );   
   """
   也就以为这以后我们在创建表的时候一定要添加primary key
   """7、auto_increment自增
# 当编号特别多的时候 人为的去维护太麻烦,完整语法如下
    create table t8(
                id int primary key auto_increment,
                name char(16),
            );
    insert into t8(name) values('jason'),('egon'),('kevin');
## 注意auto_increment 通常都是加载主键(序号、编号),不能给普通字段会报错
## 补充
delete from 在删除主键自增不会停止
如果主键的值被清除,下次在添加的时候还是会接着上一次的自增,因为内部维护了一个计数器
truncate 表
这个命令可以清除数据,并且充值主键8、结论
"""
以后在创建表的id(数据的唯一标识id、uid、sid)字段的时候
id int primary key auto_increment
"""


页: [1]
查看完整版本: 随笔十九 :SQL的约束条件