精华内容
下载资源
问答
  • MySQL 查看数据库表结构 修改表结构 修改字段 修改约束条件 修改表名 删除数据库表 查看数据库表结构 可以使用 describe 语句来查看数据表结构,代码如下: describe users; 在控制台中输入上述语句后的执行...

    MySQL 查看数据库表结构 修改表结构 修改字段 修改约束条件 修改表名 删除数据库表

    查看数据库表结构

    • 可以使用 describe 语句来查看数据表结构,代码如下:

      describe users;
      
    • 在控制台中输入上述语句后的执行结果如下所示:

      在这里插入图片描述

    修改表结构

    • 在实际应用中,当发现某个表的结构不满足要求时,可以使用 alter table 语句来修改表的结构,包括修改表的名称、添加新的字段、删除原有的字段、修改字段类型、索引及约束,还可以修改存储引擎及字符集等。修改表的语法格式如下:

      alter table 表名 action[,action]...;
      
    • 其中,每个动作(action)是对表所做的修改,MySQL 支持一条 alter table 语句带多个动作,中间用逗号隔开。下面详细介绍一下几种常用的修改

    • 1、修改字段

      • (1)添加新字段

        • 向表里添加新字段可以通过在 action 语句中使用 add 关键字来实现,语法格式如下:

          alter table 表名 add 新字段名 数据类型 [约束条件][first|after 字段名];
          
        • 向表中添加新字段时通常需要指定新字段在表中的位置,如果没有指定 first 或者 after 关键字,则在表的末尾添加新字段,否则在指定位置添加新字段

        • 例如,为用户表 users 添加一个 address 字段,数据类型为 varchar(50),非空约束,可以使用如下的 SQL 语句:

          alter table users add address varchar(50) not null;
          
        • 若要在 users 表中的 sex 字段后增加一个 phone 字段,数据类型为 varchar(20),非空约束,则对应的 SQL 语句如下:

          alter table users add phone varchar(20) not null after sex;
          
        • 添加字段后的 users 表的结构如下图所示

          在这里插入图片描述

      • (2)修改字段

        • 如果只需要修改字段的数据类型,则使用 change 或者 modify 子句,其语法如下:

          alter table 表名 change 原字段名 新字段名 数据类型;
          alter table 表名 modify 字段名 数据类型;
          
        • 例如,要修改 users 表中的 phone 字段,将数据类型由 varchar(20) 改为 int,并设置默认值为 0,下面两种方法是等价的:

          alter table users change phone phone int unsigned default 0;
          alter tablr users modify phone int unsigned default 0;
          
        • 如果需要修改字段的字段名(以及数据类型)这时就只能使用 change 子句了。例如,将 users 表中的 phone 字段修改为 telephone 字段,且数据类型修改为 varchar(20),则可以使用如下 SQL 语句:

          alter table users change phone telephone varchar(20);
          
      • (3)删除字段

        • 删除表字段的语法格式如下:

          alter table 表名 drop 字段名;
          
        • 例如,将 users 表中的 address 字段删除,则可以使用如下 SQL 语句:

          alter table users drop address;
          
    • 2、修改约束条件

      • (1)添加约束条件

        • 向表的某个字段添加约束条件的语法格式如下:

          alter table 表名 add constraint 约束名 约束类型(字段名);
          
        • 例如,向用户表 users 的 telephone 添加唯一性约束,且约束名为 phone_unique,可以使用如下 SQL 语句:

          alter table users add constraint phone_unique unique(telephone);
          
        • 添加了上述约束条件后,users 表的结构如下所示:

          在这里插入图片描述

        • 如果要向订单表 orders 的 uid 字段添加外键约束,且约束名为 fk_orders_users,可以使用如下 SQL 语句:

          alter table users add constraint fk_orders_users foreign key(uid) references users(uid);
          
      • (2)删除约束条件

        • 若要删除表的主键约束,其语法格式如下:

          alter table 表名 drop primary key;
          
        • 例如,要删除订单表 orders 的主键约束,可以使用如下 SQL 语句:

          alter table orders drop primary key;
          
        • 若要删除表的外键约束,其语法格式如下:

          alter table 表名 drop foreign key 外键约束名;
          
        • 例如,要删除订单表 orders 的外键约束,可以使用如下 SQL 语句:

          alter table drop foreign key fk_orders_users;
          
        • 若要删除字段的唯一性约束,则只需要删除该字段的唯一性索引即可,其语法格式如下:

          alter table 表名 drop index 唯一索引名;
          
        • 例如,要删除用户表 users 的 telephone 字段的唯一性索引,可以使用如下 SQL 语句:

          alter table users drop index phone_unique;
          
    • 3、修改表名

      • 修改表名的语法格式如下:

        alter table 原表名 rename to 新表名;
        
      • 还可以使用 rename table 语句,其语法格式如下:

        rename table 原表名 to 新表名;
        
      • 例如,将 users 表的表名修改为 tbl_users,可以使用以下代码:

        alter table users rename to tbl_users;
        rename table users to tbl_users;
        
    • 4、修改表的其他设置

      • 修改表的其他设置,常用的操作如修改存储引擎、默认字符集等。例如,修改 users 表的存储引擎和默认字符集:

        alter table users engine=MyISAM;
        alter table users default charset=utf8;
        

    删除数据库表

    • 要删除数据库表,可以使用 drop table 语句实现,例如删除 users 表:

      drop table users;
      
    • 在默认情况下,当试图删除一个不存在的表时,系统会报错。例如,以下的情况(orders 表不存在):

      drop table orders;
      
    • 系统会出现 Unknown table “orders” 的错误信息,为避免这种错误,可以使用如下语句:

      drop table if exists orders;
      
    展开全文
  • MySQL字段约束

    2019-07-28 11:56:23
    MySQL字段约束 MySQL支持的约束包括主键(primary key)约束、非空约束(not NULL)、检查约束(check)、默认值约束(default)、唯一性(unique)约束以及外键约束。 1.设置主键约束 (1)如果一个表的主键是单个字段,直接在...
    MySQL字段约束

    MySQL支持的约束包括主键(primary key)约束、非空约束(not NULL)、检查约束(check)、默认值约束(default)、唯一性(unique)约束以及外键约束。

    1.设置主键约束

    (1)如果一个表的主键是单个字段,直接在该字段的后面加上"primary key"关键字,即可将该字段设置为主键约束。

    mysql> create table student(student_no char(11) primary key);
    Query OK, 0 rows affected (0.00 sec)
    mysql> desc student;
    +------------+----------+------+-----+---------+-------+
    | Field      | Type     | Null | Key | Default | Extra |
    +------------+----------+------+-----+---------+-------+
    | student_no | char(11) | NO   | PRI | NULL    |       |
    +------------+----------+------+-----+---------+-------+
    1 row in set (0.03 sec)
    

    (2)如果一个表的主键是多个组合字段:primary key (字段1,字段2)

    mysql> create table time(t1 datetime ,t2 timestamp,primary key(t1,t2));
    Query OK, 0 rows affected (0.02 sec)
    mysql> desc time;
    +-------+-----------+------+-----+---------------------+-----------------------------+
    | Field | Type      | Null | Key | Default             | Extra                       |
    +-------+-----------+------+-----+---------------------+-----------------------------+
    | t1    | datetime  | NO   | PRI | 0000-00-00 00:00:00 |                             |
    | t2    | timestamp | NO   | PRI | CURRENT_TIMESTAMP   | on update CURRENT_TIMESTAMP |
    +-------+-----------+------+-----+---------------------+-----------------------------+
    2 rows in set (0.00 sec)
    
    ===================查看索引信息======================
    mysql> show index from time\G
    *************************** 1. row ***************************
            Table: time
       Non_unique: 0
         Key_name: PRIMARY
     Seq_in_index: 1
      Column_name: t1
        Collation: A
      Cardinality: 0
         Sub_part: NULL
           Packed: NULL
             Null: 
       Index_type: BTREE
          Comment: 
    Index_comment: 
    *************************** 2. row ***************************
            Table: time
       Non_unique: 0
         Key_name: PRIMARY
     Seq_in_index: 2
      Column_name: t2
        Collation: A
      Cardinality: 0
         Sub_part: NULL
           Packed: NULL
             Null: 
       Index_type: BTREE
          Comment: 
    Index_comment: 
    2 rows in set (0.00 sec)
    
    字段名 说明
    Table 表的名称
    Non_unique 0表示索引中不能包含重复值(主键和唯一索引时该值为0).
    1表示索引中可以包含重复值
    Key_name 索引的名称
    Seq_in_index 索引中的字段序列号,1表示该字段是第一关键字,2表示该字段是第二关键字
    Column_name 哪个字段名被编入索引
    Collation 关键字是否排序,A表示排序,NULL表示不排序。若Index_comment值为BTREE
    该值总为A;若为全文索引,该值为NULL
    Cardinality 关键字值的离散程度,该值越大,越离散
    Sub_part 如果整个字段值被编入索引,则为NULL,如果字段的某个部分被编入索引,则值
    为被编入索引的字符个数。
    Packed 索引的关键字是否被压缩。没有压缩则为NULL。
    Null 如果字段可以为NULL,则为YES,否则为NO。
    Index_type 索引的数据结构(BTREE,FULLTEXT,HASH,BTREE)
    Comment 注释

    2、非空约束

    设置非空约束的字段,字段值不能为NULL值

    字段名 数据类型 not null

    mysql> create table st(student_name char(20) not null);
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> desc st
        -> ;
    +--------------+----------+------+-----+---------+-------+
    | Field        | Type     | Null | Key | Default | Extra |
    +--------------+----------+------+-----+---------+-------+
    | student_name | char(20) | NO   |     | NULL    |       |
    +--------------+----------+------+-----+---------+-------+
    1 row in set (0.00 sec)
    

    3、设置默认约束

    设置某个字段的默认值 字段名 数据类型[其他约束条件] detault 默认值

    mysql> create table st2(stu_no int default 60);
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> insert into st2 values();
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from st2;
    +--------+
    | stu_no |
    +--------+
    |     60 |
    +--------+
    1 row in set (0.00 sec)
    

    4、设置唯一性约束

    若某个字段的值是唯一的不允许重复,则可以添加此约束限制。

    字段名 数据类型 unique

    mysql> create table st3(stu_no int unique);
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> desc st3;
    +--------+---------+------+-----+---------+-------+
    | Field  | Type    | Null | Key | Default | Extra |
    +--------+---------+------+-----+---------+-------+
    | stu_no | int(11) | YES  | UNI | NULL    |       |
    +--------+---------+------+-----+---------+-------+
    1 row in set (0.00 sec)
    
    

    5、外键约束

    外键约束主要用于定义表和表的关系。表A外键字段的取值,要么是NULL,要么是来自B主键字段的取值(此时将表A称为表B的字表,表B称为表A的父表)。

    在表A中设置外键的语法规则如下。

    constraint 约束名 foreign key (表A字段名) references 表B(字段名) [on delete级联选项] [on update级联选项]
    级联选项有4种取值,其意义如下。
    (1)cascade:父表记录的删除(delete)或者修改(update)操作,会自动删除或修改子表中与之对应的记录。
    (2)set null:父表记录的删除(delete)或者修改(update)操作,会将子表中与之对应记录的外键值自动设置为null值。
    (3)no action:父表记录的删除(delete)或者修改(update)操作,如果子表存在与之对应的记录,那么删除或修改操作将失败。
    (4)restrict:与no action功能相同,且为级联选项的默认值。
    mysql> create table st(stu_no  int primary key not null);
    Query OK, 0 rows affected (0.01 sec)
    
    
    mysql> create table st2(stu_no int,constraint stu_no_fk foreign key (stu_no) references st(stu_no));
    Query OK, 0 rows affected (0.04 sec)
    
    mysql> show index from st2\G
    *************************** 1. row ***************************
            Table: st2
       Non_unique: 1
         Key_name: stu_no_fk
     Seq_in_index: 1
      Column_name: stu_no
        Collation: A
      Cardinality: 0
         Sub_part: NULL
           Packed: NULL
             Null: YES
       Index_type: BTREE
          Comment: 
    Index_comment: 
    1 row in set (0.00 sec)
    
    展开全文
  • 1.增加字段: alter table tablename add new_field_id type not null default '0'; 例: alter table mmanapp_mmanmedia add appid_id integer not null default 372; 增加主键: altertable tabelname ...

    1.增加字段:
    alter table tablename add new_field_id type not null default '0';
    例:
    alter table mmanapp_mmanmedia add appid_id integer not null default 372;

    增加主键:

    altertable tabelname add new_field_idtype default0 not null auto_increment ,add primarykey (new_field_id);
    增加外键:

    在已经存在的字段上增加外键约束

    ALTER TABLE yourtablename ADD [CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]

    2.删除字段:

    alter table tablename drop column colname;
    例:
    alter table mmanapp_mmanmedia drop column appid_id;

    3.修改字段名:

    alter table tablename change old_field_name new_field_name old_type;

    4.修改字段类型:

    alter table tablename change filed_name filed_name new_type;

     

    修改类型并改为自增

    ALTER TABLE tablename CHANGE COLUMN id id bigint NOT NULL AUTO_INCREMENT ;

     

    修改表自增起始ID

    alter table test auto_increment=2;

     

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,487
精华内容 16,994
关键字:

mysql修改字段约束条件

mysql 订阅