iLovEing / notebook

MIT License
0 stars 0 forks source link

MySQL #22

Open iLovEing opened 11 months ago

iLovEing commented 11 months ago

key

primary key:主键,表格的键值,可以同时设置多个属性,键值唯一 foreign key:外键,可以是自己表格或者其他表格的key(索引用)

同一个属性可以同时是主键&外键

iLovEing commented 11 months ago

资料库

1. 上述写法需要another_table_name已经创建,如果没有,则需要按添加属性写

ALTER TABLE student ADD FOREIGN KEY(brother_id) REFERENCES student(student_id) # 可以是自己 ON DELETE SET NULL;

2. ON DELETE指another_table_name 中没有 major_id时的操作,比如 set null(设置为空),cascade(删除该项)



- **删除表格**
DROP TABLE \`student\`;

- **显示信息**
DESCRIBE \`student\`;

- **添加/删除属性**
ALTER TABLE \`student\` ADD gpa DECIMAL(3, 2);
ALTER TABLE \`student\` DROP COLUMN gpa;
iLovEing commented 11 months ago

修改数据

注意,有foreign key循环依赖的情况,如果另一张表上没有这个key,会创建失败,可以先把属性值设为null

把student表中major等于英语的改为英语文学

UPDATE student SET major = "英语文学" # 注意这两处都没有分号 WHERE major = "英语";

WHERE中也可以用OR,AND关键词表达复杂条件;SET中可以用逗号添加多种操作


- **删除数据**

DELETE FROM student WHERE name = "小黑";

iLovEing commented 11 months ago

搜索数据

//比较重要,单独列出来

AVG

SELECT AVG(score) FROM student;

还有常用的 SUM MIN MAX


- 万能替代

%代表任意个字符,_代表一个字符

SELECT * FROM student WHERE phone LIKE "%3154"; # 以3154结尾的电话号码


- union 聚集

属性个数要相同, 属性值类型要相同。最后属性会用第一个

SELECT major FROM student UNION SELECT name FROM teacher;

SELECT major as another_name # 可以改属性名字 FROM student UNION SELECT name FROM teacher;


- join 连接

SELECT * # 选取最终集合的属性(这里是所有) FROM teacher # teacher表 JOIN student # 添加到student表格里 ON my_id = teacher_id ; # 索引条件是student的teacher id 等于teacher的my id

SELECT * FROM teacher JOIN student ON teacher.my_id = student.teacher_id ; # 详细写法,选择属性也可以这么用

使用left join和right jion,表示左边/右边的表全部选中,否则只有匹配条件的才选中


- subquery 子查询

把查询作为条件,这里表示找出大白所有的学生名

SELECT name FROM student WHERE teacher_id = ( # 如果子查询有多个结果,这里要加IN SELECT my_id FROM teacher WHERE name = 大白 );

iLovEing commented 11 months ago

python

cursor = connection .cursor ()

创建数据库库

cursor.execute(“CREATE DATABASE sql_tutoria; ”) cursor.execute(”SHOW DATABASES; “) record = cursor.fetchall() # 如果有回传内容,需要调用fetchall

使用资料库

cursor.execute(”USE sql_tutoria; “) #或者在创建连接的时候加database="sql_tutoria"参数

cursor.close() connection.commit() # 如果有修改数据库,需要调用commit() connection.close()