create table 表名 (
id int(3),
name varchar(20),
age int(3),
score double(4,1),
birthday date,
insert_time timestamp
);
数据类型
日期 date
datetime
timestamp
区别 :timestamp有默认值 为当前系统时间
字符串(char和varchar 定义的时候必须给长度)
char
varchar
text 超大文本/文本文件的保存
注意:
varchar(50)
区别 char和varchar
char(11)
varchar(11)
存入长度不能超出指定长度
varchar 长度是不在超范围的情况下可以根据内容改变,char会把长度固定,同时不足的部分会用空格补全
hello (六个空格)
hello (无空格)
--删除表
DROP database if exists 表名;
drop database 表名;
--删除表并复制相同表
create table 表名 like 复制的表名
--修改表名
alter table 表名 rename to 新的表名;
--修改表的字符集
show create table 表名;
alter table 表名 character set 字符集;
--添加一列
alter table 表名 add 列名 数据类型 ;
--修改名称 类型
alter table 表名 change 列名 新列名 (新数据类型);
alter table 表名 modify 列名 新数据类型;
--删除列
alter table drop 列名 ;
--修改表名称
RENAME TABLE 旧表名 to 新表名
-- 添加数据
insert into 表名 (列名1,列名2...,列名n)
values (数据名1,数据2...,数据n);
--删除数据:
1.delete from 表名 where 列=值; 删除的是数据 可以通过事务进行还原
如果不加条件则删除所有记录
2.truncate table 表名
-- 先删除表 在创建一张一样的表 删除的是表 不能通过事务进行还原
--修改数据
UPDATE 表名 set 列名1=值1,列名2=值3...列名n=值n...where 条件;
day03_MySQL约束
查询表中的数据 DQL
SELECT * FROM 表名 ;
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
基础查询
1. 多个字段的查询
SELECT 字段名1,字段名2...from 表名 ;
2. 去除重复
select DISTINCT 字段名 from 表名 ;
3. 计算列
select 字段名1,字段名2,字段名1+字段名2 from 表名; //数值型计算
null 参与的运算 计算结果都为null
4. select 字段名1 别名,字段名2 别名,字段名1+字段名2 别名 from 表名;
//也可以用As +别名
条件查询
1.where 子句后跟条件
2.运算符
select *from 表名 where age between 20 and 30 ;
select *from 表名 where age=22 or age=22 or age=25 ;
select *from 表名 where age in(18,22,25);
select *from 表名 where age is/is not null ;
3.模糊查询
select *from 表名 where name like '马%'; //姓马的人 字符+%
select *from 表名 where name like '_马%'; //第二个姓马的人 下划线+字符+%
select *from 表名 where name like '___'; //姓名为三个字的人 三个下划线
select *from 表名 where name like '%马%'; //姓名中包含马的人 %+字符+%
select *from 表名 where name like
4.排序查询 order by
SELECT *FROM 表名 ORDER BY 列名 DESC; 降序排列
SELECT *FROM 表名 ORDER BY 列名 ASC; 升序排列
聚合函数通常都是配合分组进行分配的
5.group by
SELECT 列名1,列名2,...,列名N FROM 表名 GROUP BY 列名;
SELECT brand,SUM(price) AS 'prices' FROM a
WHERE brand LIKE '%海塞%' GROUP BY brand ORDER BY price DESC;
SELECT 列名1,列名2,...,列名N FROM 表名 GROUP BY 列名 HAVING 条件;
注意:分组之后查询的字段:分组字段 聚合函数
where 和having的区别 ?
1.where 在分组之前进行限定 如果不满足条件 则不参与分组 having在分组之后限定
如果不满足 则不会被查询出来
2.wher e后不可以跟聚合函数 having 可以进行聚合函数的判断
6.分页查询 语法 limit 开始的索引 ,每页查询的条数;
公式:开始的索引=当前页码-1 *每页显示的条数
limit 是MySQL的方言
约束 :
概念 对表中的数据进行限定 保证数据的正确定 有效性 完整性
1.主键约束 primary key
非空且唯一
主键只有一个字段为主键
主键就是表中记录的唯一标识
1. id int primary key; 添加
2. alter table 表名 drop primary key ; 删除主键
3. alter table 表名 modfiy id int primary key ; 添加 主键
4. 自动增长
如果 某一列是数值类型的 使用AUTO_INCREMENT 可以来完成值得自动增长
id int primary key AUTO_INCREMENT ; 自动增长
alter table 表名 modfiy id int ;
alter table 表名 modfiy id int AUTO_INCREMENT;
2.非空约束 not null ;
在创建表时添加约束
name varchar (20) not null
alter table 表名 modfiy name varchar(20) not null;
alter table 表名 modfiy name varchar(20) ;
3.唯一约束 unique
某一列的值不能重复
phone_number varchar(20) unique ; --手机号
1.注意 唯一约束可以有null 值
只能有一条为null
alter table 表名 drop index phone_number;
alter table 表名 modfiy phone_number varchar(20) unique;
4.外键约束
-- 谁有外键谁就是从表
-- 谁没有外键谁是主表
外键(在创建完表以后创建外键)
eg
员工(从表)
id
名字
年龄
部门id
部门 (主表)
id
部门名称
部门地址
alter table 从表 add foreign key 从表列 references 主表(主键列)
从表 创建外键约束
添加 alter table 从表 add foreign key 外键字段名 references 主表(主键字段名);
删除 alter table 从表 drop foreign key 外键字段名;
级联 ON UPDATE CASCADE;
ON DELETE CASCADE;
班级学生 1-n
学生和课程多对多
create table tab_favorite(
rid int ,
uid int ,
primary key(rid,uid) --联合主键
foreign key(rid) references 主表(rid)
foreign key (uid) references 主表(uid)
);
1.多表查询
查询语法
select 列名列表 from 表名列表 where
迪卡热积 两个集合 A,B 取这两个集合组合所有情况
隐式查询:
select name,gender,name(表名的限定:表名.列) from 表1表2where 表1.列名=表2.列名
起别名更方便
显示内连接
SELECT *FROM 表1 JOIN 表二 ON 表1.id =表2.id;
select *from 表1 join 表二 on 关联条件 where 条件
左外链接:
select 列名 from 表1 left join 表二 on 条件
右外连接:
select 列名 from 表1 right join 表二 on 条件
左外连接查询的是左表的所有数据及其交集部分
右外连接查询的是游标的所有数据及其交集部分