《sql必知必会》------day5

第 15 课 插入数据

INSERT 用来将行插入(或添加)到数据库表。

插入完整的行
INSERT INTO Customers
VALUES('1000000006','Toy Land','123 Any Street',
	   'New York','NY','11111','USA',NULL,NULL);

    每一列的数据在 VALUES 子句中给出,必须给每一列提供一个值。如果某列没有值,则应该使用 NULL 值。
    上述语句是依赖于特定列次序。
    一下是编写 INSERT 语句的更安全(不过更烦琐)的方法:

INSERT INTO Customers(cust_id,cust_name,cust_address,cust_city,cust_state,
					  cust_zip,cust_country,cust_contact,cust_email)
			  VALUES('1000000006','Toy Land','123 Any Street','New York',
					 'NY','11111','USA',NULL,NULL);

    即表名后的括号里明确给出了列名。

插入部分行

明确给出表的列名,省略某些列,这表示可以只给某些列提供值,给其他列不提供值。

INSERT INTO Customers(cust_id,cust_name,cust_address,cust_city,
			          cust_state,cust_zip,cust_country)
			  VALUES('1000000006','Toy Land','123 Any Street',
		             'New York','NY','11111','USA');

省略列:(条件)
        该列定义为允许 NULL 值(无值或空值)。
        在表定义中给出默认值。这表示如果不给出值,将使用默认值。

插入检索出的数据

    由一条 INSERT 语句和一条 SELECT语句组成的。
把另一表中的顾客列合并到 Customers 表中:

INSERT INTO Customers(cust_id,cust_contact,cust_email,cust_name,cust_address,
					  cust_city,cust_state,cust_zip,cust_country)
			  SELECT cust_id,cust_contact,cust_email,cust_name,cust_address,
			    	  cust_city,cust_state,cust_zip,cust_country
FROM CustNew;

         INSERT和 SELECT语句但不一定要求列名匹配。DBMS 使用的是SELECT列的位置,因此 SELECT 中的第一列(不管其列名)将用来填充表列中指定的第一列。

从一个表复制到另一个表

        将一个表的内容复制到一个全新的表(运行中创建的表),可以使用 SELECT INTO 语句。DB2 不支持这里描述的 SELECT INTO。
MariaDB、 MySQL、 Oracle、 PostgreSQL 和 SQLite中:

CREATE TABLE CustCopy AS
SELECT * FROM Customers;

        创建一个名为 CustCopy 的新表,并把 Customers 表的整个内容复制到新表中。(其他语法:SELECT * INTO CustCopy FROM Customers;)。要想只复制部分的列,可以明确给出列名,而不是使用*通配符。
  注意:
        任何 SELECT 选项和子句都可以使用,包括 WHERE 和 GROUP BY;
        可利用联结从多个表插入数据;
        不管从多少个表中检索数据,数据都只能插入到一个表中
 
 

第 16 课 更新和删除数据
更新数据
UPDATE Customers
SET cust_contact = 'Sam Roberts',
	cust_email = 'sam@toyland.com'
WHERE cust_id = '1000000006';
删除数据
DELETE FROM Customers
WHERE cust_id = '1000000006';

     DELETE 删除整行而不是删除列。要删除指定的列,请使用 UPDATE 语句(即设置为空)
     删除所有行可使用 TRUNCATE TABLE
     在 UPDATE 或 DELETE 语句使用 WHERE 子句前,应该先用 SELECT 进行测试,保证它过滤的是正确的记录,以防编写的 WHERE 子句不正确。
 
 

第 17 课 创建和操纵表

创建表

CREATE TABLE Products
(prod_id CHAR(10) NOT NULL,
vend_id CHAR(10) NOT NULL,
prod_name CHAR(254) NOT NULL,
prod_price DECIMAL(8,2) NOT NULL,
prod_desc VARCHAR(1000) NULL);
    MySQL、 Oracle、PostgreSQL、SQL Server 和 SQLite中有效
    对于 DB2,必须从最后一列中去掉 NULL

在创建新的表时,指定的表名必须不存在,否则会出错。防止意外覆盖已有的表, SQL 要求首先手工删除该表,然后再重建它,而不是简单地用创建表语句覆盖它。
指定默认值:关键字 DEFAULT 指定,quantity INTEGER NOT NULL DEFAULT 1,

CREATE TABLE OrderItems
(order_num INTEGER NOT NULL,
order_item INTEGER NOT NULL,
prod_id CHAR(10) NOT NULL,
quantity INTEGER NOT NULL DEFAULT 1,
item_price DECIMAL(8,2) NOT NULL);

    默认值经常用于日期或时间戳列,通常将系统日期用作默认日期。
在这里插入图片描述
更新表
    更新表定义,可以使用 ALTER TABLE 语句。
增加一个列:

ALTER TABLE Vendors
ADD vend_phone CHAR(20);

删除列:

ALTER TABLE Vendors
DROP COLUMN vend_phone;

添加主键约束

ALTER TABLE products
add [constraint PK_stuNo] primary key(prod_id)

删除主键约束:

ALTER TABLE  products 
drop primary key;

添加外键:

主表:
	create table vend(
	vend_id int auto_increment primary key,
	vend_price int DEFAULT 22,
	vend_name char(10) unique,
	vend_a int ZEROFILL)
从表
	CREATE TABLE Products
	(prod_id  int(10) NOT NULL,
	vend_id int(10) NOT NULL,
	prod_name CHAR(254) NOT NULL,
	prod_price DECIMAL(8,2) NOT NULL,
	prod_desc VARCHAR(1000) NULL,
	CONSTRAINT  pd_ve_ID FOREIGN KEY(vend_id) REFERENCES vend(vend_id)
	);
或直接:
	ALTER table products
	add CONSTRAINT  pd_ve_ID FOREIGN KEY(vend_id) REFERENCES vend(vend_id)

删除外键:

ALTER table products 
drop FOREIGN key pd_ve_ID

禁用外键约束SET FOREIGN_KEY_CHECKS = 0;
启用外键约束SET FOREIGN_KEY_CHECKS = 1;

外键中的级联关系:
        ON DELETE CASCADE 删除主表中的数据时,从表中的数据随之删除
        ON UPDATE CASCADE 更新主表中的数据时,从表中的数据随之更新
        ON DELETE SET NULL 删除主表中的数据时,从表中的数据置为空
        默认 删除主表中的数据前需先删除从表中的数据,否则主表数据不会被删除
    用法

	ALTER table products
	add CONSTRAINT  pd_ve_ID FOREIGN KEY(vend_id) REFERENCES vend(vend_id) 
	ON DELETE CASCADE 

约束:

ALTER TABLE products 
add constraint UQ_stuID unique(prod_id)

删除唯一约束:

ALTER TABLE products 
drop index UQ_stuID
或     drop index UQ_stuID on products 
实际就是删除索引

添加自增:(一般是主键)

alter table products
change prod_id  prod_id  int NOT NULL AUTO_INCREMENT [PRIMARY key]

删除自增:

alter table products MODIFY prod_id INT(10);

添加默认约束:

alter table products  MODIFY vend_id  INT(10) DEFAULT  2;

删除默认约束:

ALTER TABLE products  MODIFY vend_id INT(10);

添加零填充:

ALTER TABLE products  MODIFY vend_id INT(10) ZEROFILL;

删除零填充:

ALTER TABLE products  MODIFY vend_id INT(10) ;

查表的key结构:show keys from products;
显示表结构:desc products;

删除表

DROP TABLE CustCopy;
#永久删除该表

先判断再删除(判断表是否存在,存在则删除)drop table if exists products
重命名表

ALTER TABLE products  RENAME pr;
	DB2、 MariaDB、 MySQL、 Oracle 和 PostgreSQL 使用 RENAME语句
	SQL Server 使用 sp_rename 存储过程
	SQLite 用户使用 ALTER TABLE 语句

《sql必知必会》------day6
《sql必知必会》------day5
《sql必知必会》------day4
《sql必知必会》------day3
《sql必知必会》------day2
《sql必知必会》------day1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值