mysql修改、删除表

#对表进行修改和删除都是非常危险的操作!
一、DROP TABLE语句

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [,tbl_name]...[RESTRICT | CASCADE] 

TEMPORARY:用于删除临时表。删除临时表不会结束当前的事务。
IF EXISTS:用于在表不存在时,阻止错误消息的显示
[RESTRICT | CASCADE]:现在什么也不做
当一个表被删除时,所有依赖于该表的对象也被删除,例如约束、索引、视图和权限等
①重命名表:RENAME TABLE tbl_name TO new_tbl_name [,tbl_name2 TO new_tbl_name2] …
#可以使用ALTER TABLE语句替换该语句
二、ALTER TABLE语句
①添加列:ALTER [IGNORE] TABLE tbl_name ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name ]
新列自动成为表中的最后一个列,除非指定了FIRST或AFTER col_name选项。
表中已有的行在新列上自动得到NULL值或默认值。
如果添加新列时指定了NOT NULL约束,则数字列自动得到0,字符串列自动得到空字符串,日期类型自动得到0日期,时间类型自动得到00:00:00
② 删除列:ALTER [IGNORE] TABLE tbl_name DROP [COLUMN] col_name
列值是否有数据都可以删除。依赖于该列的其它数据库对象,如索引、权限也将被删除
– 修改列的数据类型:ALTER [IGNORE] TABLE tbl_name MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]

#例:把town列的宽度从30增加到40     
ALTER TABLE players_copy1 MODIFY town VARCHAR(40) NOT NULL;

减少列宽必须保证原有的值要放得下,否则出错
改变数据类型时,列中的值必须能转变为新的类型

#修改列名:例:把列名birth_date改为date_of_birth
ALTER TABLE players_copy1 CHANGE birth_date date_of_birth DATE;

③修改约束:ALTER [IGNORE] TABLE tbl_name ADD [CONSTRAINT [symbol]] PRIMARY KEY(col_name,...) | ADD [CONSTRAINT [symbol]] UNIQUE (col_name,...) | ADD [CONSTRAINT [symbol]] FOREIGN KEY (col_name,...) References parent_table(col_name)| DROP PRIMARY KEY | DROP FOREIGN KEY fk_symbol | DROP {INDEX|KEY} index_name
④添加外键约束:ALTER TABLE t1 ADD CONSTRAINT fk2 FOREIGN KEY(a) REFERENCES t2(a);

#删除players_small表的主键:
ALTER TABLE players_small DROP PRIMARY KEY;  
#删除外键fk2:
ALTER TABLE t1 DROP FOREIGN KEY FK2;    
#删除唯一性约束:删除对应的索引即可:
ALTER TABLE t2 DROP INDEX c1;

三、约束、索引
①NOT NULL约束:具有非空约束的列不允许有NULL值

CREATE TABLE test_nn(id INTEGER NOT NULL);

②UNIQUE约束:具有唯一性约束的列不允许有重复值。
在创建唯一性约束的时候,如果不给唯一性约束名称,就默认和列名相同,唯一性约束的列可以有多个null值

CREATE TABLE test_uk(id INTEGER UNIQUE);

③PRIMARY KEY:具有主键约束的列不允许有null值,并且不允许有重复值。Primary key = not null + unique
主键:用来唯一的标示表中的每一行。其类型一般为整型或者字符串
每个表最多只允许一个主键。主键名总是PRIMARY。

CREATE TABLE test_pk(id INTEGER PRIMARY KEY);

④FOREIGN KEY:外键约束又叫做参照完整性约束。具有外键约束的列,因为它的值不能随便给,必须满足外键所引用的主键的取值。一张表中可以定义多个外键。外键列默认可以给null值。
按照定义,外键必须引用一个主键或者唯一键。引用的主键一般在另外一张表中,也可以是本表的主键。后一种情况通常称为“自引用”。
父子表的概念:外键所在的表叫做子表,外键所引用的主键所在的表叫做父表。注意,父子表是相对而言的,表a可以是表b的子表,但同时也可以是表c的父表
创建父表:CREATE TABLE dept(deptid INTEGER,dname VARCHAR(20),CONSTRAINT dept_deptid_pk PRIMARY KEY(deptid));
创建子表CREATE TABLE emp(id INTEGER,NAME VARCHAR(20),deptid INTEGER,CONSTRAINT emp_id_pk PRIMARY KEY(id),CONSTRAINT emp_deptid_fk FOREIGN KEY(deptid) REFERENCES dept(deptid)); #关联父表外键
当删除父表中的行时,如果 子表中有依赖于被删除父行的子行存在,那么就不允许删除,并抛出异常(默认对外键使用on delete restrict 或on delete no action选项)
在定义外键约束时,通过使用on delete cascade或者on delete set null选项,可以改变外键的默认删除规则
ON DELETE CASCADE:级联删除。当删除父表中的行时,如果子表中有依赖于被删除父行的子行存在,那么连同子行一起删除
ON DELETE SET NULL:当删除当删除父表中的行时,如果子表中有依赖于被删除父行的子行存在,那么不删除中,而是将子行的外键列设置为null
⑤CHECK约束:MySQL中可以写出CHECK约束,但实际上没有任何作用
⑥普通索引,index

show index from table_name    #查看索引
alter table table_name add index [index_name](column_name)    #添加一个索引
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值