zoukankan      html  css  js  c++  java
  • 038_MySQL 表的操作

    一,什么是表

      表(TABLE) 是一种结构化的文件,可用来存储某种特定类型的数据。表中的一条记录有对应的标题,标题 称之为 表的字段。

      

    二,创建表

    1,创建表

    create table 表名(
    字段名1 类型[(长度,小数点) 约束条件],
    字段名2 类型[(长度,小数点) 约束条件],
    字段名3 类型[(长度,小数点) 约束条件]
    )engine = innodb default char set utf8;
    

     前两个必填项,中括号内可选;约束条件可是多个,无序

     

    create table student(
    id  int  not null  auto_increment  primary key,
    name  varchar(250)  not null,
    age  int  not null,
    sex  enum('','')   not null  default '',
    salary  double(10,2)  not null
    )engine = innodb  default charset utf8;
    
    
    not null  --表示此字段(此列)不能为空
    auto_increment  --表示自增长,默认每次增长1;
    注意:自增长只能添加在主键或者唯一索引字段上
    primary key  --表示主键(唯一且不为空)
    enum()  --设定选项值, default ''  --设定默认值
    engine = innodb  --表示指定当前表的存储引擎
    
    default charset utf8  --设置表的默认编码集
    或者 char set utf8 
    
    类型定义第一个是存储总长度,第二个是小数点后长度
    double(10,2)  --double类型,总长度10,小数点占两位。
    创建表

     

    2,主键  和  联合主键

      主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。

    --创建有单个主键的表
    create table tb1(
        nid int not null auto_increment primary key,
         num int null
    )
    
    --创建有联合主键的表
    create table tb1(
        nid int not null,
        num int not null,
        primary key(nid,num)
    )
    

      

    自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列)
                create table tb1(
                    nid int not null auto_increment primary key,
                    num int null
                )
                或
                create table tb1(
                    nid int not null auto_increment,
                    num int null,
                    index(nid)
                )
    注意:1、对于自增列,必须是索引(含主键)。
             2、对于自增可以设置步长和起始值
         show session variables like 'auto_inc%';
         set session auto_increment_increment=2;
         set session auto_increment_offset=10;
    
          show global  variables like 'auto_inc%';
          set global auto_increment_increment=2;
          set global auto_increment_offset=10;
    自增

     

    三,查询表数据

    #查询表数据
    select 字段(多个以","间隔) from 表名;
    例:  select name,sex from student;
    或者: select * from student;
      
    #查看表结构
    desc 表名;
    例: desc student;
    
    #查看创建表信息
    show create table student; 
    

    四,修改表结构

    #添加表字段
    alter table 表名 add 字段名 类型 约束;
    例如: alter table student add age int not null default 0 after name;
    ps: after name 表示在name字段后添加字段 age. 
     
    #修改表字段
    方式一: alter table student modify 字段 varchar(100) null;
    方式二: alter table student change 旧字段 新字段 int not null default 0;
    ps:二者区别:
    change 可以改变字段名字和属性
    modify只能改变字段的属性
       
    #删除表字段 :
    alter table student drop 字段名;
     
    #更新表名称:
    rename table 旧表名 to 新表名;
    修改表字段
    #添加主键 : 
    alter table student add primary key(字段,"多个","间隔");
     
    #移除主键 : 
    alter table student drop primary key;
    
    ps:如果主键为自增长,以上方式则不被允许执行,请先去掉主键自增长属性,然后再移除主键
    alter table student modify id int not null,drop primary key
    更新主键操作
    #添加外键: 
    alter table 从表 add CONSTRAINT fk_test foreign key 从表(字段) REFERENCES 主表(字段);
    
    #移除外键: 
    alter tabledrop foreign key 外键名称;
    
    ps:如果外键设置后想修改,那么只能是先删除,再添加
    外键更新操作
    #修改默认值 : 
    alter tablealter 字段 set default 100;
    #删除默认值 :
    alter tablealter 字段 drop default;
    默认值更新操作

     

    五,删除表

    #删除表
    drop table 表名;
    
    #清空表
    truncate table 表名; 
    

    六,复制表

    #只复制表结构和表中数据
    CREATE TABLE tb2 SELECT * FROM tb1;
    ps:主键自增/索引/触发器/外键 不会 被复制
      
    #只复制表结构
    create table tb2 like tb1;
    ps: 数据/触发器/外键 不会被复制
    

      

  • 相关阅读:
    一文搞懂 ThreadLocal 原理
    听说用 Lombok 可以早点下班?
    原来 CPU 为程序性能优化做了这么多
    如何优雅地中止线程?
    线程数,射多少更舒适?
    Elasticsearch 之聚合分析入门
    Go语言之旅:基本类型
    Go语言之旅:包
    网络七层协议之数据链路层
    网络七层协议之物理层
  • 原文地址:https://www.cnblogs.com/eternity-twinkle/p/10836330.html
Copyright © 2011-2022 走看看