参考b站视频0基础入门
【数据库】SQL 3小时快速入门 #数据库教程 #SQL教程 #MySQL教程 #database#Python连接数据库_哔哩哔哩_bilibili
以下是笔记(基本对照讲的内容敲的)
一、入门概念
主键(primary key):唯一区分 不重复
外键(branch_id):只能对应表格的主键/也可以对应自己表格的主键
*可以有多个主键 属性不可唯一表示(组合属性 表示唯一资料)
二、sql语法
cmd 进入 mysql -u root -p
CREATE DATABASE sql_tutorial
;``可以区分 //创建资料库
SHOW DATABASES; //显示数据库
DROP DATABASE ``; //删除资料库
DESCRIBE c; //显示表格属性
ALTER TABLE `` ADD/DROP COLUMN; //增加/删除属性
INSER INTO `` VALUES(); // 增加资料
UPDATE branch
... SET...WHERE...; //修改资料
SELECT * FROM `` ORDER BY DESC ; //取得所有资料 降序排序
LIMIT 3; //限制资料数目
6种资料形态
int 整数
decimal(m,n) 有小数点(几位数,小数点占几位)
VARCHAR(n) 字串(最大长度)
BLOB 二进制资料 图片,影片etc
DATE 日期'yyyy-mm-dd'
TIMESTAMP 记录时间
创建资料库表格
USE ``; //使用表格
CREATE DATABASE `sql_tutorial`; SHOW DATABASES; USE `sql_tutorial`; CREATE TABLE `student`( `student_id` INT PRIMARY KEY, `name` VARCHAR(20), `major` VARCHAR(20) -- 也可以PRIMARY KEY(`student_id`)设置主键 /*设置外键 FOREIGN KEY (`manager_id`) REFERENES `employee`(`emp_id`) ON DELETE SET NULL */ ); DESCRIBE `student`; -- 显示表格属性-对应设计表 DROP TABLE `student`; ALTER TABLE `student` ADD gpa DECIMAL(3,2); -- 增加属性 ALTER TABLE `student` DROP COLUMN gpa; -- 删除属性
根据属性存入资料
INSERT INTO `student` VALUES(1,'小白','历史'); -- 存入一笔资料 SELECT * FROM `student`; -- 搜寻表格中全部资料 INSERT INTO `student`(`name`,`major`,`student_id`) VALUES('小黑',NULL,3); -- 自定义存储属性顺序 注意 主键不能重复 不写默认NULL
constraints 限制 约束
#在CREATE的时候加上 CREATE TABLE `student`( `student_id` INT AUTO_INCREMENT, #自动+1 后续不需要手动输入 `name` VARCHAR(20) NOT NULL, -- 非空 `major` VARCHAR(20) UNIQUE, -- 唯一 `teacher` VARCHAR(20) DEFAULT '教务处', -- 默认 PRIMARY KEY(`student_id`) );
修改删除资料
SET SQL_SAFE_UPDATES = 0; -- 将预设内容先删除 CREATE TABLE `student`( `student_id` INT PRIMARY KEY, `name` VARCHAR(20), `major` VARCHAR(20), `score` INT ); SELECT * FROM `student`; //选中`student`表格中的所有内容 -- 修改资料 UPDATE `student` -- 更新student表格的资料 SET `major` = `英语文学` #将major改为英语文学 WHERE `major` = `英语`; #条件:major=英语 SET `major` = '生化', `name` = '小红' #修改两个资料 WHERE `major` = '生物' OR `major` = '化学'; #选中两个条件 -- 删除资料 DELETE FROM `student` WHERE `name` = '小黑' AND `major` = '物理'; WHERE `score` > 60; #> >= <= < <>
区别:drop是删除表 delete是删除表中资料(保留列名)
获取资料SELECT
SELECT * FROM `student`; -- *为取得所有属性 SELECT `name`,`major` FROM `student`; -- 选择指定属性 SELECT DISTINCT `sex` FROM `employee`; -- 不重复 SELECT * FROM `student` ORDER BY `score` DESC; #默认由低到高ASC 升序排列 DESC降序排列 SELECT * FROM `student` ORDER BY `score`, `student_id` -- 先比较score 相同比较student_id LIMIT 2; #限制回传资料数量 SELECT * FROM `student` WHERE `major` IN('历史','生物','英语'); -- 判读有无在括号内内容 等同于OR
聚合函数aggregate functions
SELECT COUNT(*) FROM `employee` -- 计数 WHERE `date` > '1970-01-01' AND `sex` = 'F'; #加入条件 SELECT AVG(`salary`) FROM `salary`; -- 平均数 SELECT SUM(`salary`) FROM `employee`; -- 计算总和 SELECT MAX(`salary`) FROM `employee`; -- 取最高 SELECT MIN(`salary`) FROM `employee`; -- 取最低
万用字元wildcards %多个 _单个
SELECT * FROM `client` WHERE `phone` LIKE '%335'; -- 判断尾数是不是335 %代表多个字元 '%335'尾数 '254%'开头 '%254%' SELECT * FROM `client` WHERE `phone_name` LIKE '艾%'; #LIKE '_____12%' 避免重复
并集union -- 属性合并
-- 两个相同属性合并 SELECT `name` FROM `employee` UNION SELECT `employee_name` FROM `client` UNION SELECT `branch_name` FROM `branch`; -- 多属性 SELECT `emp_id` AS `total_id`,`name` -- AS可以改名字 FROM `employee` UNION SELECT `client_id`,`client_name`;
连接join -- 连接两张表
SELECT `emp_id`,`name`,`branch_id` FROM `employee` JOIN `branch` #branch加在后边(右边) ON `employee`.`emp_id` = `branch`.`manager_id`; #条件 也可以加入``.``,方便分辨属性来自的表格 LEFT JOIN ON...; -- 左加入 无论条件有无成立资料全部回传(左表格) 不符合返回NULL(右表格) -- RIGHT JOIN 右边表格全部回传
子查询subquery
-- 找到表中结果 再找对应表中具体内容 查询(查询) SELECT `name` FROM `employee` WHERE `emp_id` = ( #如果有多个结果 WHERE `` IN() SELECT `manager_id` FROM `branch` WHERE `branch_name` = '研发'; );
ON DELETE(FOREIGN KEY)
FOREIGN KEY(m) REFERENCES`e`(`i`) ON DELETE SET NULL; -- 对应的内容被删除 表中FOREIGN KEY设置NULL 如表中i被删 m置NULL (外键对应主键 对应不到删除) FOREIGN KEY(m) REFERENCES``(``) ON DELETE CASCADE; -- 可能都是主键 相同内容在两个表中 对应不到删除
三、python连接mysql
import mysql.connector
connection = mysql.connector.connect(host='localhost',
port='3306',
user='root',
pasxword='',
database='sql_tutorial')
cursor = connection.cursor()
cursor.execute('"USE sql_tutorial
;") #选择资料库
cursor.execute('SELECT * FROM branch
;') #取得资料
cursor.close()
connection.close()
以上 有错请指出!