MYSQL学习
操作数据库
create database db_name default charset utf8 collate utf8_general_ci;
show databases;
drop databases db_name;
操作表
use db_name;
create table table_name(id int, name char(10),tel int)
select *
use db_name;
create table table_name(id int, name char(10),tel int) engine=innodb default charset=utf8;
select * from table_name;
# 添加
insert into table_name(id,name) values(1,'sychen');
如果是auto_increment
则默认为一个pk,(主键)
约束primary key
加速查找
一张表里面只能 有一个自增和pk
一般创建如下:
create table table_name(
列名 类型 描述
id int not null auto_increment
name char(10) not null
tel int null
)
清空表内数据
delete from table_name; # 自增还会按照原来的走
truncate table table_name; # 不会按照原来的走
drop table table_name: # 删除这张表
数据类型
数据类型分为数字型和字符串和时间类型
数据库存放文件的话,只存路径
时间类型:
枚举类型:
集合类型:
增删改查
增
insert into table_name(id,name) values(1,'sychen');
删除
delete from table_name where 条件;
改
update table_name set age=18 where age=17;
查
select * from table_name;
外键
让一张表里的一列和另一张表里的一列作一个关系叫作外键。
创建外键:
未链接的两张表
create table userinfo(
uid bigint auto_increment primary key,
name varchar(32),
department_id int
)engine=innodb default charset=utf8;
create table department(
id bigint auto_increment primary key,
title char(15)
)engine=innodb default charset=utf8;
使用外键链接的两张表:
create table userinfo(
uid bigint auto_increment primary key,
name varchar(32),
department_id int,
constraint fk_user_depar foreign key ('department_id',) references department('id')
)engine=innodb default charset=utf8;
create table department(
id bigint auto_increment primary key,
title char(15)
)engine=innodb default charset=utf8;
外键就是一对多
主键的用处:一张表只能有一个主键
一个主键不一定是一列,主键可以由多个组成
主键还能这样写:
# 原来是这样写的
create table table_name(
列名 类型 描述
id int not null auto_increment primary key,
name char(10) not null,
tel int null
)
# 现在还能这样写:
create table table_name(
列名 类型 描述
id int not null auto_increment,
nid int not null,
name char(10) not null,
tel int null,
primary key (id,nid) # 创建两个主键,可以由两列共同组成
)
主键是两列的时候,外键可以创建,与主键对应
唯一索引
加速查找,
联合唯一
create table t1(
id int ...,
num int...,
xx int ...,
unique uq1 (num,id) # 联合唯一
)
目的表示num
和xx
不能全相同,且加速查找 可以为空。
主键也不能重复,主键不能为空。
外键的变种
用户表
主机表
用户主机关系表
sql语句的补充
增
insert into tb(name,age) values('alex',12);
insert into tb(name,age) values('alex',12)('alex',12);
# 把tb2内的数据插入到tb1中
insert into tb1(name,age) select name,age from tb2;
删
delete from tb2;
delete from tb2 where id = 2 and name = 'alex';
改
update tb12 set name='alex' where id>12 and name='xx';
查
select * from tb2;
select id,name from tb2;
select id as uid,name as n from tb2;
select id as uid,name as n from tb2;
select id as uid,name as n from tb2 where id > 10 or name = 'alex';
查id等于10,5,2的数据
select id,name from tb2 where id in (10,5,2);
select id,name from tb2 where id not in (10,5,2);
查一个范围的(1,201)
select id,name from tb2 where id between 1 and 201;
select * from tb2 where id in (select id from tb1)
通配符
# 详见https://www.cnblogs.com/wupeiqi/articles/5713315.html
select * from tb2 limit 10; 看前十条
select * from tb2 limit 1,10; 从1开始取10条
排序
select * from tb2 order by uid; 安uid排序
select * from tb2 order by uid desc; 安uid 大到小 排序
select * from tb2 order by uid asc; 安uid 小到大 排序
取最后十个
先排序 然后 取数据
select * from tb2 order by uid desc limit 0,10;
分组
目的:
```sql
create table fruit(
nid int not null primary key,
smt char(32) null ,
color_id int not null,
constraint fk_cc foreign key (color_id) references color(nid)
);
复制代码