SQL必知必会_学习笔记1

1 表操作

1.1 创建表

这里创建的表也是后面要用到的数据
创建dx_customers表

CREATE TABLE dx_customers{
	cust_id char(10) not null,
	cust_name char(50) not null,
	cust_address char(50) null,
	cust_city char(50) null,
	cust_state char(5) null,
	cust_zip char(10) null,
	cust_country char(50) null,
	cust_contact char(50) null,
	cust_email char(255) null
}
  • 使用NULL值,NULL值就是没有或者缺失。允许那列为Null,就是允许在插入时,可以不给出该列的值。不允许NULL值的列,一定要给出该列的值。
  • NULL值与字符串不同,NULL值是没有值,但是空字符串是有效的值。
  • 创建表时,指定默认值
// 第一步
CREATE TABLE dx_customers{
	cust_id char(10) not null,
	cust_name char(50) not null,
	cust_address char(50) null  default '11 street'    	 ,
	cust_city char(50) null default 'Nanjing',
	cust_state char(5) null,
	cust_zip char(10) null,
	cust_country char(50) null,
	cust_contact char(50) null,
	cust_email char(255) null
}

// 第二步
insert into dx_customers(cust_id, cust_name)
values('001', 'tom');
cust_idcust_namecust_addresscust_citycust_statecust_zip
001tom11 streetNanjingnullnull
  • cust_address和cust_city指定了默认值,然后插入只有cust_id和cust_name的数据,其他都是省略列,此时cust_address和cust_city填入的是默认值,其他列填入的是null。

创建dx_orderItems表

CREATE TABLE dx_orderItems{
	order_num int not null,
	order_item int not null,
	prod_id char(10) not null,
	quantity int not null,
	item_price decimal(8,2) not null
}
  • 看下decimal类型

创建dx_orders表

CREATE TABLE dx_orders{
	order_num int not null,
	order_date datetime not null,
	cust_id char(10) not null
}
  • 看下datetime和text类型

创建vendors表

CREATE TABLE dx_vendors{
	vend_id char(10) not null,
	vend_name char(50) not null,
	vend_address char(50) null,
	vend_city char(50) null,
	vend_state char(5) null,
	vend_zip char(10) null,
	vend_country char(50) null
}

1.2 更新表

1.2.1 给表增加列

给dx_customers表增加一列cust_age

alter TABLE dx_customers
add cust_age int null;

1.2.2 删除表中的列

删除dx_customers表中的cust_email列和cust_age列

alter TABLE dx_customers
drop column cust_email, drop column cust_age;

1.3 删除表

删除表dx_customers

drop table dx_customers;
  • drop table 表名,不仅删除表中数据,连表结构也删除
  • 如果表不存在,删除会报错

表存在,才删除

drop table if exists dx_customers;
  • 如果dx_customers表存在,才删除。

2. 约束

2.1 主键

  • 主键用来保证一列或者一组列是唯一的,主键要满足如下几个条件
    • 任意两行的主键值都不能相同
    • 每行都有一个主键值,主键值不能为null
    • 包含主键值的列从不修改或者更新,哪怕DBMS允许这样做,也别去改
    • 主键值不能重用,如果从表中删除某一行,这行的主键值也不要分配给新的行

2.1.1 创建主键

方式1.在创建表的时候就添加主键

  • 把单个字段设置为主键
    • 在创建表的时候,就紧接着字段设置primary key,此时name就是主键了
CREATE TABLE student{
	name char(50) not null primary key,
	id char(20) not null,
	age char(10) null
}
  • 把多个字段设置为主键
    错误写法
// 这样写会报错:定义了多个主键
CREATE TABLE student{
	name char(50) not null primary key,
	id char(20) not null primary key,
	age char(10) null
}

正确写法
把name和id设置为主键

CREATE TABLE student{
	name char(50) not null,
	id char(20) not null,
	age char(10) null,
	constraint studentId primary key(name, id)
};
  • 在constraint中用primary key把多个列定义为一个主键,虽然是多个列,但仍然是一个主键
  • 可以用constraint studentId给主键起别名,就叫studentId

方式2.创建表之后,再添加主键

// 先创建表
CREATE TABLE student{
	name char(50) not null,
	id char(20) not null,
	age char(10) null
};
// 然后增加主键
alter table student
add constraint studentKey primary key(name,id);
  • 先创建表,然后在把name和id列作为主键

2.1.2 撤销主键

alter table student
drop primary key;

2.1.3 使用的数据中的主键

  • 只有不允许null的列才可以作为主键
alter table dx_customers add primary key(cust_id);
alter table dx_orderItems add primary key(order_num, order_item);
alter table dx_orders add primary key(order_num);
alter table dx_products add primary key(prod_id);
alter table dx_vendors add primary key(vend_id);

2.2 外键

外键是表的一列,外键的值必须在另一个表的主键中,外键是为了保证引用的完整性,用于防止破坏表之间连接的行为,也能防止非法的数据插入外键列,因为外键的值必须在外键指向的表的主键中。

2.2.1 创建外键

方式1.在创建表的时候,就创建外键

create table student(
	id char(20) not null primary key,
	name char(50) not null,
	age char(10) null,
	order_num int not null,
	order_item int not null,
	constraint fk_student foreign key (order_num, order_item) references dx_orderitems(order_num, order_item)
);
  • student这个表的主键是id
  • student这个表的外键是多个列order_num和order_item共同作为外键
  • 用constraint fk_student给外键起别名,用references dx_orderitems(order_num, order_item)关联到dx_orderitems表
  • studnet表中的order_num、order_item字段类型,要与表dx_orderitems中的order_num、order_item的字段类型一致,不然会出错,报incompatible不兼容问题。

方式2.创建表后,再添加外键

// 第一步,创建student表
create table student(
	id char(20) not null primary key,
	name char(50) not null,
	age char(10) null,
	order_num int not null,
	order_item int not null,
);
// 第二步,添加外键
alter table student 
add constraint fk_student foreign key(order_num,order_item) references dx_orderitems(order_num,order_item);

2.2.2 删除外键

alter table student 
drop foreign key fk_student;
  • 这里用外键的别名fk_studnet来删除外键

2.2.3 使用的数据中的外键

alter table dx_orderItems
add constraint FK_OrderItems_Orders foreign key(order_num) references dx_orders(order_num);
alter table dx_orderItems
add constraint FK_OrderItems_Products foreign key(prod_id) references dx_products(prod_id);
alter table dx_orders
add constraint FK_Orders_Customers foreign key(cust_id) references dx_customers(cust_id);
alter table dx_products
add constraint FK_Products_Venders foreign key(vend_id) references dx_vendors(vend_id);
  • 疑问:一个表可以添加多个外键到另外多个不同表吗?

2.3 唯一约束

唯一约束用来保证一列或者一组列的数据是唯一的,类似主键,但是又不同

  • 表可以包含多个唯一约束,但是每个表只允许一个主键
  • 唯一约束列可以包含null,但是主键不能包含null
  • 唯一约束列可以修改或者更新,但是主键不能
  • 唯一约束列的值可以重复使用,但是主键不能
  • 唯一约束列不能用来定义外键,但是主键可以用来定义外键
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值