1. 程式人生 > 其它 >SQL(1/8)

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_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