mysql】【Python基础】mysql如何增加字段

2020-11-25 09:49发布

9条回答
嘿呦嘿呦拔萝卜
2楼 · 2020-12-01 17:53

在已有数据库中的表添加字段:

1、通用式:

alter table [表名] add [字段名] 字段属性 default 缺省值 default 是可选参数

2、增加字段:

alter table [表名] add 字段名 smallint default 0 增加数字字段,整型,缺省值为0

alter table [表名] add 字段名 int default 0 增加数字字段,长整型,缺省值为0

alter table [表名] add 字段名 single default 0 增加数字字段,单精度型,缺省值为0

alter table [表名] add 字段名 double default 0 增加数字字段,双精度型,缺省值为0

alter table [表名] add 字段名 Tinyint default 0 增加数字字段,字节型,缺省值为0


1234
3楼 · 2020-11-25 11:21

BEGIN

#Routine body goes here...

DECLARE tName VARCHAR (64) ;

  DECLARE done INT DEFAULT FALSE ;

  DECLARE cur CURSOR FOR 

  SELECT 

    table_name 

  FROM

    information_schema.tables 

  WHERE table_schema = dateName and table_name like 'test%' ;

  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE ;

  OPEN cur ;

  posLoop :

  LOOP

    FETCH cur INTO tName ;

    IF done 

    THEN LEAVE posLoop ;#

    END IF;

#判断表中是否有这个字段

IF (SELECT count(1) FROM information_schema.COLUMNS

WHERE

COLUMN_NAME = 'is_del'

AND TABLE_NAME = tName)<=0 then

#执行语句同上CONCAT来拼接动态参数(注意拼接过程中的空格,引号等)

SET @_sqlStr=CONCAT('ALTER TABLE ',tName ," ADD COLUMN `is_del` varchar(8) NOT NULL DEFAULT '10010002' COMMENT '是否删除:10010001是,10010002否';");

#ALTER TABLE test ADD COLUMN `is_del`  varchar(8) NOT NULL DEFAULT '10010002' COMMENT '是否删除:10010001是,10010002否;'

# 预定义sql   预定义拼接好的sql语句

PREPARE stmt FROM @_sqlStr ;

# 执行sql

EXECUTE stmt ;

# 释放连接

DEALLOCATE PREPARE stmt ;

END if;

  END LOOP posLoop ;

  CLOSE cur ;

END


aijingda
4楼 · 2020-11-25 11:29

前言

增加字段相信大家应该都不陌生,随手就可以写出来,给 MySQL 一张表加字段执行如下 sql 就可以了:

1
ALTER TABLE tbl_tpl ADD title(255) DEFAULT '' COMMENT '标题' AFTER id;

但是线上的一张表如果数据量很大呢,执行加字段操作就会锁表,这个过程可能需要很长时间甚至导致服务崩溃,那么这样操作就很有风险了。

那么,给 MySQL 大表加字段的思路如下:

① 创建一个临时的新表,首先复制旧表的结构(包含索引)

1
create table new_table like old_table;

② 给新表加上新增的字段

③ 把旧表的数据复制过来

1
insert into new_table(filed1,filed2…) select filed1,filed2,… from old_table

④ 删除旧表,重命名新表的名字为旧表的名字

不过这里需要注意,执行第三步的时候,可能这个过程也需要时间,这个时候有新的数据进来,所以原来的表如果有字段记录了数据的写入时间就最好了,可以找到执行这一步操作之后的数据,并重复导入到新表,直到数据差异很小。不过还是会可能损失极少量的数据。

所以,如果表的数据特别大,同时又要保证数据完整,最好停机操作。

另外的方法:

1.在从库进行加字段操作,然后主从切换

2.使用第三方在线改字段的工具

一般情况下,十几万的数据量,可以直接进行加字段操作。


以上就是关于在MySQL大表中加字段的实现思路,希望本文的内容对各位的学习或者工作能带来一定的帮助哈。

是开心果呀 - 热爱生活
5楼 · 2020-11-25 11:42

点击左下角开始菜单按钮

在开始菜单下方搜索框中搜索cmd

敲下回车键,打开cmd窗口

输入mysql -u root -p命令,然后回车

提示输入密码,输入正确的密码,进入mysql命令行

切换到指定数据库,查明数据库表,然后对指定表进行修改

命令格式为

ALTER TABLE

ADD [COLUMN] [FIRST|AFTER

];

如下图所示为user表添加account字段




小优
6楼 · 2020-11-25 19:42

1. 能不加字段就不要加,能不修改字段就不要修改, 能不删除字段就不要删除, 等等为什么要删除字段呢? 如果没事,不要蛋疼的找事。 实际上,我们那次更新失败后, 我们并没有增加那个字段, 然后我们一直运行到今天, 但是后来还是增加了其他字段

2. 增加字段的情况下, 如果可以通过增加一个新的表来增加这个字段, 那么就增加一个新的表, 通过cache 或 程序来实现join 的效果

3. 如果能停机, 并且停机的时间在你容忍范围之内, 数据备份之后停机来做。 如果是主从备份,做这样大的操作的时候,停掉主从备份, 万一你挂了, 备份数据库察丛可以救你。 等到一切安全了, 重启主从备份;

4. 如果上面都不行, 这个字段还是要改,要加, 需要用到下面的方法, 也是扇贝网正在使用的方法;

修改大数据表的方法:

1. 被修改的表 Table A 需要有一个记录时间戳的字段, 这个时间戳就是每次数据更新,都会更新的字段, 这个字段需要有索引,在django里可以使用 auto_now=True

2. 创建一个新的临时表 Table B, 不是tmp_table, 是一个新的表,但是是临时使用的。 这个表和要修改的表拥有一模一样的数据结构, 加上你要修改的部分, 比如增加的字段;

3. 记录下Table A 的索引

4. 删除 Table B 的全部索引

5. 把Table A 的数据全部复败判樱制到Table B, 是不是执行 INSERT INTO B(field1, field2) SELECT field1, field2 FROM A? 当然不是, 这么做不还是锁死了Table A 么, 这里的迁移就是一个需要细分的地方,需要写一个脚本, 让程序每次读取比如5000条数据出来, 插入到Table B里面, 因为Table B 是没有索引的, 所以要当心不要使用多进程来做; 如果是多进程, 要确保插入到B的时候是不会有重复数据的; 如果是1000万的数据,每次5000条, 假设这个操作需要500ms, 那么 2000*200ms = 16 分钟。 这只是一个估值, 具体情况和服务器当时的情况有关, 不好细说。 另外, 我们要记录这个迁移开始的时间点,记为t1;

6. 那么这个时候Table A 的数据是不是都进入了Table B 呢, 应当说差不多大部分都进入了, 但5中说, 这大概需要16分钟, 这么长的时间里, 可能有新的数据进入了, 也有可能已有的数据发生了更新, 所以我们要把Table A 中在t1 之后发生变化的数据查找出来, 然后更新到Table B 中, 我们的做法是:

记录这个操作对应的时间点 t2

BEGIN;

DELETE FROM B WHERE updated_time > t1;

INSERT INTO B(field1, field2) SELECT field1, field2 FROM A WHERE updated_time >t1;

COMMIT;

7. 现在A 和 B 差不多该同步了吧? 差不多了, 但是6 执行完之后, A仍然在写, 子子孙孙无穷尽也 ... , 但这个时候 A 和冲姿 B 的差异已经非常非常小了, 所以在下一步,我们在一个transaction 里执行下面的操作:

BEGIN;

DELETE FROM B WHERE updated_time > t2;

INSERT INTO B(field1, field2) SELECT field1, field2 FROM A WHERE updated_time >t2;

ALTER TABLE A RENAME TO C;

ALTER TABLE B RENAME TO A;

COMMIT;

8. Done

PS: 如果A表没有时间戳, 实际上没有先见之明的人大概不会想到要预留一个时间戳的字段, 那么几乎是没有办法快速比较两个表的差异的, 这个时候我选择的做法就是放弃修改的数据, 只管新的数据了, 所以只要把t1, t2 换成id 就可以了, 这样delete 语句也省略了, 因为没啥好delete的;

千万不要想着根据ID 来JOIN 然后更新B表的字段来补齐新的数据, 如果能把两个千万级别的表JOIN起来, 内存有多大呢?

9. 上面的解决方案是我们第二次尝试之后犯下了一个巨大的错误,这个错误导致网站瘫痪了大概20分钟, 如果你和我一样没有发现问题,那么这就是悲剧的地方。 问题就在于我是根据上面的PS来操作的, 然后B就华丽地变成了A. B 表至今身上是没有索引的, 立即悲剧。 所以应当在第5步之后按照A的索引为B建立索引, 待索引全部好了之后, 再继续6。 如果不是走PS这条路, 而是有时间戳的字段的话, 在6的时候会发现这个问题, 因为那条Delete 慢的超出想像, 会明白这里是有问题的

10. 新手, 请在本地练习之后, 再实际操作; 可以多操作几次, 写一个脚本,服务器上直接执行脚本.


小猪仔
7楼 · 2020-11-26 09:58

使用ALTER TABLE命令来向一个表添加字段,示例如下:

-- 向t_user表添加user_age字段ALTER TABLE t_user ADD COLUMN user_age int(11) DEFAULT NULL COMMENT '年龄' AFTER user_email;

命令解释:

t_user:表名

user_age:添加的字段名称

int(11):字段类型和长度

DEFAULT NULL:默认为NULL

'年龄':字段含义

AFTER user_email:在user_email字段之后添加user_age字段


我是大脸猫
8楼 · 2020-11-27 21:44

MySQL添加字段和删除字段

alter add命令用来增加表的字段。


alter add命令格式:alter table 表名 add字段 类型 其他;


例如,在表MyClass中添加了一个字段passtest,类型为int(4),默认值为0:

   mysql> alter table MyClass add passtest int(4) default '0';


1) 加索引

   mysql> alter table 表名 add index 索引名 (字段名1[,字段名2 …]);


例子: mysql> alter table employee add index emp_name (name);


2) 加主关键字的索引

    mysql> alter table 表名 add primary key (字段名);


例子: mysql> alter table employee add primary key(id);


3) 加唯一限制条件的索引

   mysql> alter table 表名 add unique 索引名 (字段名);


例子: mysql> alter table employee add unique emp_name2(cardnumber);


4) 删除某个索引

   mysql> alter table 表名 drop index 索引名;


例子: mysql>alter table employee drop index emp_name;


5) 增加字段

    mysql> ALTER TABLE table_name ADD field_name field_type;


6) 修改原字段名称及类型

    mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;


7) 删除字段

    MySQL ALTER TABLE table_name DROP field_name;


我的网名不再改
9楼 · 2020-11-29 19:11

1添加表字段

alter table table1 add transactor varchar(10) not Null;

alter table   table1 add id int unsigned not Null auto_increment primary key


相关问题推荐

  • 回答 5

    MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL的版本:针对不同的用户,MySQL分为两种不同的版本:MySQL Community Server社区版本,免费,但是Mysql不提供...

  • mysql安装步骤mysql 2022-05-07 18:01
    回答 2

    mysql安装需要先使用yum安装mysql数据库的软件包 ;然后启动数据库服务并运行mysql_secure_installation去除安全隐患,最后登录数据库,便可完成安装

  • 回答 5

    1.查看所有数据库showdatabases;2.查看当前使用的数据库selectdatabase();3.查看数据库使用端口showvariableslike&#39;port&#39;;4.查看数据库编码showvariableslike‘%char%’;character_set_client 为客户端编码方式; character_set_connection 为建立连接...

  • 回答 5

    CREATE TABLE IF NOT EXISTS `runoob_tbl`(    `runoob_id` INT UNSIGNED AUTO_INCREMENT,    `runoob_title` VARCHAR(100) NOT NULL,    `runoob_author` VARCHAR(40) NOT NULL,    `submission_date` DATE,    PRI...

  • 回答 5

    在常规里面设置成utf-8

  • 回答 10

    首先是我们将鼠标移动到如下图所示的计算机的图标上,点击右键,选择管理。然后我们点击如下图界面中的服务和应用程序。接下来可以看到它下面有一个我们的目标——服务。服务的话它是按字母排列的,我们往下拉,找到Mysql服务。此时可以看到它是一个手动启动...

  • 回答 7

    有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件包尚未被创建或是它们已被从新到(Incoming)目录移出。下列信息可能会对解决问题有所帮助:下列软件包有未满足的依赖关...

  • 回答 20

    1. MySQL Community Server 社区版本,开源免费,但不提供官方技术支持。2. MySQL Enterprise Edition 企业版本,需付费,可以试用30天。3. MySQL Cluster 集群版,开源免费。可将几个MySQL Server封装成一个Server。4. MySQL Cluster CGE 高级集群版,需付费...

  • 回答 8

    mysql创建外键要求比较严格,严格到有时候你找不到到底哪里错了。1.检查你的表是不是都是INNodb类型的,只有这种类型才可以创建外键。2.检查字段名是不是有错误。3.检查字段类型,最好一样。4.比较隐蔽,检查字符集,为了迁移和使用的方便,尽量使用UTF85.上...

  • 回答 2

    1、请查看数据库的存储引擎,全文索引只支持MyISAM表。2、mysql默认对全文检索有单词的字符限制:ft_max_word_len 84,ft_min_word_len 43、MYSQL 全文索引是实现不了like  的效果,只能按单词来查询...

  • 回答 3

    这个最大4g应该是和是否是32位系统无关。

  • 回答 9

    第一种叫外连接 处在join前面的表会全部选择出来,你自己去百度下 说不清第二中就是多表连接,进行笛卡尔积运算自己那拿表去实践 你很快就会明白

  • 回答 4

    一定要卸载干净!!! 1. 在控制面板将mysql管理软件卸载掉 2. 删除两个安装文件,如果没有修改安装路径的默认路径如下1)C:\Program Files  有一个mysql安装目录 ,将整个目录删除 2)另外一个安装路径是一个隐藏文件夹下的mysql目录将隐藏的文件显示...

  • 回答 6

    事实上MySQL 能承受的数据量的多少主要和数据表的结构有关,并不是一个固定的数值。表的结构简单,则能承受的数据量相对比结构复杂时大些。据D.V.B 团队以及Cmshelp 团队做CMS 系统评测时的结果来看,MySQL单表大约在2千万条记录(4G)下能够良好运行,经过数...

  • 回答 5

    事实上MySQL 能承受的数据量的多少主要和数据表的结构有关,并不是一个固定的数值。表的结构简单,则能承受的数据量相对比结构复杂时大些。据D.V.B 团队以及Cmshelp 团队做CMS 系统评测时的结果来看,MySQL单表大约在2千万条记录(4G)下能够良好运行,经过数...

  • 回答 6

    mysql哪个版本比较稳定MySQL的选择要取决于用途的,mysql5.5或者5.7 的版本,网上资源较多mysql的版本如下:1. MySQL Community Server 社区版本,开源免费,但不提供官方技术支持。2. MySQL Enterprise Edition 企业版本,需付费,可以试用30天。3. MySQL C...

没有解决我的问题,去提问
向帮助了您的网友说句感谢的话吧!