#cmd中打开mysql
mysql -u root -p
1.创建数据库,名称为cdadb;(如果已有,则省略)
create database cdadb;
2.创建数据表customer(客户)、desposite(存款)、bank(银行),表结构如下:
customer的表结构:
属性名称 | 类型与长度 | 中文含义 | 备注 |
---|---|---|---|
c_id | char(6) | 客户标识 | 主键,非空 |
name | varchar(30) | 客户姓名 | 非空 |
location | Varchar(30) | 工作地点 | |
salary | decimal(8,2) | 工资 |
#创建表
mysql> create table customer(
-> c_id char(6) primary key not null,
-> name varchar(30) not null,
-> location varchar(30),
-> salary decimal(8,2));
#显示表结构
mysql> desc customer;
+----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+-------+
| c_id | char(6) | NO | PRI | NULL | |
| name | varchar(30) | NO | | NULL | |
| location | varchar(30) | YES | | NULL | |
| salary | decimal(8,2) | YES | | NULL | |
+----------+--------------+------+-----+---------+-------+
bank的表结构:
属性名称 | 类型与长度 | 中文含义 | 备注 |
---|---|---|---|
b_id | char(5) | 银行标识 | 主键,非空 |
bank_name | char(30) | 银行名次 | 非空 |
#创建表
mysql> create table bank(
-> b_id char(5) primary key not null,
-> bank_name char(30) not null
-> );
#显示表结构
mysql> desc bank;
+-----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| b_id | char(5) | NO | PRI | NULL | |
| bank_name | char(30) | NO | | NULL | |
+-----------+----------+------+-----+---------+-------+
desposite的表结构:
属性名称 | 类型与长度 | 中文含义 | 备注 |
---|---|---|---|
d_id | int | 存款流水号 | 主键,非空,自增 |
c_id | char(6) | 客户标识 | 外键,关联customer表的c_id |
b_id | char(5) | 银行标识 | 外键,关联bank表的b_id |
dep _date | date | 存入日期 | |
dep_type | char(1) | 存款期限 | 1,3,5分别代表1年期、3年期和5年期 |
amount | decimal(8,2) | 存款金额 |
mysql> create table desposite(
-> d_id int primary key not null auto_increment,
-> c_id char(6),
-> b_id char(5),
-> dep_date date,
-> dep_type char(1),
-> amount decimal(8,2),
-> constraint de_c_id foreign key(c_id) references customer(c_id),
-> constraint de_b_id foreign key(b_id) references bank(b_id));
mysql> desc desposite;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| d_id | int(11) | NO | PRI | NULL | auto_increment |
| c_id | char(6) | YES | MUL | NULL | |
| b_id | char(5) | YES | MUL | NULL | |
| dep_date | date | YES | | NULL | |
| dep_type | char(1) | YES | | NULL | |
| amount | decimal(8,2) | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
总结:
1、创建表
create table 表名(
字段名1 数据类型 约束,
字段名2 数据类型 约束,
...
字段名n 数据类型 约束
);
2、展示表结构
desc 表名;
3、外键约束
(constraint 外键约束名) foreign key(本表中的某个字段) references 与本表约束表的表名(与本表约束表的字段)
3.录入数据如下:customer的数据如下,注意最后一条记录用你的学号和你的姓名代替。
c_id | name | location | salary |
---|---|---|---|
101001 | 孙杨 | 广州 | 1234 |
101002 | 郭海 | 南京 | 3526 |
101003 | 卢江 | 苏州 | 6892 |
101004 | 郭惠 | 济南 | 3492 |
你的学号 | 你的姓名 | 北京 | 6324 |
mysql> insert into customer(c_id,name,location,salary)
-> values('101001','孙杨','广州',1234),
-> ('101002','郭海','南京',3526),
-> ('101004','郭慧','济南',3492),
-> ('你的学号','你的名字','北京',6324);
mysql> select * from customer;
+----------+----------+----------+---------+
| c_id | name | location | salary |
+----------+----------+----------+---------+
| 101001 | 孙杨 | 广州 | 1234.00 |
| 101002 | 郭海 | 南京 | 3526.00 |
| 101004 | 郭慧 | 济南 | 3492.00 |
| 你的学号 | 你的名字 | 北京 | 6324.00 |
+----------+----------+----------+---------+
bank的数据如下:
b_id | bank_name |
---|---|
B0001 | 工商银行 |
B0002 | 建设银行 |
B0003 | 中国银行 |
B0004 | 农业银行 |
mysql> insert into bank(b_id,bank_name)
-> values ('B0001','工商银行'),
-> ('B0002','建设银行'),
-> ('B0003','中国银行'),
-> ('B0004','建设银行');
mysql> select * from bank;
+-------+-----------+
| b_id | bank_name |
+-------+-----------+
| B0001 | 工商银行 |
| B0002 | 建设银行 |
| B0003 | 中国银行 |
| B0004 | 建设银行 |
+-------+-----------+
desposite的数据如下:
d_id | c_id | b_id | dep_date | dep_type | amount |
---|---|---|---|---|---|
1 | 101001 | B0001 | 2011-04-05 | 3 | 42526 |
2 | 101002 | B0003 | 2012-07-15 | 5 | 66500 |
3 | 101003 | B0002 | 2010-11-24 | 1 | 42366 |
4 | 101004 | B0004 | 2008-03-31 | 1 | 62362 |
5 | 101001 | B0003 | 2002-02-07 | 3 | 56346 |
6 | 101002 | B0001 | 2004-09-23 | 3 | 353626 |
7 | 101003 | B0004 | 2003-12-14 | 5 | 36236 |
8 | 101004 | B0002 | 2007-04-21 | 5 | 26267 |
9 | 101001 | B0002 | 2011-02-11 | 1 | 435456 |
10 | 101002 | B0004 | 2012-05-13 | 1 | 234626 |
11 | 101003 | B0003 | 2001-01-24 | 5 | 26243 |
12 | 101004 | B0001 | 2009-08-23 | 3 | 45671 |
insert into desposite(d_id,c_id,b_id,dep_date,dep_type,amount)
-> values (1,'101001','B0001','2011-04-05','3',42526),
-> (2,'101002','B0003','2012-07-15','5',66500),
-> (3,'101003','B0002','2010-11-24','1',42366),
-> (4,'101004','B0004','2008-03-31','1',62362),
-> (5,'101001','B0003','2002-02-07','3',56346),
-> (6,'101002','B0001','2004-09-23','3',353626),
-> (7,'101003','B0004','2003-12-14','5',36236),
-> (8,'101004','B0002','2007-04-21','5',26267),
-> (9,'101001','B0002','2011-02-11','1',435456),
-> (10,'101002','B0004','2012-05-13','1',234626),
-> (11,'101003','B0003','2001-01-24','5',26243),
-> (12,'101004','B0001','2009-08-23','3',45671);
mysql> select * from desposite;
+------+--------+-------+------------+----------+-----------+
| d_id | c_id | b_id | dep_date | dep_type | amount |
+------+--------+-------+------------+----------+-----------+
| 1 | 101001 | B0001 | 2011-04-05 | 3 | 42526.00 |
| 2 | 101002 | B0003 | 2012-07-15 | 5 | 66500.00 |
| 3 | 101003 | B0002 | 2010-11-24 | 1 | 42366.00 |
| 4 | 101004 | B0004 | 2008-03-31 | 1 | 62362.00 |
| 5 | 101001 | B0003 | 2002-02-07 | 3 | 56346.00 |
| 6 | 101002 | B0001 | 2004-09-23 | 3 | 353626.00 |
| 7 | 101003 | B0004 | 2003-12-14 | 5 | 36236.00 |
| 8 | 101004 | B0002 | 2007-04-21 | 5 | 26267.00 |
| 9 | 101001 | B0002 | 2011-02-11 | 1 | 435456.00 |
| 10 | 101002 | B0004 | 2012-05-13 | 1 | 234626.00 |
| 11 | 101003 | B0003 | 2001-01-24 | 5 | 26243.00 |
| 12 | 101004 | B0001 | 2009-08-23 | 3 | 45671.00 |
+------+--------+-------+------------+----------+-----------+
总结:
1、插入多条记录
insert into person(字段名)
values (数据1),
(数据2),
...,
(数据n);
注:如果不指定字段名,那么数据需要和表结构里面字段名顺序一一对应
2、查询表中所有数据
select * from 表名;
4.更新customer表的salary属性,将salary低于5000的客户的salary变为原来的2倍.
分析:
本题是一道比较简单的更新数据的题目,故知道更新数据的语句语法即可完成该题。
更新数据的语句如下:
update 表名 set 列名 1 = 值 1(,列 2 = 值 2) (where 筛选列 = 筛选值)
题目要求salary变为原来的两倍,故set salary=salary*2;题目要求变成两倍的条件是salary低于5000 ,故where salary<5000
(1)更新数据的语句如下:
update 表名
set 列名 1 = 值 1(,列 2 = 值 2)
(where 筛选列 = 筛选值)
(2)由条件将语句替换
表明:customer
需更新的值的情况:salary变为原来的2倍 -> set salary=salary*2
筛选条件:salary低于5000 -> where salary<5000
MySQL语句如下:
mysql> select * from customer;
+----------+----------+----------+---------+
| c_id | name | location | salary |
+----------+----------+----------+---------+
| 101001 | 孙杨 | 广州 | 1234.00 |
| 101002 | 郭海 | 南京 | 3526.00 |
| 101004 | 郭慧 | 济南 | 3492.00 |
| 你的学号 | 你的名字 | 北京 | 6324.00 |
+----------+----------+----------+---------+
mysql>update customer set salary=salary*2 where salary<5000;
mysql> select * from customer;
+----------+----------+----------+---------+
| c_id | name | location | salary |
+----------+----------+----------+---------+
| 101001 | 孙杨 | 广州 | 2468.00 |
| 101002 | 郭海 | 南京 | 7052.00 |
| 101004 | 郭慧 | 济南 | 6984.00 |
| 你的学号 | 你的名字 | 北京 | 6324.00 |
+----------+----------+----------+---------+
5.对desposite表进行统计,按银行统计存款总数,显示为b_id,total。
分析:
本题要求我们按银行统计存款总数,故需要对银行(b_id)进行分组;题目还要统计存款总数,故需要对每个银行的存款(amount)进行汇总(sum);且注意题目要求显示b_id,total。
MySQL语句如下:
mysql> select b_id,sum(amount) as total from desposite group by b_id;
+-------+-----------+
| b_id | total |
+-------+-----------+
| B0001 | 441823.00 |
| B0002 | 504089.00 |
| B0003 | 149089.00 |
| B0004 | 333224.00 |
+-------+-----------+
6.对desposite、customer、bank进行查询,查询条件为location在广州、苏州、济南的客户,存款在300000至500000之间的存款记录,显示客户姓名name、银行名称bank_name、存款金额amount.
本题主要考核的是多表联合,在此处我使用的是内连接。
题目中要求客户的location在广州、苏州、济南,可采用in来进行查询;
且题目中要求该客户的存款在300000至500000之间,可采用between and来进行查询。
由于这两个题目是要求同时满足,使用and连接
mysql> select c.name,b.bank_name,d.amount
-> from desposite d inner join customer c inner join bank b
-> on d.c_id=c.c_id and d.b_id=b.b_id
-> where c.location in ('广州','苏州','济南') and d.amount between 300000 and 500000;
+------+-----------+-----------+
| name | bank_name | amount |
+------+-----------+-----------+
| 孙杨 | 建设银行 | 435456.00 |
+------+-----------+-----------+
注:
在给desposite表插入数据时出现了一项错误:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (
d
.
desposite
, CONSTRAINT
de_c_id
FOREIGN KEY (
c_id
) REFERENCES
customer
(
c_id
))
解决方法:
SET FOREIGN_KEY_CHECKS = 0;