mysql授权、关联查询、主外键关系

创建用户:

无密码:

create user bbb@localhost;

加密码的: 

create user bbb@localhost identified by "123";

创建用户远程登录:

create user 'bbb'@'10.10.65.%' identified by "123"; // 允许10.10.65.0-10.10.65.255以bbb登录 mysql

删除用户:

drop user bbb@'10.10.65.%';

授权: 

Grant select on school.person to bbb@localhost; //将school数据库的person表的查询权限授权给以localhost登录bbb用户
Grant insert on school.person to bbb@localhost; //将school数据库的person表的插入权限授权给以localhost登录bbb用户
Grant delete on school.person to bbb@localhost; //将school数据库的person表的删除权限授权给以localhost登录bbb用户
Grant update on school.person to bbb@localhost; //将school数据库的person表的更新权限授权给以localhost登录bbb用户
Grant select(id,name) on school.person to bbb@localhost; //将school数据库的person表的id和name字段的查询权限授给以localhost登录bbb用户
Grant select,insert,update,delete on school.person to bbb@localhost; //将school数据库的person表的增删改查权限授给以localhost登录bbb用户

关联查询

1、创建学校数据库

create database school charset="utf8";

2、创建老师,课程,老师课程三个表

use school;
create table teacher(id int primary key auto_increment,name char(30),gend
er char(6),age int) charset="utf8";
create table classes(id int primary key auto_increment,label char(30),des
cription text) charset="utf8";
create table t_classes(id int primary key auto_increment,t_id int,c_id in
t,delete_flag char(4)) charset="utf8";

3、插入数据

#coding:utf-8
import random
import pymysql


#v3 装饰器版本
from functools import partial

def exect(cursor,sql):
	try:
		cursor.execute(sql)
	except Exception as e:
		print(e)
	else:
		print(sql)

def outer(fun):
	def inner(database = "school"):
		db = pymysql.connect(
			user = "root",
			password = "1111",
			host = "localhost",
			database = database,
			charset = "utf8"
		)

		cursor = db.cursor()
		sqls = fun()
		func = partial(exect,cursor)
		if isinstance(sqls,list):
			for sql in sqls:
				func(sql)
		elif isinstance(sqls,str):
			func(sqls)
		db.commit()
		cursor.close()
		db.close()
	return inner

#插入老师
@outer
def inser_teacher():
 	sqls = []
	last_name = list("赵钱孙李周吴郑王")
 	string = "苏宇轩 苏雨扬 苏雨璇 苏宇璇 苏苏 苏真真 苏雨熙 苏雨萱 苏雨轩 苏黎民 苏忠民 苏嘉毅 苏红 苏瀛 苏远航 苏伟祺 苏宸逸 苏益漫 苏卿尧 苏启尧 苏艺潇 苏绾铎 苏悠然 苏幽然 苏钰 苏俊喜 苏玲珑 苏毅尧 苏妍 苏元礤 苏子又 苏宇童 苏宇童 苏哇滕 苏云瑞 苏熙羟 苏博睿 苏紫菡 苏紫涵 苏文萱 苏雅然 苏佳晨 苏语晨 苏雨晨 苏贝晨 苏诗晗 苏欣妍 苏子萱 苏诗涵 苏依辰 苏依晨 苏晨萱 苏晨菲 苏晨希 苏晨曦 苏喧莹 苏喧妍 苏喧婷 苏昕雨 苏昕月 苏煜云 苏瑾琳 苏瑾 苏仁辙 苏湃濡 苏金月 苏金昌 苏文斌 苏煜轩 苏影 苏尚梅 苏锦曦 苏格格 苏昕靓 苏施雅 苏熙宸 苏冀彦 苏倩 苏袁 苏能 苏晓 苏焕迪 苏治诚 苏珍 苏乙祗 苏乙桓 苏姵莹 苏一员 苏眧臣 苏稔涵 苏广溢 苏子默 苏至朗 苏城朗 苏佳朗 苏圣朗 苏佩 苏钰涵 苏美琪 苏麒午 苏亚斌 苏宦安 苏凤菊 苏煜森 苏春喜 苏一涵 苏子生 苏一铭 苏铭铭 苏昕铭 苏智铭 苏鑫铭 苏学铭 苏跃铭 苏岳铭 苏越铭 苏壹铭 苏二铭 苏毅铭 苏子铭 苏康铭 苏亦铭 苏威铭 苏守铭 苏世铭 苏金铭 苏晓铭 苏珊 苏烨 苏琪 苏梦琪 苏欣悦 苏炘悦 苏刚 苏丽君 苏丽鑫 苏晶晶 苏婉灵 苏廷婷 苏怡婷 苏剑婷 苏醒 苏晨醒 苏婷婷 苏雯婷 苏恒运 苏君怡 苏文娟 苏文涓 苏建坤 苏宇杰 苏娅菲 苏子依 苏子怡 苏拉琪 苏子琪 苏子衡 苏子恒 苏子坤 苏子趟 苏子禾".replace("苏","").split(" ")
 	for i in range(100):
		name = random.choice(last_name)+random.choice(string)
		gender = random.choice("男女")
		age = random.randint(20,40)
		sql = "insert into teacher(name,gender,age) value('%s','%s',%s)"%(name,gender,age)
 		sqls.append(sql)
	return sqls

# 插入课程表
@outer
def insert_class():
	sqls = []
 	pro = ["python","c","java","php","linux"]
 	for index,i in enumerate(pro):
		description = "%s 是世界上第%s好的语言"%(i,index+1)
		sql = "insert into classes(label,descript) value('%s','%s')"%(i,description)
 		sqls.append(sql)
 	return sqls

# 插入老师课程表
@outer
def insert_tClass():
	sqls = []
	for i in range(200):
		t_id = random.randint(1,100)
		c_id = random.randint(1,5)
		sql = "insert into t_classes(t_id,c_id,delete_flag) value(%s,%s,'T')"%(t_id,c_id)
		sqls.append(sql)
	return sqls
if __name__ == '__main__':
	inser_teacher()
    insert_class()
	insert_tClass()
    

4、查询

查询课程id为1的所有老师

SELECT
*
FROM
    teacher
WHERE
    id = ( SELECT t_id FROM t_classes WHERE c_id = 1 );

查询id为1的老师对应的课程和描述

SELECT
    c.label,
    c.description
FROM
    classes AS c,
    t_classes AS tc
WHERE
    tc.t_id = 1
AND 
    tc.c_id = c.id;

查找id为1的老师的名字、课程和对应描述

SELECT
    t.NAME,
    c.label,
    description
FROM
    classes AS c,
    t_classes AS tc,
    teacher AS t
WHERE
    tc.t_id = 1
AND tc.c_id = c.id
AND tc.t_id = t.id;

 主外键关系

一个宿舍有多位同学,一个同学只有一个宿舍 一对多

创建同学和宿舍表

CREATE
     TABLE student
(study_num INT PRIMARY KEY auto_increment,name CHAR(30),gender CHAR(10),age int,home_id int);
CREATE
     TABLE home
(label CHAR(30),address char(50));

 查询201宿舍住着哪几位同学

SELECT
   NAME,
    age,
    home_id
FROM
    student
WHERE
    home_id = ( SELECT id FROM home WHERE lable = "201" );

查询王晶同学在哪个宿舍

SELECT
lable,
adderss
FROM
    home
WHERE
id = ( SELECT home_id FROM student WHERE NAME = "王晶" );

定义的时候创建外键

CREATE TABLE students (

id INT PRIMARY KEY auto_increment,

NAME CHAR ( 30 ),

home_id INT,

FOREIGN KEY ( home_id ) REFERENCES home ( id ) );

定义好的表添加外键,外键字段必须先存在

ALTER TABLE student ADD FOREIGN KEY (home_id) REFERENCES home (id);

关联查询

左表--》 学生                       右表--》宿舍

Join左边为左表                    Join右边为右表

Inner join 内关联查询

SELECT
*
FROM
student
INNER JOIN home
WHERE
home.id = student.home_id

取左表的所有和左右两表的交集

取所有学生对应的宿舍

SELECT
*
FROM
student
INNER JOIN home
WHERE
home.id = student.home_id

取右表的所有和左右两表的交集

取所有宿舍对应的学生

模糊查询

SELECT * FROM student WHERE name like "李%";

 查找姓李的所有学生

猜你喜欢

转载自blog.csdn.net/weixin_42223833/article/details/88650177