Mysql知识点
枚举类型与集合类型
字段的值只能在给定范围中选择,如单选框,多选框
enum 单选,只能在给定范围内选一个值,如性别 男/女
set 多选,能在给定范围内选多个值,(爱好1,爱好2,爱好3)
如果输入的不是给定范围内的值,则显示为空
create table consumer(
id int,
name char(16),
sex enum('male','female','other'),
level enum('vip1','vip2','vip3'),
hobbies set('play','music','read','run')
);
insert into consumer values
(1,'egon','male','vip2','music,read');
insert into consumer values
(1,'egon','xxxxx','vip2','music,read');
约束条件
not null非空,default默认值。*
create table t16(
id int,
name char(6),
sex enum('male','female') not null default 'male'
);
unique key 唯一键
单列唯一
#方式一 直接在列后面加上unique,
create table department(
id int unique,
name char(10) unique
);
#方式二: 单独列出来
create table department(
id int,
name char(10),
unique(id),
unique(name)
);
联合唯一
# 联合唯一 两个字段合起来才算唯一
create table services(
id int,
ip char(15),
port int,
unique(id),
unique(ip,port)
);
primary key (主键)不为空且唯一,是innodb的一种独特的特性
存储引擎(innodb):对于innodb存储区域来说,一张表内必须有一个主键。如果没有设置,数据库自动找一个不为空且唯一的字段设置为主键,都没有就设置一个隐式主键(为了确保数据表的连接性)。
# 单列主键
create table t17(
id int primary key,
name char(16)
);
# 复合主键
create table t19(
ip char(15),
port int,
primary key(ip,port)
);
auto_increment自增 设置直接自增必须是字段为key,如unique,primary key
create table t20(
id int primary key auto_increment,
name char(16)
);
foreign key:建立表之间的关系
#1、建立表关系:
#先建被关联的表,并且保证被关联的字段唯一
create table dep(
id int primary key,
name char(16),
comment char(50)
);
#再建立关联的表
create table emp(
id int primary key,
name char(10),
sex enum('male','female'),
dep_id int,
foreign key(dep_id) references dep(id) # 在emp表中创建一个外键约束,该约束将当前表中的 dep_id 列作为外键,参考dep表中的 id 列
on delete cascade # 当在关联表(父表)中删除一条记录时,具有 ON DELETE CASCADE 的外键约束将自动删除在当前表(子表)中与之关联的所有记录
on update cascade # 当在关联表中更新主键时,有 ON UPDATE CASCADE 的外键约束将自动更新当前表中的外键值,以保持关联的一致性。
);
表之间存在的关系:1对多,多对对,1对1
1对多就是用foreign外键
多对多需要再创建一个表来存放两个表之间的关系
1对1:外键字段需要加上unique唯一
数据的增删改查
insert into 表名(字段1,字段2) values(值1,值2) # 语法一,部分字段传值 insert into 表面 values(值) # 语法二,插入完整数据 # 需要修改或更新 MySQL 中的数据,我们可以使用 UPDATE 命令来操作 UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition; /*table_name 是你要更新数据的表的名称。 column1, column2, ... 是你要更新的列的名称。 value1, value2, ... 是新的值,用于替换旧的值。 WHERE condition 是一个可选的子句,用于指定更新的行。如果省略 WHERE 子句,将更新表中的所有行。*/ # DELETE FROM 命令来删除 MySQL 数据表中的记录。 DELETE FROM table_name WHERE condition; /*table_name 是你要删除数据的表的名称。 WHERE condition 是一个可选的子句,用于指定删除的行。如果省略 WHERE 子句,将删除表中的所有行。*/
简单查询
# 避免重复DISTINCT
select distinct post from employee;
# 查找的值进行四则运算
select name,salary*12 as annual_salary from employee; # as 将得到的值取别名
# 定义显示格式
concat() 用于连接字符串
select concat('name:',name,'薪水:',salary*12) as annual_salary from employee;
Where约束
where语句中可以使用: 1.比较运算符:> < >= <= != 2.between 80 and 100 值在10到20之间 3.in(80,90,100) 值是80或90或100 4.like 'egon%' pattern可以是%或_ %表示任意多个个字符 _表示一个字符 5.逻辑运算符:可以在多个条件间使用逻辑运算符 and or not
group by分组
SELECT column1, aggregate_function(column2) FROM table_name WHERE condition GROUP BY column1; /*column1:指定分组的列。 aggregate_function(column2):对分组后的每个组执行的聚合函数。 table_name:要查询的表名。 condition:可选,用于筛选结果的条件。 注意事项: GROUP BY 子句通常与聚合函数一起使用,因为分组后需要对每个组进行聚合操作。 SELECT 子句中的列通常要么是分组列,要么是聚合函数的参数。 可以使用多个列进行分组,只需在 GROUP BY 子句中用逗号分隔列名即可。 group concat */
having:用于group by分组后进行过滤
查询的语法顺序:
select distinct 字段1,字段2,字段3 from 库.表
where 条件
group by 分组
having 过滤
order by 排序
336

被折叠的 条评论
为什么被折叠?



