数据库里面各种键

超键:能唯一标识各个元组的属性集合称为关系R的超键
候选键:不含多余属性的超键称为候选键
主键:选定了用于标识的候选键称为主键
外键:如果一个关系R1的一个属性子集A是另一个关系R2的主键,但不是R1本身的主键,则称A是关系R1的外键。其中,R1称为参照关系,R2称为被参照关系。
数据库表中新增字段和索引,有多种不同的情况和方法: ### 新增字段 - **基础方法**:适合数据量在十几万的数据表,可直接进行加字段操作。示例如下: ```sql ALTER TABLE tbl_tpl ADD title VARCHAR(255) DEFAULT '' COMMENT '标题' AFTER id; ``` 不过,当线上表数据量很大时,执行此操作会锁表,可能导致执行超时甚至服务崩溃,存在一定风险[^4]。 - **临时表方法**: - 创建一个临时新表,复制旧表的结构(包含索引): ```sql create table new_table like old_table; ``` - 给新表加上新增的字段,由于新表为空表,加字段速度较快。 - 把旧表的数据复制到新表: ```sql insert into new_table(filed1,filed2…) select filed1,filed2,… from old_table ``` - 删除旧表,重命名新表的名字为旧表的名字。但在复制数据时,如果有新数据写入,可能会有数据差异。若原表有记录数据写入时间的字段,可找到操作后的数据并重复导入,直至数据差异很小,但仍可能损失极少量数据。若表数据特别大且要保证数据完整,最好停机操作[^4]。 - **从库加,主从切换**: - 在从库进行加字段操作,然后进行主从切换。 - 使用第三方在线改字段的工具[^4]。 - **建新表法**: - 建新表:复制表A的数据结构,不复制数据。 ```sql create table B like A; ``` - 加字段:表B加上新字段。 - 导数据到新表: - 未新增字段时: ```sql insert into B select * from A [where 条件] ``` - 添加了新字段时,假设添加字段名为data_code(默认值为空),且字段位于id之后: ```sql insert into B select id, '' data_code, 其他旧字段 from A [where 条件] ``` 当数据量达到几千万时,可添加where条件,分批将数据导入新表,防止数据导入超时。 - 改表名:修改表A的名称为A_old,修改B表的表名为A[^5]。 ### 新增索引 - **新建表中添加索引**: ```sql create table table_name ( id int not null primary key, name varchar(20) null, password varchar(20) null, index index_id(id) ); ``` - **已有表中添加索引**: - 创建普通索引: ```sql create index idx_name on table_name(column_name); ``` - 创建唯一索引: ```sql create unique index idx_name on table_name(column_name); ``` - 创建复合索引: ```sql create index idx_composite on table_name(col1, col2, col3); ``` - **以修改表的方式添加索引**,在已有表中添加索引还可以使用这种方式,本质上也是对表结构进行修改来添加索引,和前面的创建索引语句类似,只是从表结构修改的角度来看待。比如在已有表中添加普通索引也可以这样表达,修改表结构添加索引: ```sql ALTER TABLE table_name ADD INDEX idx_name (column_name); ``` 同样可以用类似方式添加唯一索引和复合索引等,只是将`ADD INDEX`换成相应的唯一索引或复合索引的语法规则即可。 ### 删除索引 ```sql drop index index_name on table_name; ``` ### 查看索引 ```sql show index from table_name; ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值