mysql修改表结构 python_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 nullunique 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);

ERROR1062 (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 intprimary key,-> name varchar(20) not null

->);

mysql> insert into tb3 value(1,'张三');

mysql> insert into tb3 value(1,'张三');

ERROR1062 (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 intprimary 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 * fromtb6;

#删除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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值