SQl语句不区分大小写
SQL语句可单行或多行书写,以 ;结尾
SQL语句顺序:from—>where--->select--->其他
一个数据库对应一个文件夹,可在硬盘中进行相应的操作
登陆:
mysql -u用户名 -p密码
退出:quit
mysql -h 服务器
mysql -P 端口号 --> 小写p是密码,大写P是端口号
注释:
单行注释:--
多行注释:/*.......*/
命令:
show databases:显示当前数据库
drop database 数据库名:删除数据库
create database 数据库名:创建数据库
select now():打印当前时间
create database if not exists 数据库名:如果当前数据库不存在,则创建,如果存在,不进行操作
show create database 数据库名:查看数据库信息
character set 编码方式:在创建数据库时,后面加上此命令可改变编码方式
alter database 数据库名 character set 编码方式:用于创建完数据库之后重新修改编码方式
use 数据库名:进入当前数据库 --> 进入之后不能退出,可以通过use命令进入其他数据库
select database():查看当前属于哪个数据库
数据类型:
数字类型:
浮点型:
float(4,2) 4是全长, 2是小数点后位数
double(4,2)
整形:
TINYINT: 1字节
SMALLINT:2字节
MEDUMINT:3字节
INT:4字节
BIGINT:8字节
字符串数据类型:
utf-8中一个汉字3个字节
char(3):只能存3个字节的字符串
varchar(20):最多存20个字节的字符串
blob:存二进制
text:文本
时间数据类型:
DATE:YYYY-MM-DD类型
TIME:HH:MM:SS
YEAR: YYYY
DATETIME: YYYY-MM-DD HH:MM:SS
TIMESTAMP: 混合日期和时间值得时间戳
表操作:
CREATE TABLE 表名(字段名 数据类型[约束条件],下一个):创建表
↑↑↑ emm id TINYINT primary key <--主键
约束条件:
PRIMARY KEY:主键
AUTO_INCREMENT:自增
DEFAULT:默认值
NOT NULL:不为空
.....
create table 表A (select * from 表B):在创建表A时,将表B的全部记录添加进去
show table; 查看当前数据库内所有表
desc 表名: 查看表信息
show create table 表名 :显示创建表时的信息
alter table 表名 add 字段名 数据类型:在表中新建字段
alter table 表名 add 字段名 数据类型,add 字段名 数据类型: 可同时添加多个字段
alter table 表名 drop 字段名: 删除表中字段
alter table 表名 drop 字段名,drop 字段名: 可同时删除多个字段
alter table 表名 modify 字段名 数据类型[约束条件][first 或 after 字段名]: 修改表中字段的数据类型位置等等
alter table 表名 change 原字段名 新字段名 数据类型 [约束条件][位置]: 修改表中的字段名称,数据类型,位置等等
rename table 原表名 to 新表名: 修改表名
drop table 表名:删除表
添加表记录:
insert into 表名 (字段名,字段名) values (值,值): 为字段增加记录,没有为空约束的可以不填
insert into 表名(字段名,字段名) vlues (值,值),(值,值):可添加多条记录
insert into 表名 values (值,值):这种方式添加记录,必须逐条添加所有字段
insert into 表名 set 字段名=值,字段名=值 :为字段添加记录
修改表记录:
update 表名 set 字段名=值 :修改一整列的数据,单独修改需用筛选
删除表记录:
DELETE FROM 表名: 删除表中所有的记录,单独删除需用筛选
truncate table 表名:删除整个表的记录
查询表记录:
select 字段名 from 表名 :查询当前字段所有记录,单独查询需用筛选
select 字段名 ,字段名 from 表名:查询多个字段
select distinct 字段名 from 表名:去处重复项
select 字段名 as 别名 from 表名:显示结果时,用别名代替字段名 ,只显示一次,数据库内字段名不改变,as可以省略
筛选:
where 字段名 判断符 值: where不能用别名
< > = <= >= !=
between a and b :值在a与b中间
in(a,b,c) :值是a或b或c
like "李%" %匹配任意的任意个字符
“李_” _下划线匹配一个字符
逻辑运算符:
and or not
排序:
order by 字段名 排序[默认正序,desc是倒序]: 可以用别名
分组:
group by 字段名/或字段顺序[从左到右,从1开始]:每一组只显示第一条记录
having:过滤筛选,用于分组后的数据,跟where功能相似,having可以替换where,where不能替换having
聚合函数:用于分组的数据
sum(字段名):用于分组是求总和,放在select中
count(字段名):计数
avg(字段名):求平均值
avg(ifnull(字段名,0)):如果字段为空,用0代替计算
max(字段名):求最大值
min(字段名):求最小值
limit限制:
select * from 表名 limit 限制数(n) :显示前n条记录
select * from 表名 limit n,y :从第n条记录开始,向后显示y条记录
正则查询: REGEXP
where 字段名 regexp '正则表达式'
外键:被绑定的表是主表,绑定外键的表是从表
创建表时,创建外键:
foreign key(字段名)references 表名(字段名)
↑绑定 ↑被绑定
create 表名() ENGINE=INNODB: 外键约束
给表插入一个外键:
alter table 表名 add constraint 外键名称 foreign key (字段名) references 表名(字段名)
删除外键:
alter table 表名 drop foreign 外键名称
级联删除:
foreign key(字段名)references 表名(字段名) on delete cascade
↑↑ 创建外建时加上这句,父表内记录删除时,会自动删除子表的绑定记录
foreign key (字段名) references 表迷(字段名) on delete set null
↑↑ 创建外键时加上这句,父表内记录删除时,会自动将字表的绑定记录改为null
多表查询:
连接查询:
内连接:inner join
外连接:left join , right join
全连接:full join
内连接:显示两个表中都能匹配到的记录
select * from tableA,tableB where tableA.id=tableB.aid;
外连接:
left join:以左表为主,在左表中有,但右表中没有匹配到的也会显示,对应值为null
right join:以右表为主
全连接:
full join: mysql中不支持,但可以用
多表查询筛选
select * from tableB left join tableA on :用on筛选
多表查询之子查询:
in关键字:
select * from 表A where 字段1 in (select 字段2 from 表B):查询字段1在表B中的字段2中的所有记录
EXISTS关键字:返回TRUE或者是FALSE
select * from 表A where EXISTS (select 字段2 from 表B where 条件):
↑↑如果括号内的查询有数据,则EXISTS返回TRUE,执行 select * from 表A ,否则不执行
索引:
普通索引
唯一索引
全文索引
多列索引
.......
create table 表名(字段A 类型,字段B 类型,index|key [索引名称] 字段A)
↑↑ index或key命令创建普通索引,将字段A作为普通索引
在index前面加上[ unique | fulltext | spatial ] 创建各种索引
↑唯一索引 全文索引 空间索引
多列索引:
index [索引名称] (字段A,字段B):多个字段创建索引