1. 表结构操作
2. 非空约束
3. 唯一约束
4. 主键约束
5. 自增长
6. 默认约束

表结构操作 ( 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

版权声明:本文为woaixuexi9999原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/woaixuexi9999/p/9220819.html