zoukankan      html  css  js  c++  java
  • Python进阶_mysql_表结构修改、约束(2)

    表结构操作 ( ALTER TABLE)

    添加单列:
    ALTER TABLE tb1_name ADD [COLUNM] col_name
    column_definition [FIRST|AFTER col-name]

    #增加一列 age
    mysql> alter table tb1
        -> add age int;
    
    #增加多列

    mysql> ALTER TABLE `tb1`
    -> add `aa` INT,
    -> add `bb` INT,
    -> add `cc` INT;

    删除数据表中的列
    ALTER TABLE tbl_name DROP [COLUMN] col_name

    mysql> alter table tb1 drop aa;
    

    修改表结构  

    modify #改列的数据类型 (属性)

    change #改列名和数据类型

    rename #改表名

    修改列名  #将 name列改为sex varchar(20)
    mysql> alter table tb1 change `name` `sex` varchar(20);
    
    修改数据类型
    mysql> alter table tb1 modify `age` varchar(20);
            
    修改表名
    mysql> alter table `tb1` rename to `students`;

    约束

    非空约束
    
    NULL  字段值可以为空
    
    NOT NULL  字段值不能为空
    
    mysql> CREATE TABLE tb1( 
        -> id INT,
        -> name VARCHAR(20) NOT NULL
        -> );
    
    mysql> insert into tb1(id) value(1);   # 报错
    
    
    mysql> insert into tb1(id,name) value(1,'frl');
    
    ## 注意   在mysql 里面,'' 不等于null
    
    #手动,添加非空约束 (必须这个字段,没有NULL值)
    
    mysql> alter table tb1
    -> modify id int not null;
    
    # 取消非空约束
    mysql> alter table tb1
    -> modify id int ;

    唯一约束

    唯一约束
    
    确保字段中的值的唯一unique key 
    
    mysql> create table tb2(
        -> id int not null unique key,  
        -> name varchar(20) not null
        -> );
    mysql> insert into tb2 value(1,'张三');
    
    mysql> insert into tb2 value(1,'张三');  # 报错,违反唯一约束
    
    #添加唯一约束
    mysql> ALTER TABLE `tb2`
        -> ADD unique key(`name`)
        -> ;
    
    #删除唯一约束
    mysql> alter table tb2
        -> drop key name;
    
    #联合唯一
    mysql> alter table tb2
        -> add aa int,
        -> add bb int;
    
    mysql> alter table tb2
        -> add unique key (aa,bb);
    
    mysql> insert into tb2 value(4,'frl',1,2);
    mysql> insert into tb2 value(5,'jj',1,2);
    ERROR 1062 (23000): Duplicate entry '1-2' for key 'aa'
    
    
    # 删除联合唯一  (show create table tb2;)
    alter table tb2 drop key aa;

    主键约束

    主键保证记录的唯一性, 唯一标识每一条数据主键自动为NOT NULL每张数据表只能存在一个主键NOT NULL + UNIQUE KEY

    一个UNIQUE KEY 又是一个NOT NULL的时候,那么它被当做PRIMARY KEY主键当一张表里没有一个主键的时候,第一个出现的非空且为唯一的列被视为有主键。

    #主键,就是可以数据表中,可以唯一标识,一条数据。就好像身份证一样。
    mysql> create table tb3( 
        -> id int primary key,
        -> name varchar(20) not null
        -> ); 
    mysql> insert into tb3 value(1,'张三');
    mysql> insert into tb3 value(1,'张三');
    ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
    
    #删除主键约束
    mysql> alter table tb3
        -> drop primary key;    # 一个表里面,只有一个主键
    
    #添加主键约束
    mysql> alter table tb3
        -> add primary key(id);
        
    #联合主键
    mysql> create table tb4(
        -> id_a int ,
        -> id_b int,
        -> content varchar(20),
        -> primary key(id_a,id_b)
        -> );
    mysql> desc tb4;
    
    #删除主键约束
    mysql> alter table tb4
        -> drop primary key;
    #添加联合主键
    mysql> alter table tb4
        -> add primary key(id_a,id_b);

    自增长AUTO_INCREMENT

    AUTO_INCREMENT 自动编号,一般与主键组合使用。一个表里面只有一个自增默认情况下,起始值为1,每次的增量为1。当插入记录时,如果为AUTO_INCREMENT数据列明确指定了一个数值,则会出现两种情况,

    情况一,如果插入的值与已有的编号重复,则会出现出错信息,因为AUTO_INCREMENT数据列的值必须是唯一的;

    情况二,如果插入的值大于已编号的值,则会把该插入到数据列中,并使在下一个编号将从这个新值开始递增。也就是说,可以跳过一些编号。如果自增序列的最大值被删除了,则在插入新记录时,该值被重用。(可以调大,不可以缩小)


    例:
    mysql> create table tb5(
      -> id int primary key auto_increment,
      -> name varchar(20)
      -> )auto_increment =100;    # 如果不写,默认从1开始

    mysql> insert into tb5(name) values('张三'),('李四');

    #auto_increment值,可以调大
    insert into tb5(id,name) values(110,'王五');

    #不可以调小
    insert into tb5(id,name) values(108,'王八');
    insert into tb5(name) values('田七');

    #删除自动增长
    mysql> alter table tb5
      -> modify id int;

    #增加自动增长auto_increment
    mysql> alter table tb5
      -> modify id int auto_increment;

    默认约束DEFAULT

    DEFAULT(默认约束)初始值设置,插入记录时,如果没有明确为字段赋值,则自动赋予默认值。

     

    
    

    添加/删除默认约束
    ALTER TABLE tbl_name ALTER [COLUMN] col_name
    {SET DEFAULT literal | DROP DEFAULT}


    #例: mysql
    > create table tb6( -> id int primary key auto_increment, -> name varchar(20) not null, -> age int not null default 18 -> ); mysql> desc tb6; mysql> insert into tb6(name) values('张三'),('李四'),('王五'); mysql> select * from tb6; #删除default mysql> alter table tb6 -> modify age int not null; mysql> desc tb6; #(2) mysql> alter table tb6 -> alter age drop default; #添加default mysql> alter table tb6 -> modify age int default 20; mysql> desc tb6; #(2) mysql> alter table tb6 -> alter age set default 21;
  • 相关阅读:
    C# 控制台程序如何输出Messagebox
    C# VS如何整个项目中查找字符串
    C# .NET using ManagementObjectSearcher提示缺少引用怎么办
    [React] Write a Custom State Hook in React
    [GCP] Goolge compute Engine
    [Kubernetes] Defining a Pod with YAML
    [Kubernetes] Kubectl and Pod
    [Schematics] 1. Copy and Manipulate Template
    [Schematics] 0. Schematics "Hello World"
    [RxJS] Subject asObservable() method
  • 原文地址:https://www.cnblogs.com/fangfang31140519/p/8887008.html
Copyright © 2011-2022 走看看