https://www.w3cschool.cn/sql/9d4hffpw.html
使用sql, 可以为表名称或者列名称指定别名
语法:
列
SELECT column_name AS alias_name
FROM table_name;
表
SELECT column_name(s)
FROM table_name AS alias_name;
作用于数据表中列上的规则,用于限制表中数据的类型,约束的存在保证了数据库中数据的精确性和可靠性
约束有列级和表级之分,列级约束作用于单一的列,而表级约束作用于整张数据表
约束强制列不接受null 值
如果不向字段添加值,就无法插入新记录或者更新记录
约束唯一标识数据库表中的每条记录
主键 是 not null 的
包含唯一的值
一个表的外键指向另一个表的主键
foreign key 约束用于预防破坏表之间连接的行为
foreign key 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
在Orders 表创建时,在P_Id 列上创建foreign key约束
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)
添加外键约束
alter table Orders
add foreign key(P_Id)
references Persons(P_Id)
向列中插入默认值
在 Persons 表创建时在City 列上创建default 约束
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
添加约束
alter table Persons
alter City set default 'sandnes'
约束用于限制列中的值的范围
如果对单个列定义check约束,那么该列只允许特定的值
如果对一个表定义check 约束, 那么次约束会基于行中其他列的值在特定的列中的值进行限制
check 约束规定‘P_Id’ 列包含大于0的整数
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)
字段是在select 之后自己选择的,条数由join方式决定。
select ID, NAME, AMOUNT, DATE
from CUSTOMERS
INNER JOIN ORDERS
ON CURTOMERS.ID = ORDERS.CUSTOMER_ID;
让customers 在左边,orders 在右边
select ID, NAME, AMOUNT, DATE
FROM CUSTOMERS
LEFT JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID
和笛卡儿积不一样
SELECT ID, NAME, AMOUNT, DATE
FROM CUSTOMERS
FULL JOIN ORDERS
ON CUSTOMERS.ID = ORDERS.CUSTOMER_ID;
SELECT ID, NAME, AMOUNT, DATE
FROM CUSTOMERS, ORDERS;
在使用union 的时候,每个select 语句必须有相同数量的选中列,相同数量的列表达式、相同的数据类型、并且它们出现 的次序要一致,不过长度不一定要相同。
索引提高select 查询和where 子句的速度,但降低了update 或inset 语句数据输入过程的速度
基于单一字段创建,基本语法
create index index_name
on table_name;
不止用来提高查询性能,还用于保证数据完整性,不允许向表中插入任何重复值
create unique index index_name
on table_name;
在表中两个或多个列的基础上建立
create index index_name
on table_name(column1, column2);
创建单列索引还是聚簇索引 ,要看每次查询中,哪些列作为过滤条件的where 子句中最常出现。如果只需要一列,那么就应当创建单列索引,如果作为过滤条件的where 子句用到了两个或者更多列,那么聚簇索引就是最好的选择。
隐式索引
由数据库服务器在创建某些对象的时候自动生成,例如: 对于主键约束和唯一约束,数据库服务器就会自动创建索引。
子查询, 内查询,嵌套查询
SELECT *
FROM CUSTOMERS
WHERE ID IN (SELECT ID
FROM CUSTOMERS
WHERE SALARY > 4500) ;
INSERT INTO CUSTOMERS_BKP
SELECT * FROM CUSTOMERS
WHERE ID IN (SELECT ID
FROM CUSTOMERS) ;
UPDATE CUSTOMERS
SET SALARY = SALARY * 0.25
WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
WHERE AGE >= 27 );
DELETE FROM CUSTOMERS
WHERE AGE IN (SELECT AGE FROM CUSTOMERS_BKP
WHERE AGE > 27 );
删除现有数据表中所有数据,保留表结构
语法:TRUNCATE TABLE table_name;
name 由字母、数字、下划线长度8到20
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
$result = mysql_query("SELECT * FROM CUSTOMERS
WHERE name=$matches[0]");
}
else
{
echo "user name not accepted";
}
指定过滤条件,从而控制结果中哪些组可以出现在最终结果里面
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
筛选出现次数大于或等于2的所有记录
SELECT ID, NAME, AGE, ADDRESS, SALARY
FROM CUSTOMERS
GROUP BY age
HAVING COUNT(age) >= 2;
事务的属性