A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在SQL中,我们有如下约束:
NOT NULL 指示某列不能存储 NULL 值,强制字段始终包含值,否则就无法插入新记录或者更新记录。
UNIQUE 保证某列的每行必须有唯一的值。
PRIMARY KEY - NOT NULLUNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
FOREIGN KEY 保证一个表中的数据匹配另一个表中的值的参照完整性。
CHECK 保证列中的值符合指定的条件。
DEFAULT 规定没有给列赋值时的默认值。
10.1 not null约束 约束强制不接受到任何null值
示例: student_tele不能为空
[AppleScript] 纯文本查看 复制代码
create table student_information (
    student_id INT (10) ,
    student_name CHAR (4),
    student_class CHAR (10),
    student_tele INT (11) NOT NULL,
    student_add VARCHAR (255)
);
10.2 UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
示例:MYSQL
[AppleScript] 纯文本查看 复制代码
create table student_information (
    student_id INT (10),
    student_name CHAR (4),
    student_class CHAR (10),
    student_tele INT (11),
    student_add VARCHAR (255),
    unique (student_id)
    );
示例:SQL server/oracle
[AppleScript] 纯文本查看 复制代码
create table student_information (
    student_id int (10) NOT NULL UNIQUE,
    student_name CHAR (4),
    student_class CHAR (10),
    student_tele INT (11),
    student_add VARCHAR (255),
    );
示例:SQL mysql/server/oracle 定义过个列的unique约束。
[AppleScript] 纯文本查看 复制代码
create table student_information (
    student_id int (10) NOT NULL UNIQUE,
    student_name CHAR (4),
    student_class CHAR (10),
    student_tele INT (11),
    CONSTRAINT  stu_inf UNIQUE (student_id,student_name)
    );  这里的 stu_inf 为约束名称constraint_name,自定义。
alter table时的unique约束
示例:
[AppleScript] 纯文本查看 复制代码
alter table student_information
add unique (student_id);
示例:添加多个unique,
[AppleScript] 纯文本查看 复制代码
alter table student_information
add constraint stu_inf unique (student_id,student_add);
撤销unique约束
示例:mysql
[AppleScript] 纯文本查看 复制代码
alter table student_information
drop index stu_inf;
示例:SQL
[AppleScript] 纯文本查看 复制代码
alter table student_information
drop constraint stu_inf;
10.3 primary key 主键必须包含唯一的值,主键不能为null,每个表都应该有一个主键,并且是唯一的。
示例:参照unique,将其中的unique替换为 primary key即可。 上述有添加多个unique示例,如果改为primary 可以意思就是主键由添加的几个列组成。
10.4 foreign key 约束
a.可以用来预防破坏表之间连接的行为
b.防止非法数据插入外键列,因为它必须是指向的那个表中的值之一
示例:MYSQL
[AppleScript] 纯文本查看 复制代码
create table websites(
  id int(11) NOT NULL,
  name char(20) NOT NULL,
  url varchar(255) NOT NULL,
  alexa int(11) NOT NULL,
  country char(10) NOT NULL,
  primary key (id),
  foreign KEY (id) references apps(id)
);
示例:SQL server/oracle
[AppleScript] 纯文本查看 复制代码
CREATE TABLE websites
 (
 Id int NOT NULL PRIMARY KEY,
 OrderNo int NOT NULL,
 Id int FOREIGN KEY REFERENCES apps(Id)
 );
示例:MySQL/SQL Server/Oracle
[AppleScript] 纯文本查看 复制代码
CREATE TABLE websites
 (
 Id int NOT NULL,
 OrderNo int NOT NULL,
 Id int,
 PRIMARY KEY (O_Id),
 CONSTRAINT fk_PerOrders FOREIGN KEY (Id)
 REFERENCES apps(Id)
 );
alter table 使用foreign key约束
示例:
[AppleScript] 纯文本查看 复制代码
ALTER TABLE Orders
 ADD FOREIGN KEY (P_Id)
 REFERENCES Persons(P_Id)
示例:如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束
[AppleScript] 纯文本查看 复制代码
ALTER TABLE Orders
 ADD CONSTRAINT fk_PerOrders
 FOREIGN KEY (P_Id)
 REFERENCES Persons(P_Id)
撤销FOREIGN KEY约束
示例:mysql
[AppleScript] 纯文本查看 复制代码
alter table Orders drop index fk_PerOrders;
示例:SQL
[AppleScript] 纯文本查看 复制代码
alter table Orders drop constraint fk_PerOrders;
10.5 CHECK 约束
用于限制列中的值的范围
示例:MYSQL
[AppleScript] 纯文本查看 复制代码
create table websites(
  id int(11) NOT NULL,
  name char(20) NOT NULL,
  url varchar(255) NOT NULL,
  alexa int(11) NOT NULL,
  country char(10) NOT NULL,
  check (id>0)
);
alter table 使用check约束
alter table websites add check (id>0);
撤销check约束(参照unique约束中的alter table)
alter table websites drop check constraint_name;
10.6 DEFAULT 约束
1.用于向列中插入默认值
2.如果没有规定其它值,那么将默认值添加到所有的记录
示例:MYSQL
create table student_information (   
[AppleScript] 纯文本查看 复制代码
 student_id INT (10) NOT NULL,[/size][/font][font=微软雅黑][size=3]    student_name CHAR (4),
    student_class CHAR (10) DEFAULT '' comment '班级',
    student_tele INT (11),
    student_add VARCHAR (255)
);  comment 是为 字段或列的属性添加注释用的
alter table 使用 default
示例:MYSQL

alter table websites
alter country set default 'CN';
示例:SQL server
alter table websites add constraint ad_c default 'CN' for country;
示例:oracle
alter table websites modify country default 'CN';
撤销default约束
示例:MYSQL

alter table websites
alter country drop default;
示例:SQL server/oracle

alter tables websites
alter column country drop default;
create index 用于在表中创建索引
在表中创建索引可以更高效的查询数据,用户无法查看到索引,他们只能被用来加速搜索/查询。
注:更新一个包含索引的表所耗费的时间比没有索引表的时间更长,这是由于索引本身也需要更新。因此,理想的做法是仅仅在尝尝被所有的列(及表)上面创建索引。
语法:创建一个简单的索引,允许使用重复的值
create index index_name ON table_name (column_name);
语法:在表中创建唯一的索引,不允许使用重复的值(create unique table):唯一的索引意味着两个行不能拥有相同的索引值。
create UNIQUE index index_name ON table_name (column_name);
示例:将websites表中name列中创建名为web_index的索引。
create index web_index ON websites (name);

12.drop 可以删除表,索引和数据库
DROP INDEX 语句用于删除表中的索引。
用于 SQL Server 的 DROP INDEX 语法:
DROP INDEX table_name.index_name
用于 DB2/Oracle 的 DROP INDEX 语法:
DROP INDEX index_name
用于 MySQL 的 DROP INDEX 语法:
ALTER TABLE table_name DROP INDEX index_name
DROP TABLE 语句用于删除表。
DROP DATABASE 语句用于删除数据库。

仅仅需要删除表内的数据,但并不删除表本身
TRUNCATE TABLE table_name

13.ALTER TABLE 用于在已有的表中添加、删除或修改列。
添加列的语法:
ALTER TABLE table_name ADD column_name datatype;
删除表中的列语法:
ALTER TABLE table_name DROP COLUMN column_name datatype;
改变表中数据类型语法:
ALTER TABLE table_name MODIFY COLUMN column_name datatype;

示例: 在website表中添加名为column_date的列,然后修改列的数据类型,删除添加的列

alter table websites add column_date date;  添加
alter table websites modify column column_date year;修改
alter table websites drop column column_date;   删除

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马