创建表
明确结构
明确你的
表名
、每列列名
、每列数据类型
,每列是否允许控制
大多数表斗具有主键
,主键由表的一列
或者多列
组成,主键始终唯一
不能重复。
权限
若要创建表时,必须具有 CREATE TABLE
权限,以及对包含该表的架构的 ALTER SCHEMA
权限。 db_ddladmin
固定数据库角色具有这些权限。
图形界面
T-SQL
首先切换到对应数据库中
1 | USE db_name |
创建表
1 | CREATE TABLE dbo.Products |
说明
- 创建一个了名为
Products
的表,包含了称为架构的可选元素 (dbo.
)。 - 架构是拥有表的数据库对象。 如果您是管理员,则
dbo
是默认架构。dbo
代表数据库所有者。 - 该表中各列的名称为
ProductID
、ProductName
、Price
和ProductDescription
。ProductID
列是表的主键。 int
varchar(25)
、money
和varchar(max)
都是数据类型。- 当插入或更改行时,只有
Price
和ProductionDescription
列可以不包含数据(NULL)。
插入数据
数据
我们可以通过
图形界面
和INSERT语句
的方式,将下列表数据录入数据库表中
ProductID | ProductName | 价格 | ProductDescription |
---|---|---|---|
1 | Clamp | 12.48 | Workbench clamp |
50 | Screwdriver | 3.17 | Flat head |
75 | Tire Bar | Tool for changing tires. | |
3000 | 3 mm Bracket | 0.52 |
图形界面
T-SQL
一行一行
1 | -- 标准语法 Standard syntax |
字符串类型需要使用英文单引号
括起来,否则会出现语法错误。
1 | -- 改变列名列表的顺序 Changing the order of the columns |
1 | -- 跳过列名列表,但保持值和列名相互对应 Skipping the column list, but keeping the values in order |
1 | -- 忽略架构名称dbo,舍弃ProductDescription列的值(为空) Dropping the optional dbo and dropping the ProductDescription column |
插曲
如果插入操作失败,则可能是因为 Product
表中已存在具有该产品 ID 的行。 若要继续,请删除表中的所有行并重复上一步。 TRUNCATE TABLE
删除表中的所有行。
运行以下命令来删除表中的所有行:
1 | TRUNCATE TABLE TestData.dbo.Products; |
一次多行
上面都是
一行一行
插入数据,下面演示一次性添加多行
1 | INSERT INTO table_name (column_list) |
在此语法中,不使用单个值列表,而是使用多个以逗号分隔的值列表进行插入。
使用此形式的INSERT
语句,一次可以插入的行数为1000
行。 如果要插入更多行,则应考虑使用多个INSERT
语句,BULK INSERT
或派生表。
请注意,此INSERT
多行语法仅在SQL Server 2008或更高版本中受支持。
插入查询结果
1 | INSERT [ TOP ( expression ) [ PERCENT ] ] INTO target_table ( |
说明
- 查询语句返回的行将插入
target_table
。 - 该查询是从任何其他表中检索数据的有效
SELECT
语句。 它必须返回与column_list
中指定的列对应的值。 TOP
子句部分是可选的。 它用于指定要插入目标表(target_table
)的查询返回的行数。 如果使用PERCENT
选项,则语句将插入行的百分比。- 请注意,最好始终将
TOP
子句与ORDER BY
子句一起使用。
更新数据
图形界面
同上
T-SQL
1 | UPDATE table_name |
说明
- 首先,指定要从中更新数据的表的名称。
- 其次,指定要更新的列
c1
,c2
,...
,cn
和值v1
,v2
,... vn
的列表。 - 第三,在
WHERE
子句中指定条件以选择更新的行。WHERE子句是可选的。 如果不指定WHERE
子句,则表中的所有行都将更新。
键入并执行以下 UPDATE
语句,将第二种产品的 ProductName
从 Screwdriver
更改为 Flat Head Screwdriver
。
1 | UPDATE Products |
查询数据
T-SQL
查询全体数据
1 | SELECT c1,c2,c3... FROM table_name |
返回需要的行
1 | SELECT C1,C3,C7 FROM table_name |
对某列进行运算并提供别名
1 | SELECT c1*9 AS COL1,c2,c4... FROM table_name |
计算还可以为函数。
使用WHERE子句限制返回的行
1 | SELECT * FROM table_name |
删除数据
T-SQL
删除全部记录
危险操作!注意备份!删库跑路大法
1 | DELETE FROM table_name |
删除指定记录
1 | DELETE FROM table_name |
删除表
1 | DROP TABLE table_name |
修改表
修改数据类型
新数据类型需与旧数据类型相互兼容,否则会出现错误
1 | ALTER TABLE table_name |
修改列的大小
当减小列的大小时,要确保设置的值大于等于最小长度的列值
1 | ALTER TABLE table_name |
添加NOT NULL约束
1 | ALTER TABLE table_name |
添加UNIQUE约束
单个
MySQL / SQL Server / Oracle / MS Access:
1 | ALTER TABLE table_name |
多个
MySQL / SQL Server / Oracle / MS Access:
1 | ALTER TABLE Persons |
说明
- uc_PersonID为约束名可以自行设置。默认为PK__table_name__一串字母加数字,如:UQ__Persons__A3420A56B3CD2923
撤销UNIQUE约束
此处
针对多个
,删除单个
的UNIQUE约束,可以通过ALTER COLUMN
不带UNIQUE约束重新定义列实现!
1 | ALTER TABLE Persons |
添加主键约束
当表已被创建时,如需在 “P_Id” 列创建 PRIMARY KEY 约束,请使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access:
1 | ALTER TABLE Persons |
如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
1 | ALTER TABLE Persons |
注意:
- 如果您使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。
撤销 PRIMARY KEY 约束
MySQL:
1 | ALTER TABLE Persons |
SQL Server / Oracle / MS Access:
1 | ALTER TABLE Persons |
添加 FOREIGN KEY 约束
MySQL / SQL Server / Oracle / MS Access:
1 | ALTER TABLE Orders |
如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
1 | ALTER TABLE Orders |
重命名的约束名为:fk_PerOrders
撤销FOREIGN KEY约束
MySQL:
1 | ALTER TABLE Orders |
SQL Server / Oracle / MS Access:
1 | ALTER TABLE Orders |
添加 CHECK 约束
MySQL / SQL Server / Oracle / MS Access:
1 | ALTER TABLE Persons |
MySQL / SQL Server / Oracle / MS Access:
1 | ALTER TABLE Persons |
撤销 CHECK 约束
SQL Server / Oracle / MS Access:
1 | ALTER TABLE Persons |
MySQL:
1 | ALTER TABLE Persons |
- chk_Person为设置的约束名
添加 DEFAULT 约束
MySQL:
1 | ALTER TABLE Persons |
SQL Server / MS Access:
1 | ALTER TABLE Persons |
Oracle:
1 | ALTER TABLE Persons |
撤销 DEFAULT 约束
MySQL:
1 | ALTER TABLE Persons |
SQL Server / Oracle / MS Access:
1 | ALTER TABLE Persons |