一、数据类型
1.mysql支持多种类型,大致可以分为三类:数值,日期/时间和字符串(字符)类型
2.char和varchar一定要指定长度,float会自动提升为double,timestamp是时间的混合类型,理论上可以存储时间格式和时间戳。
类型 | 用途 |
int | 整型,相当于java的int |
bigint | 整型,相当于java的long |
float | 浮点型 |
double | 浮点型 |
datetime | 日期类型 |
timestamp | 日期类型(可存储时间戳) |
char(32) | 定长字符 |
varchar(255) | 不定长字符 |
text | 大文本,用于存储很长的字符内容 |
blob | 字节数据类型,存储图片,音频等文件 |
二、建库操作
1.创建数据库
create database[if not exists] 数据库名称 [库选项];
数据库名称:由字母、数字和下划线组成的任意字符串。
库选项:用于设置此数据库的相关特性。
如: CHARACTER SET 字符集 #指定数据库字符采用的默认字符集。
COLLATE 校对规则名 #指定字符集的校对规则。
if not exists:在创建数据库前进行判断,只有该数据库目前尚不存在时才执行create database操作。用此选项可以避免出现数据库已 经存在而再新建的错误。
2.查看数据库
show databases;查看MySQL服务器下所有数据库
show create databases 数据库名称;查看指定数据库的创建信息
3.选择数据库
use 数据库名称;
4.删除数据库
drop database 数据库名称;
5.注释
在服务器实际运行时被忽略:单行注释#
单行注释--
多行注释/**/
注释内容添加道表结构:comment
三、建表操作
1.删除表
drop table 表名
2.创建表
create table [if not exists]表名(
字段名 类型 约束(主键,非空,唯一,默认值),
字段名 类型 约束(主键,非空,唯一,默认值),
)编码,存储引擎;
auto_incremen:自动增长
在sql中,我们有如下约束:
not null非空:只是某列不能存储null值。
unique唯一键:保证某列的每行必须有唯一的值。
primary key主键:not null和unique的结合,确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到列表中的一个特定的记录。
foreign key外键:保证一个表中的数据匹配另一个表中的值的参照完整性。
check:保证列中的值符合指定的条件。
default:规定没有给列赋值时的默认值。
3.查看表
show tables;查看数据表
show table status;查看数据表的状态信息
show tables[like匹配模式];
省略可选项,表示查看当前数据库中的所有数据表。
添加可选项like运算符,则按照“匹配模式”模糊查询查看数据表。
匹配模式符 “%”匹配一个或多个字符,代表任意长度的字符串。
匹配模式符“_”仅可以匹配一个字符
show table status [from数据库名][like匹配模式];
省略可选项,表示查看当前数据库中的所有数据表的状态。
添加可选项,则按照“匹配模式”查看数据表的状态。
4.修改数据表
修改数据表名称:alter table 旧表名 rename [to/as] 新表名;
rename table 旧表名1 to 新表名1[,旧表名2 to 新表名2]....;
ALTER TABLE…RENAME后的TO或AS可以省略。
RENAME TABLE…TO可以同时修改多个数据表的名称。
修改数据表选项:alter table 表名 表选项[=]值;
常见的表选项有字符集、存储引擎以及校对集。
5.查看表结构
查看所有字段信息:desc 数据表名;
查看指定字段的信息:desc数据表名 字段名;
查看数据表的创建语句:show create table 表名;
查看数据表结构:show [full] columns from 数据表名 [from 数据库名];
show [full] columns from 数据库名.数据表名;
省略可选项FULL,查询结果与DESC语法相同。
添加可选项FULL,可额外查看字段权限、COMMENT字段注释等。
上述语法中,数据表名 FROM 数据库名与数据库名.数据表名等价。
6.修改表结构
修改字段名:alter table 数据表名 change [column] 旧字段名 新字段名 字段类型 [字段属性];
“旧字段名”指的是字段修改前的名称。
“新字段名”指的是字段修改后的名称。
“数据类型”表示新字段名的数据类型,不能为空,即使与旧字段的数据类型相同,也必须重新设置
修改字段类型:alter table 数据表名 modify [column] 字段名 新类型 [字段属性];
修改字段位置:alter table 数据表名 modify [column] 字段名1 数据类型 [字段属性] [first|afte 字段名2];
first:表示将字段名1调整为数据表的第1个字段。
after 字段名2:表示将字段名1插入到字段名2的后面。
新增字段:alter table 数据表名 add [column] 新字段名 字段类型 [first|after字段名];(:新增一个字段,并可指定其位置)
alter table 数据表名 add [column] (新字段名1 字段类型1,新字段名2 字段类型2,...);(同时新增多个字段)
在不指定位置的情况下,新增的字段默认添加到表的最后。
新增多个字段时不能指定字段的位置。
删除字段:alter table 数据表名 drop [column] 字段名;
7.插入,删除,更新
插入语句:insert into....values....
删除语句:delete from....where...
更新修改语句:update.....set...where....
8.查询
查询表中全部数据:select *from 数据表名;
四、分页查询
select * from .... limit 2,3;--从第2条(下标从0开始)开始查,查第3条数据。
select *from .....limit 3;--从第0条(下标从0开始)开始查,查第3条数据。
五、distinct关键字
用于返回唯一不同的值。(查询发现很多国家重复,使用distinct就把重复的去除了)
select distinct country from ....
六、where语句
作为条件筛选,运算符:> < >= <= <> = is null in not null like in
在sql语句中 null值和任何东西比较 都为false,包括null
select * from ....where...
七、逻辑条件:and,or
select * from ... where sal >= 0 and sal <= 2000;--收入在0到2000之间
select * from ... where sal between 0 and 2000;--收入在0到2000之间
select * from ... where sal < s or sal > null;--收入小于s 或者没收入
八、order by
排序默认情况下是升序,asc可以省略。
select * from ... order by sal asc,alexa desc;--先根据sal升序再根据alexa降序。
九、in
匹配多个条件
select * from ... where country in ("usa","niaoguo","cn");
等价于
select *from ... where country = "usa" or country ="niaoguo" or country = "cn";
十、别名
select tt.name '网站名字' from ... tt;--tt是表的别名
十一、group by 分组查询
分组时候的筛选用having
常见的几个组函数:max() min() avg() count() sum()
select avg(sal) '平均值' ,country from ... group by country having 平均值 > 1200;
十二、子查询
把查询的结果当作一个表来使用
十三、连接查询
(1)全连接:将各个表用逗号分隔,就指定了一个全连接。
SELECT 查询字段 FROM 表1,表2[,表3.....] [WHERE 匹配条件];
(2)JOIN连接: 交叉连接 CROSS JOIN:SELECT 查询字段 FROM 表1 CROSS JOIN 表2;
内连接 [INNER] JOIN:SELECT 查询字段 FROM 表1 [INNER] JOIN 表2 ON 匹配条件;
左外链接 LEFT [OUTER] JOIN:SELECT 查询字段 FROM 表1 LEFT [OUTER] JOIN 表2 ON 匹配条件;
右外连接 RIGHT [OUTER] JOIN:SELECT 查询字段 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 匹配条件;
十四、非空处理
select name,ifnull(count,0),ifnull(date,' ') from ... w left outer join ... a on w.id = a.site_id;