模式
创建模式:
创建模式的用户必须拥有数据库管理员权限
创建模式TEST并在其中定义一个表TAB1
CREATE SCHEMA TEST AUTHORIZATION ZHANG
CRATE TABLE TAB1(
COL SMALLINT,
COL2 INT,
COL3 NUMERIC,
COL4 DECIMAL
);
删除模式:
DROP SCHEMA <模式名><CASCADE|RESTRICT>
cascade级联:表示删除模式的同时该模式中的所有数据对象全部删除
restrict限制: 表示模式下如果定义了数据库对象,则拒绝该删除语句执行
DROP SCHEMA TEST CASCADE
基本表的定义
定义表的两种写法:
1, 列级完整性约束条件
CREATE TABLE student(
sno char(9) PRIMARY KEY,
sname char(200) UNIQUE,
sdept char(20)
);
2, 表集完整性约束条件
CREATE TABLE sc(
sno char(9),
cno char(4),
grade smallint,
PRIMARY KEY (sno, cno),
FOREIGN KEY(sno) REFERENCE student(sno),
FOREIGN KEY(cno) REFERENCE course(cno)
);
连接表
select vend_name, prod_name, prod_price
FROM vendors, products
WHERE vendors.vend_id = products.vend_id
ORDER BY vend_name, prod_name;
SELECT vend_name, prod_name, prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id;
SELECT vend_name, prod_name, prod_price, quanitity
FROM orderitems, products, vendors
WHERE products.vend_id = vendors.vend_id
AND orderitems.prod_id = products.prod_id
AND order num = 20005;
select customers.cust_id, orders.order_num
from customers RIGHT OUTER JOIN orders
on orders.cust_id = customers.cust_id;
增删修查
SELECT prdo_name from products;
SELECT prod_id, prod_name FROM products;
SELECT * FROM products;
SELECT DISTINCT vend_id FROM products;
SELECT prod_name FROM products LIMIT 5;
SELECT prod_name FROM products LIMIT 5,5;
SELECT products.prod_name FROM products;
SELECT prod_name FROM products ORDER BY prod_name;
SELECT prod_price, prod_name FROM products ORDER BY prod_price, prod_name
SELECT prod_price, prod_name FROM products ORDER BY prod_price, prod_name DESC
SELECT prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name
SELECT prod_name FROM products WHERE prod_price IS NULL;
SELECT prod_id, prod_price, prod_name FROM products
WHERE vend_id = 1003 AND prod_price <= 10;
SELECT prod_id, prod_price, prod_name FROM products
WHERE vend_id = 1003 OR vend_id = 1002;
SELECT prod_id, prod_price FROM products
WHERE (vend_id = 1003 OR vend_id = 1002) AND prod_price >= 10;
SELECT prod_name, prod_price FROM products
WHERE vend_id IN (1002, 1003) ORDER BY prod_name;
SELECT prod_name, prod_price FROM products
WHERE vend_id NOT IN (1002, 1003) ORDER BY prod_name;
SELECT prod_id, prod_price, prod_name FROM products
WHERE prod_name LIKE 'jet%';
SELECT prod_id, prod_price, prod_name FROM products
WHERE prod_name LIKE '%_jet_%';
SELECT prod_name from products WHERE prod_name REGEXP '//(^chen [0-9]{4} stick? //)'
SELECT COUNT (*) AS num_items,
MIN (prod_price) AS price_min,
max(prod_price) AS price_max
FROM products
SELECT cust_id from orders where order_num in (
select order_num from orderitems where prod_Id = 'TNT2'
)
SELECT vend_id, prod_Id, prod_price
FROM products
WHERE prod_price <= 5;
UNION
SELECT vend_id, prod_Id, prod_price
FROM products
WHERE vend_Id IN (1001, 1002)
ORDER BY vend_id, prod_price
INSERT INTO customers(cust_name, cust_address)
VALUES ('woyao', 'main street'),
('woruo', 'galaxy way')
UPDATE customers SET cust_email = 'elmer@fudd.com'
WHERE cust_id = 10005;
DELETE FROM customers WHERE cust_id = 10006;
ALTER TABLE vendors ADD vend_phone CHAR (20);
ALTER TABLE vendors DROP COLUMN vend_phone;
DROP TABLE customers;
rename TABLE customers2 to customers;
使用视图
CREATE VIEW productCustomers AS
select cust_name, cust_contact, prod_id
from customers, orders, orderitems
WHERE customers.cust_id = orders.cust_id
and orderitems.order_num = orders.order_num;
全文本搜索
CREATE TABLE productNotes(
noted_id int NOT null auto_increment,
prod_id char(10) not NULL ,
note_text text NULL,
PRIMARY KEY (noted_id),
FULLTEXT(note_text)
)ENGINE=MyISAM
select note_text FROM productNotes
WHERE MATCH(note_text)against('rabbit');
SELECT note_text FROM productNotes
WHERE MATCH(note_text)against('anvils' WITH query expansion)
select note_text FROM productNotes
WHERE MATCH(note_text)against('rabbit -rope*'IN boolean mode);
存储过程
CREATE PROCEDURE productpricing()
BEGIN
SELECT avg(prod_price) as priceAverage
FROM products
END;
CALL productpricing()
DROP PROCEDURE productpricing
CREATE PROCEDURE productpricing(out pl DECIMAL(8, 2),
out ph DECIMAL(8, 2))
BEGIN
SELECT min(prod_price)
INTO pl
FROM products;
SELECT max(prod_price)
INTO ph
FROM products;
END;
call productpricing(@pricelow, @pricehigh)
select @pricelow
CREATE PROCEDURE ordertotal(IN onumber int,
out ototal DECIMAL(8,2))
BEGIN
SELECT sum(item_price*quantity)
FROM orderitems
WHERE order_num = onumber
into ototal
END;
call ordertotal(20005, @total)
SELECT @total
show create PROCEDURE ordertotal
CREATE proc C1
@fno char(20), @fdname char(2)
as insert into factory
values(@fno, @fdname)
exec C1 'aa', 'tom'
触发器
CREATE trigger newproduct
after insert on products
for each row select 'product added'
DROP trigger newproduct
CREATE trigger updatevendor
before update on vendors
for each row set new.vend_state = Upper(new.vend_state)