mysql

多级用户管理

use mysql;

---查询当前数据库下的用户
select * from user;

---创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
--展示doubao的权限列表
show grants  for  'doubao'@'localhost';


show grants  for  'root'@'localhost';


-- 授予doubao用户在doubao数据库下的所有权限
grant all on  mao.* to 'doubao'@'localhost';



-- 刷新权限
FLUSH PRIVILEGES;

创建宠物表

show databases;


use mao;




----设计两个表 宠物表以及主人表 设置外键关联的字段为 pet_id

--查看当前选择的数据库
SELECT database();
 


-- 创建宠物表
CREATE TABLE pet (
    pet_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '宠物ID',
     -- 设置主键为 id属性 非空 自增
    pet_name VARCHAR(50) NOT NULL COMMENT '宠物名字',
    pet_age INT NOT NULL COMMENT '年龄',

    pet_sex ENUM('公', '母') COMMENT '性别',
        --ENUM是一个字符串对象,其值是从列创建时定义的允许值列表中选择的
    pet_salary VARCHAR(50) COMMENT '工资'
) COMMENT '宠物表';
pet_id pet_name pet_age pet_sex pet_salary
(N/A) (N/A) (N/A) (N/A) (N/A)
创建主人表
-- 再创建 master 表
CREATE TABLE master (
    master_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主人id',
    master_name VARCHAR(50) NOT NULL COMMENT '主人名字',
    master_sex ENUM('男', '女') COMMENT '性别',
    CONSTRAINT fk_master_pet_id  -- 正确约束命名
        FOREIGN KEY (master_id) 
        REFERENCES pet(pet_id)   -- 关联目标字段需存在且类型匹配
);
master_id master_name pet_sex
(N/A) (N/A) (N/A)

这里目前是没有进行数据添加的,将master_id的主键作为外键去关联pet表的id字段。这样就看起来比较直观一些 constraint<外键名字> foreigin key <当前表被引用为外键的字段>

  • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确
  • 外键中列的数目必须和主表的主键中列的数目相同。
  • 外键中列的数据类型必须和主表主键中对应列的数据类型相同。

这里我们在navicat里可以看到 二者之间的表关联

一下为数据库一些结构知识的讲解

查询数据表有哪些列

  show columns from <表名>;

查询数据表的原代码

show create table <表名>;

修改表字段

在表字段后增加字段

ALTER TABLE <表名>

 ADD COLUMN  <新字段> int(50) DEFAULT NULL COMMENT'粉丝'
 AFTER <旧字段>;

update语句

UPDATE table_name
SET column_name1 = value1,column_name2=value2,
ordery by <表名> desc
limit <参数>
WHERE (condition);

● UPDATE子句,选择要修改的表;UPDATE子句只执行一次;

● IGNORE关键字可写可不写,作用是在写入数据的时候,如果遇到冲突就直接忽略。

● WHERE子句:筛选要修改的记录;

● ORDER BY子句的应用场合:把筛选出的记录进行排序。比如,当修改记录的主键的时候,给主键值都加1的时候,就需要把数据降序排列,

● LIMIT子句:这儿的LIMIT子句只能写一个参数;

涉及多张表的时候,需要引入表连接:

UPDATE t_emp e JOIN t_dept d on <条件>
SET e.deptno=d.deptno,e.job="ANALYST",d.loc="成都"
WHERE e.ename="ALLEN" AND d.dname="RESEARCH";

执行过程是,现将俩表做笛卡尔积(因为没有使用ON子句啦)从t_emp表中筛选出e.name="ALLEN"这条记录,从t_dept表中筛选出d.dname="RESEARCH"这条记录,其实,这所谓的两条记录在【笛卡尔积】中是在一条记录上的;此时,已经分别在两个表中各获得了一条记录,然后分别在获取的这两条记录上执行执行【SET e.deptno=d.deptno,e.job="ANALYST",d.loc="成都"】。然后,对此条记录的操作就能影响到原表上。

插入语句

INSERT INTO pet (pet_id, pet_sex, pet_name,pet_age,pet_salary )
VALUES (1, '公', '风车车', 3,  7000);

关联查询


SELECT * from pet ,master where pet_id=master_id;

删除

删除数据库

drop databases

删除表字段

 DELETE FROM table_name
WHERE condition;

删除数据表中的一个字段

delete from <字段> where <字段条件>

查询语句

这个是数据库最常用的一种类型后续的一些进阶课程也会围绕着查询语句为主体

最基础的查询

select <表中的字段>(可多选)from  <表名>;

where条件查询

select pet_1 ,pet_name from  pet where pet_1=3;
         <字段>,<字段>
这里我们是不建议只使用一个字段,会使我们看数据的时候不够主观

模糊查询:通过输入具体的数据,来对记录进行查询

select 字段 from 表名 where 字段 like ‘%数据%’;

接着是一些算术运算符号

!= <> >=
不等于 不等于 大于等于

逻辑运算符

and or not
同时满足
select * from  pet where pet_name like '%豆%' and pet_sex= '母';

这个平时也会比较常用一些

in not in
列表 反之

排序查询 关键字为(order by) asc(升序) desc (降序)

select * from pet  ORDER BY  pet_salary ASC;

嵌套查询,嵌套查询分为查询语句与子查询语句 ,而在查询语句中包含子查询语句,所以也叫嵌套查询

子查询为女主人的id 和名字

select  master_id , master_name from master where master_sex = '女';

查询女性主人的宠物的名字

SELECT pet_name , pet_1  from pet where pet_1 in(select  master_id  master_name from master where master_sex = '女');

接下来开始讲解多表连查,这个也算是基础篇的一个难点。意思为将多个表的内容组合成一个符合的条件进行查询,而常见的多表联查可分为 内连接 外连接

内连接

根据两个表中共有的字段进行匹配,然后将符合条件的合集进行拼接。

关键字为inner join…on…,通常位于表名后面。

语法:select 字段 from 表1 inner join 表2 on 表1.字段=表2.字段;

SELECT * from pet INNER JOIN master on pet_1=master_id;
左连接

关键字为left join…on,通常位于表名后面

语法:select 字段 from 表1 left join 表2 on 连接条件;

左连接是左表为主表,指定字段都显示,右表为从表,没内容显示null

SELECT * from pet left JOIN master on pet_1=master_id;

右连接
关键字为right join,通常位于表名后面

语法:select 字段 from 表1 right join 表2 on 连接条件

右连接是以右表为主表,指定字段都显示,左表为从表,没内容显示null。

SELECT * from pet right JOIN master on pet_1=master_id;

聚合函数

这些也是一些比较常用的

最小值min()

select min(字段) from 表名;

SELECT min(pet_salary) from pet;
最大值max()

select max(字段) from 表名;

SELECT min(pet_salary) from pet;
posted @ 2025-04-16 23:04  白鹿为溪  阅读(38)  评论(0)    收藏  举报