MySQL 语法基础二

本文介绍了MySQL的编码设置,如何解决乱码问题,数据库备份与恢复的步骤,详细讲解了主键约束的创建与删除,以及非空和唯一约束的使用。此外,还涉及到了概念模型的一对多、一对一和多对多关系,并阐述了外键约束以及多表查询的各种方法,包括UNION、连接查询和子查询的应用。
摘要由CSDN通过智能技术生成

MySQL编码问题

查看MysQL数据库编码:SHOW VARTABLES LIKE 'CHAR%'
character_set_client :MYSQL使用该编码解读客户端发过来的数据。如果客户端发回来的数据不是这个,就会出现乱码

character_set_results :MYSQL会把数据转换成该编码再发送给客户端。如果客户端不使用该编码,就会出现乱码

CMD默认使用GBK,需要修改变量

set character_set_client = gbk;

set character_set_results = gbk;

修改后只能当前cmd窗口有效,永久改需要到配置文件中修改。在 my.ini中设置

数据库备份恢复

数据库 转换 成 sql语句

sql语句 转换成 数据库

在cmd里,数据库 – SQL语句

备份:

mysqldump - u.... -p.... 数据库名称 > sql文件路径

注意:没有创建数据库,只是备份数据库内容

恢复:

先创建数据库

exit后,mysql -u… -p… 数据库名称 < sql脚本文件路径

注意:生成的脚本文件没有creat database语句,所以备份的是数据库内容,没有创建数据库
最后不要打分号,不要登入mysql,直接cmd运行

第二种 恢复方法:

登入数据库操作,在空的数据库中,使用source语句。上一种是创建新的数据库退出后 执行语句,这个是直接在创建新的数据库中执行

source + sql脚本文件路径 (无分号)

约束 之 主键约束

约束是添加在列上的,同来约束列

主键特性(唯一标识)

1.非空,2.唯一,3.被引用

当表的某一列被指定为主键后,该列就不能为空,不能有重复出现(例如人的主键是身份证号)

创建表时指定主键的俩种方式:

1.CREATE TABLE xxx() 在某一列后不加逗号,加PRIMARY KEY,

2.在最后那列 加 PRIMARY KEY(列名)

修改表时指定主键:

ALTER TABLE xxx ADD PRIMARY KEY(列名);

删除主键:

ALTER TABLE xxx DROP PRIMARY KEY;

主键自增长

通常主键类型为整型,设置为自动增长。保证插入数据时的唯一性和非空性

创建表时指定主键自增长: 在PRIMMARY KEY + AUTO_INCREMENT

主键的列自动填充,自己指定也行,如果不符合主键要求就自动填充

单独创建一个列为 主键,作为主键 。没有其他意义。

非空约束
因为某一些列不能设置为null值,所以对列添加非空约束
创建表时 对指定的列 后面 + NOT NULL

唯一约束
某一些列不能设置重复的信息,所以我们对列添加唯一约束
指定列 后面 加UNIQUE

概念模型

概念模型

一对多

一对一

多对多

对象模型:可以双向关联,引用的是对象,而不是一个主键

关系模型:只能多方引用一方,引用的是主键,而不是整个记录。

外键约束

特性:

1 外键必须引用(另一表,自己也可)主键

2 外键可以重复

3 外键可以为空

4 一张表中可以有多个外键

添加外键约束 一对多

一个表中的一列 作为外键 引用其他表或者自身表的主键

语句:创建表时:最后加CONSTRAINT xxx FOREIGN KEY(自身表的外键的列名) REFERENCES 引用表(引用表的主键列名)

修改表时 加外键约束:ALTER TABLE xxx ADD CONSTRAINT xxx FOREIGN KEY(自身表的外键的列名) REFERENCES 引用表(引用表主键列名)

一对一关系
改一下就行,将自身表的外键列指定为 自身表的主键,这样 的外键不能重复 ,对应的唯一的引用表的主键 ,就是一对一关系
CONSTRAINT xxx FOREIGN KEY(自身表的**主键**的列名) REFERENCES 引用表(引用表主键列名)

多对多关系
额外使用一张中间表, 创建俩个外键 ,对应俩张表的主键。然后俩个外键 将 俩张表的主键联系起来。

多表查询

合并结果集
要求 ,俩个表的结构一样
UNION,去除重复行
UNION ALL,不去重复行

SELECT * FROM ab UNION ALL SELECT * FROM cd;

连接查询

  • 内连接
  • 外连接
    – 左外连接
    – 右外连接
    – 全外连接(MySQL不支持)
  • 自然连接(属于一种简化形式)

连接查询 之内连接
首先查询俩个表,FROM后面这样会出现笛卡尔积现象,俩个表记录会相乘。产生很多无用的数据,所以需要加条件
方言:SELECT * FROM 表1 别名1,表2 别名2 WHRER 别名1.列名 = 别名2.列名
标准:SELECT * FROM 表1 别名1 INNER JOIN 表2 别名2 ON 别名1.列名 = 别名2.列名
自然:SELECT * FROM 表1 别名1 NATURAL JOIN 表2 别名2
会自动找条件,找俩个表相同的列作为条件

连接查询之外连接
外连接有主次,主表的记录无论满足不满足条件,都打印出来,次表只有满足条件才显示。次表部分记录不符合条件使用NULL补位
1.左外连接,左表为主 表1为主
SELECT * FROM 表1 别名1 LEFT OUTER JOIN 表2 别名2 ON 条件
2.右外连接,右表为主 ,表2为主
SELECT * FROM 表1 别名1 RIGHT OUTER JOIN 表2 别名2 ON 条件

全外连接
左表 右表 的记录都显示出来,不符合的都用NULL代替
可以将 左外连接 和右外连接的 结果集合并 , 就相当于 全外连接

子查询
一个SQL语句中含有多个SELECT
查询工资最高的员工的信息
SELECT * FROM emp WHRER sal = (SELECT MAX(sal) FROM emp);

子查询出现的位置
FROM后 作为表 需要对这个表起别名
WHRER 后作为条件

单行单列 作为结果集可以 在条件中使用大于等于
多行单列 的话 ,在条件中使用,加上关键字ALL ANY IN 比如xxx > ALL 多行单列
单行多列 类似一个对象,与查找的对比
多行多列,一般在FROM后 作为表,作二次查询

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值