sql修改字段值的范围

sql修改字段值的范围,第1张

1、字段修改

增加字段

ALTER TABLE <表名>ADD <新字段名><数据类型>[约束条件]

对语法格式的说明如下:

1.<表名>为数据表的名字;

2.<新字段名>为所要添加的字段的名字;

3.<数据类型>为所要添加的字段能存储数据的数据类型;

4.[约束条件] 是可选的,用来对添加的字段进行约束。

SQL 默认在表的最后位置添加新字段,如果希望在开头位置(第一列的前面)添加新字段,那么可以使用 FIRST 关键字,语法格式如下:

ALTER TABLE <表名>ADD <新字段名><数据类型>[约束条件] FIRST

-- 给actor表首位添加create_date字段

ALTER TABLE actor ADD COLUMN create_date datetime not null DEFAULT '2020-10-01 00:00:00' FIRST

复制

删除字段

ALTER TABLE <表名>DROP COLUMN <字段名>

-- 将actor_new表的actor_id字段删除

alter table actor_new drop column actor_id

复制

修改字段

1.修改字段名

ALTER TABLE <表名>RENAME COLUMN A to B

-- 将actor_new表的first_name字段名修改为first_name_new

alter table actor_new rename column first_name to first_name_new

复制

2.修改字段类型

ALTER TABLE <表名> MODIFY COLUMN <字段名><类型>

-- 将last_name字段数据类型由varchar(45)修改为char(45)

alter table actor_new modify column last_name char(45) not null

复制

3.修改字段默认值

ALTER TABLE <表名>ALTER COLUMN <字段名>SET DEFAULT <默认值>

若字段有默认值,则需要先删除字段的约束,在添加新的默认值

根据约束名称删除约束

alter table <表名>alter column <字段名>drop default

-- 若本身存在默认值,则先删除

alter table actor_new alter column last_name drop default

-- 给last_name添加默认值'洛'

alter table actor_new alter column last_name set default '洛'

复制

4.修改字段位置

将字段的位置修改为数据表的开头位置,使用FIRST关键字将当前字段修改为数据表的第一个字段

ALTER TABLE <表名>MODIFY <字段名><数据类型>FIRST

-- 将字段first_name调整到actor表的首位

ALTER TABLE actor modify first_name varchar(45) FIRST

复制

将选中字段修改到某字段之后

ALTER TABLE <表名>MODIFY <字段1名称><字段1数据类型>AFTER <字段2名称>

-- 将字段first_name调整到last_name之后

ALTER TABLE actor MODIFY first_name varchar(45) AFTER last_name

复制

2、数据的修改

增加数据

添加数据在SQL篇-创建数据表中有粗略的介绍,这里进行详细说明

1.插入一条新的数据 INSERT INTO <表名>[(列1,列2,列3,…)]VALUES(值1,值2,值3,…)

-- 插入数据的sql语句

insert into tablename(col1,col2,col3) values (value1,value2,value3)

复制

2.通过子查询插入数据 INSERT INTO <表名>[(列1,列2,列3,…)]子查询

-- 把actor_id=10的用户复制一遍

insert into tablename SELECT * FROM actor WHERE actor_id=10

复制

删除数据

DELETE FROM <表名>[WHERE 删除条件]

注意:不写删除条件表示删除全部!

-- 删除演员编号是6的演员信息

delete from actor WHERE actor_id=6

复制

更新数据

1.指定要更新数据的内容

UPDATE <表名>SET [字段=值,字段=值…][WHERE 更新条件]

-- 将SMITH(雇员编号为7)的工资修改为3000元,并且每个月有500元的奖金

update myemp set sal=3000,comm=500 where empno=7

2.基于子查询的更新

UPDATE <表名>SET (列1,列2,…)=(SELECT 列1,列2,…FROM <表名>) [WHERE 查询条件]

-- 将雇员7369的职位、基本工资、雇佣日期更新为与7839相同的信息

update myemp set (job,sal,hiredate) = (select job,sal,hiredate from myemp where empno=7839) where empno=7369

3.更新替换

-- 将address字段里的 “东” 替换为 “西” ,如下

update test_tb set address=replace(address,'东','西') where id=2

4.插入替换

-- 将id=6的name字段值改为wokou

replace into test_tb VALUES(6,'wokou','新九州岛','日本')

注意:插入替换时,若进行部分替换,则表其余字段要有默认值,否则,要列出该列的所有值

总结:向表中“替换插入”一条数据,如果原表中没有id=6这条数据就作为新数据插入(相当于insert into作用),

如果原表中有id=6这条数据就做替换(相当于update作用),对于没有指定的字段以默认值插入。

比如表名叫test,要给id列施加20-50的约束

create table test

(id int check (id between 20 and 50))

如果test表已存在,但是之前没对id列加约束

alter table test add check (id between 20 and 50)

写insert select语句的时候加一个case when的判断即可。

至于判断的方式有多种

(1)统计一下,然后把count>1的加是,其他则加否,就可以。

(2)遍历的方法也可以,不过这个要用过程来做,稍微繁琐一点。(这种不写casewhen)

(3)分组编号,写最大的号,然后只要这个号不是1,就写是,是1就可否。

当然,还有其他办法,这是比较传统的三种。应该还有其他方法,不过用casewhen的写法应该是可以的。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11784863.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存