zoukankan      html  css  js  c++  java
  • MySQL数据库基本操作(二)

    表结构操作 ( ALTER TABLE)

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

      

    create table `tb1`(
        `id` int,
          `name` varchar(20)
    );
    
    
    例:
    mysql> ALTER TABLE `tb1`
        -> ADD `age` INT
        -> ;
    Query OK, 0 rows affected (0.03 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    mysql> ALTER TABLE `tb1`
        -> ADD `number` INT FIRST
        -> ;
    Query OK, 0 rows affected (0.03 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> ALTER TABLE `tb1` ADD `aaa` INT after `id`;
    添加多列:
    ALTER TABLE tbl_name ADD [COLUMN]
    (col_name column_definition,...)
    

      

    例:
    mysql> ALTER TABLE `tb1`
        -> add  `aa` INT,
        -> add  `bb` INT,
        -> add  `cc` INT
        -> ;
    Query OK, 0 rows affected (0.02 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    mysql>
    删除数据表中的列
    ALTER TABLE tbl_name DROP [COLUMN] col_name ;
    

      

    #例:
    mysql> ALTER TABLE `tb1`
        -> DROP `aa`
        -> ;
    Query OK, 0 rows affected (0.03 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    mysql> ALTER TABLE `tb1`
        -> DROP `bb`,
        -> DROP `cc`
        -> ;
    Query OK, 0 rows affected (0.03 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    表结构操作的补充:
    ALTER TABLE `tbname`
    增加 :ADD
    删除 :DROP 
    修改 :MODIFY  #改列的数据类型 (属性)
    	  CHANGE  #改列名和数据类型
    	  RENAME  #改表名
    修改列名
    mysql> alter table tb1 change `name` `sex` varchar(20);
    
    修改数据类型
    mysql> alter table tb1 modify `age` varchar(20);
    		
    
    修改表名
    mysql> ALTER TABLE `tb1` RENAME TO `students`;
    Query OK, 0 rows affected (0.40 sec)

    非空约束

    NULL 字段值可以为空

    NOT NULL 字段值不能为空

    例:
    mysql> CREATE TABLE tb1( 
        -> id INT,
        -> name VARCHAR(20) NOT NULL
        -> );
    Query OK, 0 rows affected (0.01 sec)
    
    # 当有非空约束,指定插入,必须加上name。
    mysql> insert into tb1(id) value(1);   # 报错
    
    
    mysql> insert into tb1(id,name) value(1,'佳能');
    Query OK, 1 row affected (0.01 sec)
    
    ## 注意   在mysql 里面,'' 不等于null
    
    
    #手动,添加非空约束 (必须这个字段,没有NULL值)
    mysql> alter table tb1
        -> modify id int not null;
    Query OK, 0 rows affected (0.02 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    
    # 取消非空约束
    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,'张三');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> insert into tb2 value(1,'张三');  # 报错,违反唯一约束
    
        
    #添加唯一约束
    mysql> ALTER TABLE `tb2`
        -> ADD unique key(`name`)
        -> ;
    
    #删除唯一约束
    mysql> desc tb2;
    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,'佳能',1,2);
    mysql> insert into tb2 value(5,'哈哈',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> desc tb3;
    
    
    mysql> insert into tb3 value(1,'张三');
    Query OK, 1 row affected (0.27 sec)
    mysql> insert into tb3 value(1,'张三');
    ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
    
    #删除主键约束
    mysql> alter table tb3
        -> drop primary key;    # 一个表里面,只有一个主键
    mysql> desc tb3;
    
    #添加主键约束
    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> desc tb5;
    
    mysql> insert into tb5(name) values('张三'),('李四');
    mysql> select * from tb5;
    
    #auto_increment值,可以调大
    insert into tb5(id,name) values(110,'王五');
    mysql> select * from tb5;
    #不可以调小
    insert into tb5(id,name) values(108,'王八');
    insert into tb5(name) values('田七');
    mysql> select * from tb5;
    
    
    #删除自动增长
    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;

    作业

    创捷一张 学生表(
    学号 主键
    名字 不为空 唯一
    性别
    年龄 不为空

    1. 删除名字的唯一
    2. 添加性别,不为空、默认为男
    3. 设置年龄 默认为18

  • 相关阅读:
    阿里播放器踩坑记录 进度条重构 video loadByUrl失效解决方案
    liunx 安装nc/netcat centos安装netcat
    jquery实现显示textarea输入字符数
    SQL 时间戳转换为日期
    .Net WebRequest异步请求与WebClient异步请求
    SQL删除多列语句
    jQuery为元素设置css的问题
    关于调试WCF时引发的异常XmlException: Name cannot begin with the '<' character, hexadecimal value 0x3C” on Client Side
    SQL删除指定条件的重复数据,只保留一条
    net.exe use命令的使用
  • 原文地址:https://www.cnblogs.com/woaixuexi9999/p/9220819.html
Copyright © 2011-2022 走看看