计算机基础·MySQL
表格和键
- 键:基本单位
- 主键:唯一且不重复,注意可以由多个键来组成主键 下图橙色
- 外键:只能由主键组成 下图绿色
常用命令
CREATE DATABASE name
:创建资料库,使用``可以防止与关键字冲突SHOW DATABASES
:展示资料库,注意DATABASES
DROP DATABASE name
:删除资料库USE mysql_practise
:使用资料库CREATE TABLE
student(
stu_idINT PRIMARY KEY,
nameVARCHAR(10),
majorVARCHAR(20) );
创建表格,需要说明列名和类型,包括数据类型和键的类型(是否是主键)PRIMARY KEY()
:设置主键DESCRIBE
student`` 描述表格。ALTER TABLE
studentADD
GPADECIMAL(3,2)
增加表格列alter table
studentdrop column
GPA;
删除表格列INSERT INTO
studentVALUES(1,'AAA','MATH');
插入行,字符串用引号,但是键名称要用``符号!!!INSERT INTO
student(
stu_id,
major) VALUES(4,'CS');
,插入行,指定列内容。SELECT * FROM
student;
:查询表格内所有内容。
限制
对表格中的数据类型进行限制,例如限制unique不重复,限制非空,设置默认值等。
- ``name
VARCHAR(10) NOT NULL,
:限制非空 - ``major
VARCHAR(20) DEFAULT 'MATH',
:设置默认值为MATH - ``name
VARCHAR(10) UNIQUE
:限制不重复 - ``stu_id
INT AUTO_INCREMENT,
:自动加1
修改和删除资料
删除和修改资料对象不一样,区分好针对每一行还是每一列。
DELETE FROM
studentWHERE
name= 'AAA' AND
major='Chinese';
:删除某一行,配合WHERE
使用SET SQL_SAFE_UPDATES=0; UPDATE
studentSET
name='Johnson' WHERE
major='ART';
:修改某一列的内容,不加限制WHERE
默认修改这一列。
查询资料
SELECT * FROM
student``:查询所有的资料(理解为所有列)SELECT * FROM
student``:查询某一列的资料WHERE
major='Chinese'
:条件判断语句ORDER BY
stu_idDESC
:按照某一列的内容排序,DESC代表降序,ASC代表升序LIMIT 1
:限制显示多少条数据。select * from
clientwhere
client_nameIN('阿狗','阿猫');
查找某一个子集的元素。
创建复杂数据库
FOREIGN KEY(
emp_id) REFERENCES
employee(
emp_id)
:外键依赖目标数据,必须存在才能添加数据,否则只能添加NULL
。- 注意:
employee
这个表格创建时暂时不能定义外键。
SHOW DATABASES;
# 创建employee表格
CREATE TABLE `employee`(`emp_id` INT PRIMARY KEY,`name` VARCHAR(20),`birth_date` DATE,`sex` VARCHAR(1),`salary` INT,`branch_id` INT,`sup_id` INT
);# branch
CREATE TABLE `branch`(
`branch_id` INT PRIMARY KEY,
`branch_name` VARCHAR(20),
`manager_id` INT,
FOREIGN KEY (`manager_id`) REFERENCES `employee`(`emp_id`) ON DELETE SET NULL
);
DESCRIBE `branch`;# 增加employee的外键
ALTER TABLE `employee`
ADD foreign key(`branch_id`)
REFERENCES `branch`(`branch_id`)
ON DELETE SET NULL;ALTER TABLE `employee`
ADD FOREIGN KEY(`sup_id`)
references `employee`(`emp_id`)
ON DELETE SET NULL;
DESCRIBE `employee`;# client
CREATE TABLE `client`(
`client_id` INT PRIMARY KEY,
`client_name` VARCHAR(20),
`phone` VARCHAR(20)
);
DESCRIBE `client`;# works_with
CREATE TABLE `works_with`(
`emp_id` INT,
`client_id` INT,
`total_sales` INT,
PRIMARY KEY(`emp_id`,`client_id`),
FOREIGN KEY(`emp_id`)
REFERENCES `employee`(`emp_id`)
ON DELETE CASCADE,FOREIGN KEY(`client_id`)
REFERENCES `client`(`client_id`)
ON DELETE CASCADE
);
DESCRIBE `works_with`;# 外键相互依赖的情况下,一般先设置其中一个为NULL
INSERT INTO `branch` VALUES(1,'研发',NULL);
INSERT INTO `branch` VALUES(2,'行政',NULL);
INSERT INTO `branch` VALUES(3,'资讯',NULL);
SELECT * FROM `branch`;# 补全employee表格
DESCRIBE `employee`;
INSERT INTO `employee` VALUES(206,'小黄','1998-10-08','F',50000,1,null);
INSERT INTO `employee` VALUES(207,'小绿','1985-09-16','M',29000,2,206);
INSERT INTO `employee` VALUES(208,'小黑','2000-12-19','M',35000,3,206);
INSERT INTO `employee` VALUES(209,'小白','1997-01-22','F',39000,3,207);
INSERT INTO `employee` VALUES(210,'小兰','1925-11-10','F',84000,1,207);
select * from `employee`;# 更新manager_id
UPDATE `branch`
SET `manager_id`=206
where `branch_id`=1;
UPDATE `branch`
SET `manager_id`=207
where `branch_id`=2;
UPDATE `branch`
SET `manager_id`=208
where `branch_id`=3;
select * from `branch`;# 增加数据 client
select * from `client`;
INSERT INTO `client` VALUES(400,'阿狗',254354335);
INSERT INTO `client` VALUES(401,'阿猫',23789);
INSERT INTO `client` VALUES(402,'旺来',3264782);
INSERT INTO `client` VALUES(403,'露西',6728631);
INSERT INTO `client` VALUES(404,'艾瑞克',187832);# 增加数据 works_with
select * from `works_with`;
INSERT INTO `works_with` VALUES(206,400,70000);
INSERT INTO `works_with` VALUES(207,401,24000);
INSERT INTO `works_with` VALUES(208,400,9800);
INSERT INTO `works_with` VALUES(208,403,24000);
INSERT INTO `works_with` VALUES(210,404,87940);
基本函数
COUNT、SUM、MAX、MIN、AVG
:聚合函数,一般和SELECT FROM
搭配使用
SQL语言的通配符
- %多个字符,_单个字符
select * from `client` where `phone` like '%783%';
select * from `client` where `client_name` like '艾%';
select * from `employee` where `birth_date` like '_____12%';
UNION和JOIN
UNION
- UNION 简单纵向的拼接查询结果,理解为stack
- 两个表格拼接的数据和类型必须完全一致
- 与
SELECT FROM
搭配使用
select `name` from `employee`
UNION
select `client_name` from `client`;select `emp_id`,`name` from `employee`
UNION
select `client_id`,`client_name` from `client`;select `salary` from `employee`
UNION
select `total_sales` from `works_with`;
JOIN
- 类似
pandas
的merge
函数,就是将两个表格合并为同一张表格,而不是简单的纵向拼接。 LEFT
就是强制保留“左侧”表格,RIGHT
就是强制保留右侧表格。- 左右的划分是根据
JOIN
决定的。 - 注意:使用
表格名.列名
来代表合并的元素!
select `employee`.`emp_id`,`employee`.`name`,`branch`.`branch_name` from `employee`
JOIN `branch` on `employee`.`emp_id`=`branch`.`manager_id`;
基本界面
执行单行命令:全选然后点击闪电。
执行光标所在处的语句,不需要选中。