今天继续讲mysql数据库
先创建一张Persons表
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
1.1SQL PRIMARY KEY 约束
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键
1.1.1当表已被创建时,如需在 "P_Id" 列创建 PRIMARY KEY 约束,请使用下面的 SQL
ALTER TABLE Persons ADD PRIMARY KEY (P_Id)
1.1.2如需撤销 PRIMARY KEY 约束,请使用下面的 SQL
ALTER TABLE Persons DROP PRIMARY KEY
1.2一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY 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)
)
1.2.1当 "Orders" 表已被创建时,如需在 "P_Id" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:
ALTER TABLE Orders ADD FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
1.2.2如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders
1.3SQL CHECK 约束
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。
1.3.1下面的 SQL 在 "Persons" 表创建时在 "P_Id" 列上创建 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)
)
1.3.2当表已被创建时,如需在 "P_Id" 列创建 CHECK 约束,请使用下面的 SQL:
ALTER TABLE Persons ADD CHECK (P_Id>0)
1.3.3如需撤销 CHECK 约束,请使用下面的 SQL
ALTER TABLE Persons
DROP CHECK chk_Person
1.4SQL DEFAULT 约束
DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。
1.4.1下面的 SQL 在 "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'
)
1.4.2当表已被创建时,如需在 "City" 列创建 DEFAULT 约束,请使用下面的 SQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
1.4.3如需撤销 DEFAULT 约束,请使用下面的 SQL
ALTER TABLE Persons
ALTER City DROP DEFAULT
1.5CREATE INDEX 语句用于在表中创建索引。
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
索引
您可以在表中创建索引,以便更加快速高效地查询数据。
用户无法看到索引,它们只能被用来加速搜索/查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
1.5.1SQL CREATE INDEX 语法
在表上创建一个简单的索引。允许使用重复的值:
ON table_name (column_name)
在表上创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值。
ON table_name (column_name)
ON Persons (LastName)
1.5.5 撤销索引
ALTER TABLE table_name DROP INDEX index_name
1.6 drop的用法
1.6.1DROP TABLE 语句用于删除表。 DROP TABLE table_name
1.6.2DROP DATABASE 语句用于删除数据库。DROP DATABASE database_name
1.6.3如果我们仅仅需要删除表内的数据,但并不删除表本身,那么我们该如何做呢?
请使用 TRUNCATE TABLE 语句:TRUNCATE TABLE table_name
1.7ALTER TABLE 语句用于在已有的表中添加、删除或修改列
1.7.1如需在表中添加列,请使用下面的语法:
ADD column_name datatype
DROP COLUMN column_name
MODIFY COLUMN column_name datatype
我们通常希望在每次插入新记录时,自动地创建主键字段的值。
我们可以在表中创建一个 auto-increment 字段
1.8.1下面的 SQL 语句把 "Persons" 表中的 "ID" 列定义为 auto-increment 主键字段:
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)
要让 AUTO_INCREMENT 序列以其他的值起始,请使用下面的 SQL 语法:
在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
您可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。
SQL CREATE VIEW 语法
SELECT column_name(s)
FROM table_name
WHERE condition