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 排序