一、列属性
1、 主键
代码语言:javascript复制主键(primary key):又叫主键约束,是表中的一个或多个字段,它的值用于唯一标识表中的某一条记录。
1
特点:
- 一个表中只能有一个主键
- 主键值必须唯一标识表的每一行
- 主键值不可重复,也不可为空(NULL)
---单一字段创建主键
字段名称 数据类型 primary key
---单、多字段主键
primary key(字段名称,)---但不常用
---删除主键
alter table 表名 drop primary key;
12345678
主键的建立原则:
- 主键应是对用户没有意义的
- 不要更新主键
- 主键不应包含动态变化的数据,如时间戳等
- 主键应由计算机自动生成
- 一般来说就是id,特殊情况除外
2、 唯一键
代码语言:javascript复制唯一键(unique key):又叫唯一约束,其保证在一个字段或一组字段里的数据与表中其他行的数据相比是唯一的。
1
特点:
- 一张表中可以存在多个唯一键
- 唯一键所在列中的数据不能重复
- 唯一键允许该列数据为null,并且可以存在多个(但是不提倡)
- 与主键的区别:主键唯一,唯一键不唯一,主键不为null,唯一键可为null
---创建唯一键
字段名称 数据类型 unique key
---添加唯一键并且自定义名称
alter table 表名 add unique key 唯一键名称(字段,)
---删除唯一键
alter table 表名 drop index 唯一键名称;
注意:与主键的删除略有不同
123456789
3、 自动增长
代码语言:javascript复制自增长(auto increment):当对应的字段不给值或null的时候,系统会自动触发**从当前字段中已有的最大值执行 1操作**,得到一个新的值。
1
特点:
- 任何一个字段要实现自动增长必须前提是一个索引(键)
- 自动增长的字段必须是一个数字(整型)
- 一张表中只能有一个自动增长
---添加自动增长
字段名称 数据类型 auto_increment
---删除自增长
alter table 表名称 modify 字段名称 数据类型;
注意:使用此方法不光清除了自增长,只留下键
---修改自增长值
alter table 表名称 auto_increment = 值
---修改步长
set auto_increment_increment = 值
123456789101112
4、 其他属性
代码语言:javascript复制空属性用null表示,在mysql中允许使用列设置为null或者not null
1
- null:当没有给该字段添加任何值的时候就是null,null不能参与运算
- not null:被设置为not null 的列必须存在
---设置 null / not null属性
字段 数据类型 NULL/NOT NULL
注意:并非所有字段都需要设置not null,主键默认就是not null,一般情况下建议使用not null,如果实在没有值则可以使用默认值代替(默认值可以使用占用空间很小的数据)
123
代码语言:javascript复制默认值(default):如果插入数据,某个;列没有数据,则使用默认值填充。
1
代码语言:javascript复制---设置默认值
字段名称 数据类型 default '值';
12
代码语言:javascript复制列描述(Comment):就是注释。
1
代码语言:javascript复制---设置列描述
字段名称 数据类型 comment '描述';
注意:在设置完列描述后要使用**show create table 表名称;**来查看。
123
二、高级查询
1、select 选项
代码语言:javascript复制---all查询所有
select all 列名 from 表名
---distinct去重复(一般情况下不适用耗性能)
select distinct 列名 from 表名
12345
2、条件限制
2.1 where
where子句用于规定选择的标准,写法:select 字段 from 表名 where
2.2 having
having与where相似,但having发生在内存中
2.3 limit
代码语言:javascript复制limit是用来限制结果数量的。
1
代码语言:javascript复制---从第一条开始的查询n条数据
select 字段 from 表名称 limit 数据量;
---从起始数 1开始查询n条数据
select 字段 from 表名称 limit 起始数,偏移量;
12345
2.4 order by(排序)
代码语言:javascript复制---asc 升序(默认) desc 降序
---除了可以使用单一字段进行排序外,还可以添加第二个字段进行多字段排序,中间使用','进行隔开
select 字段 from 表名 order by 字段名 排序方式,字段名 排序方式;
注意:尽量不要使用
12345
2.5 group by
代码语言:javascript复制例子:select count(*),字段名 from 表名 group by age;
12
3、连接查询
3.1 外连接
代码语言:javascript复制以某张表为主,取出里面的所有记录,然后每条与另外一张表进行连接,不管能不能匹配上条件,最终都会保留。能匹配,正确保留;不能匹配,其他表的字段都置空 NULL。
1
代码语言:javascript复制---外连接分为两种
left join:左外连接,以左表为主
左表 left join 右表 on 左表.字段=右表.字段
right join:右外连接,以右表为主
左表 right join 右表 on 左表.字段=右表.字段
注意:限定条件使用on关键字
12345678
3.2 内连接
代码语言:javascript复制内连接[inner] join:从左表中取出每一条记录,去右表中与所有的记录进行匹配,匹配必须是某个条件在左表中与右表中相同最终才会保留结果,否则不保留。
1
代码语言:javascript复制左表 [inner] join 右表 on 左表.字段 = 右表.字段;
注意:内连接可以没有连接条件即没有on之后的内容,这个时候系统会保留所有结果,比较浪费资源不建议这样使用。优先使用内连接。
123
3.3 AS
代码语言:javascript复制---起别名
select student.name,parent.name,parent.age... from student join parent on student.id=parent.student_id;
select st.name,pa.name,pa.age... from student as st join parent as pa on st.id=pa.student_id;
1234
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!