SQL(1/8)
技術標籤:SQL
建立索引
針對如下表actor結構建立索引:
(注:在 SQLite 中,除了重命名錶和在已有的表中新增列,ALTER TABLE 命令不支援其他操作,
mysql支援ALTER TABLE建立索引)
CREATE TABLE actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update datetime NOT NULL);
對first_name建立唯一索引uniq_idx_firstname,對last_name建立普通索引idx_lastname
create unique index uniq_idx_firstname on actor(first_name);
create index idx_lastname on actor(last_name);
建立檢視
針對actor表建立檢視actor_name_view,只包含first_name以及last_name兩列,並對這兩列重新命名,first_name為first_name_v,last_name修改為last_name_v:
CREATE TABLE actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_update datetime NOT NULL);
create view actor_name_view as
select first_name as first_name_v,last_name as last_name_v from actor
使用強制索引
針對salaries表emp_no欄位建立索引idx_emp_no,查詢emp_no為10005, 使用強制索引。
CREATE TABLE salaries
(
emp_no
int(11) NOT NULL,
salary
int(11) NOT NULL,
from_date
date NOT NULL,to_date
date NOT NULL,PRIMARY KEY (
emp_no
,from_date
));create index idx_emp_no on salaries(emp_no);
select * from salaries
force index(idx_emp_no)
where emp_no=10005;
增加一列
存在actor表,包含如下列資訊:
CREATE TABLE actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update datetime NOT NULL);
現在在last_update後面新增加一列名字為create_date, 型別為datetime, NOT NULL,預設值為’2020-10-01 00:00:00’
alter table actor add
create_date datetime not null default '2020-10-01 00:00:00'
after last_update;
構造觸發器
構造一個觸發器audit_log,在向employees_test表中插入一條資料的時候,觸發插入相關的資料到audit中。
CREATE TABLE employees_test(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
CREATE TABLE audit(
EMP_no INT NOT NULL,
NAME TEXT NOT NULL
);
create trigger audit_log after insert on employees_test
begin
insert into audit values(new.id,new.name);
end