--35对于表actor插入如下数据,如果数据已经存在,请忽略(不支持使用replace操作)
actor_id first_name last_name last_update
'3''ED''CHASE''2006-02-15 12:34:33'insertorignoreinto actor
values('3','ED','CHASE','2006-02-15 12:34:33')
视图
--38针对actor表创建视图actor_name_view,只包含first_name以及last_name两列,并对这两列重新命名,first_name为first_name_v,last_name修改为last_name_v:CREATETABLE actor (
actor_id smallint(5)NOTNULLPRIMARYKEY,
first_name varchar(45)NOTNULL,
last_name varchar(45)NOTNULL,
last_update datetimeNOTNULL);createview actor_name_view asselect first_name as first_name_v, last_name last_name_v
from actor;
删除
--42删除emp_no重复的记录,只保留最小的id对应的记录。CREATETABLEIFNOTEXISTS titles_test (
id int(11)notnullprimarykey,
emp_no int(11)NOTNULL,
title varchar(50)NOTNULL,
from_date dateNOTNULL,
to_date dateDEFAULTNULL);deletefrom titles_test
where id notin(selectmin(id)from titles_test groupby emp_no);
修改表名
--45将titles_test表名修改为titles_2017。CREATETABLEIFNOTEXISTS titles_test (
id int(11)notnullprimarykey,
emp_no int(11)NOTNULL,
title varchar(50)NOTNULL,
from_date dateNOTNULL,
to_date dateDEFAULTNULL);altertable titles_test renameto titles_2017;
--
修改新列
--40存在actor表,包含如下列信息:CREATETABLE actor (
actor_id smallint(5)NOTNULLPRIMARYKEY,
first_name varchar(45)NOTNULL,
last_name varchar(45)NOTNULL,
last_update datetimeNOTNULL);
现在在last_update后面新增加一列名字为create_date, 类型为datetime,NOTNULL,默认值为'2020-10-01 00:00:00'altertable actor add create_date datetimenotnulldefault('2020-10-01 00:00:00');
更新
--43将所有to_date为9999-01-01的全部更新为NULL,且 from_date更新为2001-01-01。CREATETABLEIFNOTEXISTS titles_test (
id int(11)notnullprimarykey,
emp_no int(11)NOTNULL,
title varchar(50)NOTNULL,
from_date dateNOTNULL,
to_date dateDEFAULTNULL);update titles_test set
to_date =NULL, from_date ='2001-01-01'where to_date ='9999-01-01';
--44将id=5以及emp_no=10001的行数据替换成id=5以及emp_no=10005,其他数据保持不变,使用replace实现,直接使用update会报错了。CREATETABLE titles_test (
id int(11)notnullprimarykey,
emp_no int(11)NOTNULL,
title varchar(50)NOTNULL,
from_date dateNOTNULL,
to_date dateDEFAULTNULL);update titles_test set
emp_no =replace(emp_no,10001,10005)where id =5
--48请你写出更新语句,将所有获取奖金的员工当前的(salaries.to_date='9999-01-01')薪水增加10%。(emp_bonus里面的emp_no都是当前获奖的所有员工)createtable emp_bonus(
emp_no intnotnull,
btype smallintnotnull);CREATETABLE`salaries`(`emp_no`int(11)NOTNULL,`salary`int(11)NOTNULL,`from_date`dateNOTNULL,`to_date`dateNOTNULL,PRIMARYKEY(`emp_no`,`from_date`));update salaries set salary =1.1*salary
where to_date ='9999-01-01'and emp_no in(select emp_no from emp_bonus)--emp_bonus里面的emp_no不都是当前获奖的所有员工
索引
--37针对如下表actor结构创建索引:(注:在 SQLite 中,除了重命名表和在已有的表中添加列,ALTERTABLE 命令不支持其他操作,
mysql支持ALTERTABLE创建索引)CREATETABLE actor (
actor_id smallint(5)NOTNULLPRIMARYKEY,
first_name varchar(45)NOTNULL,
last_name varchar(45)NOTNULL,
last_update datetimeNOTNULL);
对first_name创建唯一索引uniq_idx_firstname,对last_name创建普通索引idx_lastname
CREATEUNIQUEINDEX uniq_idx_firstname ON ACTOR(first_name);-- 唯一索引CREATEINDEX idx_lastname ON ACTOR(last_name);-- 普通索引-- CREATE INDEX Index_name on Table_name(col_name);
--
--
外键
--46在audit表上创建外键约束,其emp_no对应employees_test表的主键id。CREATETABLE employees_test(
ID INTPRIMARYKEYNOTNULL,
NAME TEXTNOTNULL,
AGE INTNOTNULL,
ADDRESS CHAR(50),
SALARY REAL);CREATETABLE audit(
EMP_no INTNOTNULL,
create_date datetimeNOTNULL);droptableifexists audit;createtable audit(
EMP_no intnotnull,
create_date datetimenotnull,FOREIGNKEY(EMP_no)REFERENCES employees_test(ID));altertable audit
addforeignKEY(emp_no)references employees_test(id)
--
--
触发器
--41构造一个触发器audit_log,在向employees_test表中插入一条数据的时候,触发插入相关的数据到audit中。CREATETABLE employees_test(
ID INTPRIMARYKEYNOTNULL,
NAME TEXTNOTNULL,
AGE INTNOTNULL,
ADDRESS CHAR(50),
SALARY REAL);CREATETABLE audit(
EMP_no INTNOTNULL,
NAME TEXTNOTNULL);createtrigger audit_log
afterinserton employees_test
for each rowbegininsertinto audit values(new.id,new.name);end
sql练习DML建表33--创建一个actor表,包含如下列信息列表 类型 是否为NULL 含义actor_id smallint(5) not null 主键idfirst_name varchar(45) not null 名字last_name varchar(45) not null 姓氏last_update date not null 日期create table if not exists actor( actor_id smallint(5) not null p