sql必知必会(第五版)学习总结(一)--mysql预备知识汇总

目录

一:mysql的基础知识

二:mysql用户有关命令

三:创建更新删除数据表

3.1 创建表

3.2 更新表

3.3 删除表

四.插入更新删除数据

4.1数据插入

4.2 更新数据

4.3 删除数据


说明:本文是对sql必知必会(第五版)的学习总结,具体使用的数据库是mysql.

           这篇文章中主要对mysql的基础知识,用户相关命令,创建,更新,删除表等进行总结。

一:mysql的基础知识

1)数据库(database): 保存有组织的数据库。

2)表(table) : 特定类型的数据结果化清单。

                      存储在表中的数据是一种类型的数据或者一个清单的数据

3)主键(primary key):

     表中每一行都应该有可以唯一标识自己的列,一列中唯一能够识别表中的每一行的值

    在设计表是应该总是设计带有主键,设置为主键瞒着的条件为:

  • 任意两行都不具有相同的主键值
  • 每个行都必须带有主键值(主键值列不允许为null)
  • 主键列中的值不允许修改更新
  • 主键值不能重用。

二:mysql用户有关命令

1)进入数据库:

mysql -u root -p
接着按照提示输入密码即可登陆成功

2)修改mysql密码

$ mysql -u root
mysql> USE mysql;
mysql> UPDATE user SET authentication_string=PASSWORD("NEWPASSWORD") WHERE User='root';

3)创建,查询,删除用户

// 创建
mysql> CREATE USER 'test1'@'localhost' identified by '1234567';
Query OK, 0 rows affected (0.00 sec)
//查询
mysql> SELECT USER FROM mysql.user; 查询所有用户
mysql> SHOW GRANTS For [email protected]'localhost'; 查询具体某个用户
//删除
mysql> DROP USER 'test1'@'localhost';
Query OK, 0 rows affected (0.01 sec)

三:创建更新删除数据表

3.1 创建表

可以使用交互式工具进行操作,这儿主要讲解使用mysql语句进行创建

利用 create table 表名 来创建表

需以下信息:

  • 新表的名字,在关键字CREATE TABLE之后
  • 表列的名字和定义,用逗号隔开。
  • 该列是否可为null

3.2 创建《SQL必知必会》本书所需要的所有数据表


CREATE TABLE 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 
);

-- -----------------------
-- Create OrderItems table
-- -----------------------
CREATE TABLE 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 
);


-- -------------------
-- Create Orders table
-- -------------------
CREATE TABLE Orders
(
  order_num  int      NOT NULL ,
  order_date datetime NOT NULL ,
  cust_id    char(10) NOT NULL 
);

-- ---------------------
-- Create Products table
-- ---------------------
CREATE TABLE Products
(
  prod_id    char(10)      NOT NULL ,
  vend_id    char(10)      NOT NULL ,
  prod_name  char(255)     NOT NULL ,
  prod_price decimal(8,2)  NOT NULL ,
  prod_desc  text          NULL 
);

-- --------------------
-- Create Vendors table
-- --------------------
CREATE TABLE 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 
);


-- -------------------
-- Define primary keys
-- -------------------
ALTER TABLE Customers ADD PRIMARY KEY (cust_id);
ALTER TABLE OrderItems ADD PRIMARY KEY (order_num, order_item);
ALTER TABLE Orders ADD PRIMARY KEY (order_num);
ALTER TABLE Products ADD PRIMARY KEY (prod_id);
ALTER TABLE Vendors ADD PRIMARY KEY (vend_id);


-- -------------------
-- Define foreign keys
-- -------------------
ALTER TABLE OrderItems ADD CONSTRAINT FK_OrderItems_Orders FOREIGN KEY (order_num) REFERENCES Orders (order_num);
ALTER TABLE OrderItems ADD CONSTRAINT FK_OrderItems_Products FOREIGN KEY (prod_id) REFERENCES Products (prod_id);
ALTER TABLE Orders ADD CONSTRAINT FK_Orders_Customers FOREIGN KEY (cust_id) REFERENCES Customers (cust_id);
ALTER TABLE Products ADD CONSTRAINT FK_Products_Vendors FOREIGN KEY (vend_id) REFERENCES Vendors (vend_id);

格式:

create table name{

列名一    数据类型   是否可为null

列名一    数据类型   是否可为null

}

[ 注意]:只有不允许null的值的列可作为主键,允许null值的列不能作为唯一标识。

3.2 更新表

使用 ALTER TABLE 语句来更新内容,但有几个地方要注意

  • 表中包含数据是不用对其进行更新。
  • 所有的DBMS都允许表添加列
  • 许多DBMS不允许删除更新列
  • ALTER TABLE 之后给出要更改的表面。
  • 所做更改的列表

#给Vendors 表添加一个列,数据类型为CHAR

ALTER TABLE Vendors
ADD vend_phone CHAR(20);

# 把Vendors表的vend_phone列删除

ALTER TABLE Vendors
DROP COLUMN vend_phone;

3.3 删除表

drop table + 表名

DROP TABLE CustCopy;

四.插入更新删除数据

4.1数据插入

使用insert into  ...... values 语句进行数据插入

insert用来插入(添加)行到数据库,对应有下面三种情况。

  • 插入完整的行
  • 插入行的一部分
  • 插入某些查询结果

1)插入完整的行

# 编写依赖与特定列次序的SQL语句,这样做有时会出错,但编写方便。

INSERT INTO Customers
VALUES('1000000006',
     'Toy Land',
     '123 Any Street',
     'New York',
     'NY',
     '11111',
     'USA',
     NULL,
     NULL);

上面方法一般不推荐使用,我们一般使用指定顺序插入数据,即指定列名,指定数据

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

2)插入部分行

指定某列提供值,其他的不提供值。

INSERT INTO Customers(cust_id,
     cust_contact,
     cust_email,
     cust_name,
     cust_address,
    )
     VALUES('1000000009',
     NULL,
     NULL,
     'Toy Land',
     '123 Any Street'     
     );

3)插入某些查询结果

INSERT INTO CustomersNew(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 Customers;

作用:将CustomersNew所有的数据导入Customers

【注意】:没有使用values关键字

补充:此处将我们后面需要用到的Customers,Orders,ItemOrders,vendors,Products插入数据的代码呈现出来


INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES('1000000001', 'Village Toys', '200 Maple Lane', 'Detroit', 'MI', '44444', 'USA', 'John Smith', '[email protected]');
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact)
VALUES('1000000002', 'Kids Place', '333 South Lake Drive', 'Columbus', 'OH', '43333', 'USA', 'Michelle Green');
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES('1000000003', 'Fun4All', '1 Sunny Place', 'Muncie', 'IN', '42222', 'USA', 'Jim Jones', '[email protected]');
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact, cust_email)
VALUES('1000000004', 'Fun4All', '829 Riverside Drive', 'Phoenix', 'AZ', '88888', 'USA', 'Denise L. Stephens', '[email protected]');
INSERT INTO Customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country, cust_contact)
VALUES('1000000005', 'The Toy Store', '4545 53rd Street', 'Chicago', 'IL', '54545', 'USA', 'Kim Howard');

-- ----------------------
-- Populate Vendors table
-- ----------------------
INSERT INTO Vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES('BRS01','Bears R Us','123 Main Street','Bear Town','MI','44444', 'USA');
INSERT INTO Vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES('BRE02','Bear Emporium','500 Park Street','Anytown','OH','44333', 'USA');
INSERT INTO Vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES('DLL01','Doll House Inc.','555 High Street','Dollsville','CA','99999', 'USA');
INSERT INTO Vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES('FRB01','Furball Inc.','1000 5th Avenue','New York','NY','11111', 'USA');
INSERT INTO Vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES('FNG01','Fun and Games','42 Galaxy Road','London', NULL,'N16 6PS', 'England');
INSERT INTO Vendors(vend_id, vend_name, vend_address, vend_city, vend_state, vend_zip, vend_country)
VALUES('JTS01','Jouets et ours','1 Rue Amusement','Paris', NULL,'45678', 'France');

-- -----------------------
-- Populate Products table
-- -----------------------
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BR01', 'BRS01', '8 inch teddy bear', 5.99, '8 inch teddy bear, comes with cap and jacket');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BR02', 'BRS01', '12 inch teddy bear', 8.99, '12 inch teddy bear, comes with cap and jacket');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BR03', 'BRS01', '18 inch teddy bear', 11.99, '18 inch teddy bear, comes with cap and jacket');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BNBG01', 'DLL01', 'Fish bean bag toy', 3.49, 'Fish bean bag toy, complete with bean bag worms with which to feed it');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BNBG02', 'DLL01', 'Bird bean bag toy', 3.49, 'Bird bean bag toy, eggs are not included');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('BNBG03', 'DLL01', 'Rabbit bean bag toy', 3.49, 'Rabbit bean bag toy, comes with bean bag carrots');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('RGAN01', 'DLL01', 'Raggedy Ann', 4.99, '18 inch Raggedy Ann doll');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('RYL01', 'FNG01', 'King doll', 9.49, '12 inch king doll with royal garments and crown');
INSERT INTO Products(prod_id, vend_id, prod_name, prod_price, prod_desc)
VALUES('RYL02', 'FNG01', 'Queen doll', 9.49, '12 inch queen doll with royal garments and crown');

-- ---------------------
-- Populate Orders table
-- ---------------------
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20005, '2020-05-01', '1000000001');
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20006, '2020-01-12', '1000000003');
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20007, '2020-01-30', '1000000004');
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20008, '2020-02-03', '1000000005');
INSERT INTO Orders(order_num, order_date, cust_id)
VALUES(20009, '2020-02-08', '1000000001');

-- -------------------------
-- Populate OrderItems table
-- -------------------------
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20005, 1, 'BR01', 100, 5.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20005, 2, 'BR03', 100, 10.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20006, 1, 'BR01', 20, 5.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20006, 2, 'BR02', 10, 8.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20006, 3, 'BR03', 10, 11.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 1, 'BR03', 50, 11.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 2, 'BNBG01', 100, 2.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 3, 'BNBG02', 100, 2.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 4, 'BNBG03', 100, 2.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20007, 5, 'RGAN01', 50, 4.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 1, 'RGAN01', 5, 4.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 2, 'BR03', 5, 11.99);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 3, 'BNBG01', 10, 3.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 4, 'BNBG02', 10, 3.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20008, 5, 'BNBG03', 10, 3.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 1, 'BNBG01', 250, 2.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 2, 'BNBG02', 250, 2.49);
INSERT INTO OrderItems(order_num, order_item, prod_id, quantity, item_price)
VALUES(20009, 3, 'BNBG03', 250, 2.49);

4.2 更新数据

使用update....set语句

UPDATE Customers
SET cust_email = '[email protected]'
WHERE cust_id = '1000000005';

4.3 删除数据

DELETE FROM Customers 
WHERE cust_id = '1000000009';

用于删除表中指定的数据

补充:更新和删除的原则

  • UPDATE跟DELETE语句都具有WHERE子句,如果忽略WHERE子句建会应用到所有行,所以除非更新所有行
  • 保证每个表都有主键,WHERE应用到主键。
  • 使用UPDATE和DELETE语句前先,先SELECT进行测试,确保编写的WHERE子句正确。
  • 使用强制实施引用完整性数据库,防止误删除行。
  • 现在MYSQL不带有WHERE子句的UPDATE或DELETE子句执行。

猜你喜欢

转载自blog.csdn.net/yezonghui/article/details/112858475