sql语言高级2

本文是针对数据表的操作。

CREATE DATABASE

用于创建数据库。
CREATE DATABASE database_name

CREATE TABLE

CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,

)
数据类型

integer(size)
int(size)
smallint(size)
tinyint(size) 仅容纳整数。在括号内规定数字的最大位数。

decimal(size,d)
numeric(size,d)容纳带有小数的数字。  "size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。

char(size)	容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。  在括号中规定字符串的长度。

varchar(size)容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。在括号中规定字符串的最大长度。

date(yyyymmdd)	容纳日期。

SQL 约束(不详细)

用于限制加入表的数据的类型。

NOT NULL

不接受 NULL 值。
这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。

UNIQUE

约束唯一标识数据库表中的每条记录。
每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。

非mysql
CREATE TABLE Persons
(
Id_P int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
mysql:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (Id_P)
)

SQL UNIQUE Constraint on ALTER TABLE
当表已被创建时,如需在 “Id_P” 列创建 UNIQUE 约束,请使用下列 SQL:

MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD UNIQUE (Id_P)

如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (Id_P,LastName)

撤销 UNIQUE 约束
如需撤销 UNIQUE 约束,请使用下面的 SQL:

# MySQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID
# SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID

PRIMARY KEY

主键
约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。

# SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

其他和上面的类似

FOREIGN KEY

外键。一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
用于预防破坏表之间连接的动作。
也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

# SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
Id_O int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)

如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (Id_O),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
)

CHECK

用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

# 约束规定 "Id_P" 列必须只包含大于 0 的整数。
# My SQL:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)
# SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

DEFAULT

用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。

# My SQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)

通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:

CREATE TABLE Orders
(
Id_O int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
OrderDate date DEFAULT GETDATE()
)

SQL DEFAULT Constraint on ALTER TABLE
如果在表已存在的情况下为 “City” 列创建 DEFAULT 约束,请使用下面的 SQL:

MySQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'

SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'SANDNES'
撤销 DEFAULT 约束

如需撤销 DEFAULT 约束,请使用下面的 SQL:

MySQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT

SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT

CREATE INDEX 语句

用于在表中创建索引。
不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
用户无法看到索引,它们只能被用来加速搜索/查询。
注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。
在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name)
创建一个唯一的索引CREATE UNIQUE INDEX index_name
ON table_name (column_name)
允许重复:

如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC:
CREATE INDEX PersonIndex
ON Person (LastName DESC) 
假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
CREATE INDEX PersonIndex
ON Person (LastName, FirstName)

drop

可以轻松地删除索引、表和数据库。

DROP INDEX

删除表格中的索引。

用于 MS SQL Server 的语法:
DROP INDEX table_name.index_name

DROP TABLE

用于删除表(表的结构、属性以及索引也会被删除):
DROP TABLE 表名称

DROP DATABASE

用于删除数据库:
DROP DATABASE 数据库名称

TRUNCATE TABLE

如果我们仅仅需要除去表内的数据,但并不删除表本身,那么我们该如何做呢?
请使用 TRUNCATE TABLE 命令(仅仅删除表格中的数据):
TRUNCATE TABLE 表名称

ALTER TABLE 语句

用于在已有的表中添加、修改或删除列。
添加列,请使用下列语法:

ALTER TABLE table_name
ADD column_name datatype

要删除表中的列,请使用下列语法:

ALTER TABLE table_name 
DROP COLUMN column_name

改变表中列的数据类型,请使用下列语法:

ALTER TABLE table_name
ALTER COLUMN column_name datatype

AUTO INCREMENT (不同)

我们通常希望在每次插入新记录时,自动地创建主键字段的值。
我们可以在表中创建一个 auto-increment 字段。
SQL server:

CREATE TABLE Persons
(
P_Id int PRIMARY KEY IDENTITY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
# 改为,初始20,递增10
 IDENTITY(20,10)

默认从1开始,每次递增1

发布了25 篇原创文章 · 获赞 0 · 访问量 435

猜你喜欢

转载自blog.csdn.net/longzu233/article/details/104927437
今日推荐