查看:
选择单个表->【右键】->【Table Inspector】
再选择Columns选项卡即可,把表格拉倒最后一列。
编辑:
选择单个表->【右键】->【Alter Table】
create procedure test()#申明存储过程
BEGIN #存储过程开始
declare idtemp int(11); #申明ID变量
declare mysort int(11) default 1; #申明排序变量,并初始化1
declare done boolean DEFAULT true; #申明循环变量
#查询ID,并将news_detail_id设置到游标变量中
DECLARE programName VARCHAR(100);
DECLARE programName2 VARCHAR(100);
declare cur CURSOR for select id from t_program ;open cur; #打开游标
while done do #开始循环
fetch cur into idtemp; #获取当前循环中的游标的news_detail_id值并加入到变量ID中
set programName=(SELECT name from t_program where id=idtemp)+mysort;
set programName2= CONCAT("test",programName);
#更新语句
update t_program set name=programName2 where id=idtemp;
set mysort=mysort+1; #将排序的变量加1
end while; #结束循环
close cur; #关闭游标
END; #存储过程结束call test(); #调用存储过程
drop procedure test ; #删除存储过程
我们在修改表字段类型和约束条件的时候,如果表中的字段已经有值了,但是你修改的这个类型和字段里边的值不匹配是不允许修改的,就比如说你当初设置字段的时候,字段的值是允许存空值,并且字段里边已经存储空值了,但是你后来又要修改这个字段不能存空值,那就会发生冲突,是不允许修改的,还有一个需要注意的是,需要修改的地方写新的,不需要修改的地方要原样的给抄下来,如果不原样抄下来那就恢复到系统给的默认配置
我现在要修改下图表里的年龄字段类型为int类型,并且约束条件是不允许为空
查看表结构
mysql> desc tab15;
修改字段类型和约束条件
mysql> alter table tab15
-> modify
-> 年龄 int(4) unsigned not null; //unsigned不需要修改的要原样抄下来
Query OK, 0 rows affected (0.01 sec)
查看表结构
mysql> desc tab15;
那我们在来做一个错误的示范,我现在给这个表里边允许为空的字段赋个空值,然后我在修改它不允许为空,我们看看效果
赋值的时候不允许为空的字段要赋值
mysql> insert into tab15 values(null,"haha","女",18,null,null);
Query OK, 1 row affected (0.00 sec)
查看表记录
mysql> select * from tab15;
接下来我要修改一下编号字段不允许为空,看看能修改成功吗
mysql> alter table tab15
-> modify
-> 编号 int(3) not null;
ERROR 1138 (22004): Invalid use of NULL value
解释:无效的空值,这字段里边已经有空值了,但是你又要修改这个字段的值不能为空,这就是冲突了,是不允许修改的
还有一个注意事项,修改字段类型和约束条件的时候,修改的写新的,不改的要原样的抄下来,就比如那个年龄字段我当初设置的时候是不能存负数,也不能赋空值,那现在如果我在想修改类型的时候,没有把约束的条件抄下来,那它就恢复到系统的默认配置,
mysql> alter table tab15
-> modify
-> 年龄 tinyint(4); //只修改了字段类型,原有的约束条件我没有抄下来
Query OK, 1 row affected (0.02 sec)
那我们在看看表结构
mysql> desc tab15;
字段原有的设置没有抄下来将会恢复到系统默认的配置
我们在修改表字段的时候,还可以调整字段的位置,比如说现在我想把职业字段调到编号字段的下边
mysql> alter table tab15
-> modify
-> 职业 varchar(50) after 编号;
Query OK, 0 rows affected (0.04 sec)
解释:只想调整位置也是把原先的类型都原样抄下来,然后指定放在那个字段的后边就可以了
查看表结构
mysql> desc tab15;
如果你觉得哪个字段的位置不合理,那你就可以通过这样的方法去调整位置,想调到第一个字段那就用first(第一),想调到某一个字段的下边,那就用after(后)
- 修改字段名
基本语法
ALTER TABLE 表名
CHANGE 原字段名 新字段名 类型(宽度) 约束条件;
修改字段名字的时候,字段里边的值是不受影响的,但是也有几个注意事项,需要改变的写新的,不需要改变的就原样抄下来,不然它也会恢复到默认配置,修改字段名时也可以顺便修改字段的类型和约束条件,但如果修改的类型与约束条件与字段里边的值发生冲突时也是不允许修改
我现在要把这个表的职业字段的名字修改一下,修改成家庭地址
修改字段名
mysql> alter table tab15
-> change 职业 家庭地址 varchar(50) after 年龄; //顺便调整到年龄字段后边
Query OK, 0 rows affected (0.06 sec)
查看表结构
mysql> desc tab15;
修改字段名的时候,可以修改字段的类型,也可以设置约束条件,但是不要和原有字段里边的值发生冲突
- 删除字段名
基本语法
ALTER TABLE 表名
DROP 字段名
删除表字段的时候,如果表字段里边有值的话,那值也就没了
删除表里的电话字段
mysql> alter table tab15
-> drop 电话;
Query OK, 0 rows affected (0.06 sec)
查看表结构
mysql> desc tab15;
要是想同时删除多个字段的话,用逗号分隔
mysql> alter table tab15
-> drop 年龄, //字段之间用逗号分隔
-> drop 家庭地址;
Query OK, 0 rows affected (0.05 sec)
查看表结构
mysql> desc tab15;
- 修改表名
基本语法
ALTER TABLE 表名
RENAME 新表名; //用的关键字是rename
修改tab15表的名字为haha
mysql> alter table tab15
-> rename haha;
Query OK, 0 rows affected (0.00 sec)
查看表
mysql> show tables;
查看表结构
mysql> desc haha;
查看:
选择单个表->【右键】->【Table Inspector】
再选择Columns选项卡即可,把表格拉倒最后一列。
编辑:
选择单个表->【右键】->【Alter Table】
转载于:https://www.cnblogs.com/EasonJim/p/7525825.html
如题,怎样修改表中某字段的字符串的值,如我表中有数据如下:
很明显在内容中有个时间是不对的,我想把时间修改成具体的另一张表的某字段的到期时间。
这里用到mysql的两个函数,replace()和substring()(具体语法,参考这篇博客)。
具体思路就是:先用substring把要替换的内容截取出来,然后再用replace函数替换成自己想要的内容
分析一下,我的信息除了时间,其他的内容是一样的。这样的话,我们可以通过substring把时间截取出来,由于不知道要替换的文本下标是多少,这里我用java来获取,如下:
public class demo { public static void main(String[] args) { String s = "您购买的365家长课堂VIP会员已经即将到期(1970-01-18 17:20:21 到期),如想继续免费观看所有微课"; String s1 = "您购买的365家长课堂VIP会员已经即将到期("; String s2 = "您购买的365家长课堂VIP会员已经即将到期(1970-01-18 17:20:21"; System.out.println("总长度" +s.length()); System.out.println("开始下标:" + s1.length()); System.out.println("结束下标:" + s2.length()); String ss = s.substring(23, 42); System.out.println(ss); System.out.println("截图到的内容长度:" + ss.length()); } }
输出的结果是:
根据结果,我们就可以来截取和替换了。下面是mysql的写法:
SELECT a.content ,replace(a.content,substring(a.content,24,19), '这里是你想替换的内容') new_content FROM tableA a
ps:mysql里的substring(content,start,len)和java中的substring(content,start,end)这两个函数中的最后一个参数是不同的,mysql的是要截取的字符串长度,而java的是结束下标,所以上面substring(a.content,24,19)为什么是19而不是java代码中的42就是这个原因。
我这里修改的是内容是我从另一张表查过来的字段,修改完后的效果如下图(update的sql就不贴出来了):
批量修改完毕。
总结:
批量修改的内容除了要修改的部分,其他的部分要一样;
在获取要截取内容的开始下标和内容长度,可借助自己熟悉的语言的字符串截取方法获得;
最后使用replace函数进行内容替换。