mysql常用的命令
登录mysql数据库的命令:
mysql -uroot -p密码
使用全名的方式登录数据库:
mysql --user=root --password=密码
退出数据库的命令:
exit
查看数据库的编码字符集:
show variables like 'char%';
查看有多少个数据库:
show databases;
创建数据库的命令:
create database [if not exists] 数据库名 [character set '编码字符集'];
删除数据库的命令:
drop database 数据库名;
启动数据库的命令:
use 数据库名称;
创建数据表的命令:
create table [if not exists] 表名(
字段名 字段类型,
字段名 字段类型,
...
字段名 字段类型(最后一个字段 后边不加逗号)
);
查看数据库中有多少个数据表命令:
show tables;
查看数据表中的表结构:
desc 表名;
删除数据表:
drop table 表名;
mysql中的数据类型:
1.数字型
2.字符串类型 用单引号引起来
2_1.varchar 变长字符串 比如 name varchar(20) 比如我是输入了6个字符 那么系统会删除剩余的14个字符的空间
2_2.char 定长字符串 比如 name char(20) 比如我是输入了6个字符 那么系统就不会删除剩余的14个字符空间
当数据长度确定的时候就使用char类型
当数据长度不确定的时候就使用varchar类型
3.null
4.日期型
向数据表中插入数据:
insert into 表名 values(字段1值,字段值2...);
向数据表中插入某个字段的数据:
insert into 表名(字段名,字段名2...) values(字段值,字段值);
查询表中的数据:(*表示所有的字段)
select * from 表名;
查询表中某个字段的数据:
select 字段名,字段名 from 表名;
带条件查询数据表中的数据:
select * from 表名 where 条件;
带条件查询数据表中的某个字段:
select 字段名,字段名 from 表名 where 条件;
向数据表中添加字段:
alter table 表名 add 字段名 字段类型;
删除数据表中的某个字段:
alter table 表名 drop 字段名;
修改数据表中的字段类型:
alter table 表名 modify 字段名 字段类型;
修改数据表中的字段名:
alter table 表名 change 旧字段名 新字段名 字段类型;
修改数据表名:
alter table 旧表名 rename 新表名;
修改数据表中的数据:
update 表名 set 字段名=字段值;
修改数据表中的数据 带条件
update 表名 set 字段名=字段值 where 条件;
修改数据表中多个字段的数据:
update 表名 set 字段1=字段值,字段2=字段值...;
带条件修改数据表中多个字段的数据:
update 表名 set 字段1=字段值,字段2=字段值...where 条件;
在现有的值中 修改某个字段值:数值型
update 表名 set 字段名=字段名+值;
带条件删除数据:
delete from 表名 where 条件;
删除数据表中所有的数据:delete删除表中的数据 但是表还在 drop删除表 数据和表都不存在
delete from 表名;
where字句的使用
where字句使用是有限制的 where只能跟在select,update,delete之后
where字句后边可跟那些连接词:
1.like 模糊查询
1_1.% 可以匹配一个或者多个任意的字符 可以作为前缀 或者后缀 ,前后缀
select * from 表名 where 字段名 like '%字段值%';
1_2._ 可以一个任意的字符 可以作为前缀 或者后缀 ,前后缀
select * from 表名 where 字段名 like '_字段值_';
2.length 表示字段值的长度
select * from 表名 where 字段名 like '%字段值%' and length(字段名)=长度;
mysql> select * from student where name like '%jack%' and length (name)=7;
3.and 并且
select * from 表名 where 条件 and 条件;
mysql> select * from student where name='lili' and age=22;
4.or 或者
select * from 表名 where 条件 or 条件;
mysql> select * from student where name='jack' or name='rows';
5.is null 判断是否为null
mysql> select * from student where address is null;
6.between and 两者之间
mysql> select * from student where age between 20 and 25;
7.in 在…上
mysql> select * from student where age=20 or age=21 or age=22 or age=23 or age=24;
mysql> select * from student where age in(20,21,22,23,24);
表的约束
☆ 主键
- 主键(会呈现钥匙形状) primary key
- 主键是数据表中唯一的标示
- 一个数据表中最多只能有一个主键
- 主键是不能为null的
- 有可能有多个字段共同组成一个主键这称为联合主键或者称为复合主键
1.创建表的同时创建主键
create table if not exists student2(
id int primary key,(主键)
name varchar(20),
sex char(4),
age int
);
2.创建表的同时创建主键
create table if not exists student3(
id int,
name varchar(20),
sex char(4),
age int,
constraint primary key(id) (主键)
);
insert into student3 values(2,'lisi','nan',20);
3.通过修改表结构创建主键
create table if not exists student4(
id int,
name varchar(20),
sex char(4),
age int
);
insert into student4 values(1,'xiaoming','nan',30);
一般情况下我们都推荐 通过修改表结构的形式创建主键 因为这样我们可以知道主键的名称
alter table 表名 add constraint [主键名] primary key(字段);
alter table student4 add constraint s_id primary key(id);
create table if not exists student5(
id int,
name varchar(20),
sex char(4),
age int
);
4.通过修改表结构:创建联合主键
alter table 表名 add constraint 主键名 primary key(字段1,...字段n);
alter table student5 add constraint s_id primary key(id,name);
insert into student5 values(1,'xiao','nan',30);
☆ 唯一约束 unique
唯一约束不是主键 是后选主键
唯一约束也不能重复
唯一约束可以为null 但是主键不能为null
1.创建表的同时创建唯一约束
create table if not exists student6(
id int unique,
name varchar(20),
sex char(4),
age int
);
create table if not exists student7(
id int ,
name varchar(20),
sex char(4),
age int,
constraint unique(id)
);
create table if not exists student8(
id int ,
name varchar(20),
sex char(4),
age int
);
insert into student8 values(1,'xiaoming','nan',30);
2.通过修改表结构的形式创建唯一约束
alter table 表名 add constraint unique(id);
alter table student8 add constraint unique(id);
3.非空约束 not null
create table if not exists student9(
id int ,
name varchar(20) not null,
sex char(4),
age int
);
4.自动增长 auto_increment(数值) 会造成隔断现象出现
create table if not exists student10(
id int auto_increment primary key,
name varchar(20) not null,
sex char(4),
age int
);
insert into student10(name,sex,age) values('xiaoming','nan',30);
5.默认值 default
create table if not exists student11(
id int,
name varchar(20),
sex char(4) default 'nan',
age int
);
insert into student11(name,age) values('xiaom',30);
使用约束建立一个完整的数据表
create table if not exists student12(
id int auto_increment primary key,
name varchar(20) unique,
sex char(4) not null,
address varchar(20) default 'zhengzhou'
);
6.外键 foreign key
E-R图=实际关系图
表之间的关系:
【1】.一对多 多对一
1.建立主表(父表)
create table if not exists person(
id varchar(18) primary key,
name varchar(20),
tell varchar(11)
);
2.建立从表(子表)
create table if not exists car(
cid varchar(10) primary key,
name varchar(10),
p_cid varchar(18)
(建立一个字段 作为从表的外键
用来引用主表中的主键
从表中的外键的字段类型必须和主表中主键的类型一致 包括长度)
);
通过修改表结构,给从表添加外键,同时连接主表中的主键:
alter table 子表名 add constraint 外键(字段) references 主表(主键);
建立主从表关系:
alter table car add constraint foreign key(p_cid) references person(id);
一旦建立主从表关系 那么在添加数据时
要先添加主表 在添加从表
先添加主表中的数据:
insert into person values('p01','jack','123456');
insert into person values('p02','rows','123455');
insert into person values('p03','lucy','123454');
insert into person values('p04','tom','123453');
insert into person values('p05','lili','123452');
向从表中添加数据:
insert into car values('c001','qq','p01');
insert into car values('c002','bmw','p01');
insert into car values('c003','aodi','p02');
insert into car values('c004','qq','p03');
insert into car values('c005','A6L','p04');
一旦建立主从表关系,删除数据时,要先删除从表 再删除主表:
先删除从表中的数据:
delete from car where cid='c003';
在删除主表中的数据:
delete from person where id='p02';
先让你从表中的数据无主:
update car set p_cid =null where cid='c004';
delete from person where id='p03';
级联删除(陪葬)
主表中的数据一旦删除
从表中的数据会跟着被删除
一般情况下 我们不建议使用级联删除
查询:主表.主键=从表.外键
某人有某车
使用别名查询:
select 别名.字段名,别名.字段名 from 主表名 [as] 别名 p,从表名 [as] c where (主表)别名.主键=(从表)别名.外键;
select p.name,c.name from person as p,car as c where p.id=c.p_cid;
select p.name,c.name from person p,car c where p.id=c.p_cid;
给数据表起别名:
select * from 表名 as 别名;
mysql> select * from person as p;
任何字段都可以起别名:
select 真字段名 as 别名 from 表名;
mysql> select name as n from person;
2.多对多 其实就是两个一对多
建立主表1:
create table if not exists boy(
bid varchar(20) primary key,
name varchar(20),
age int
);
建立主表二:
create table if not exists girl(
gid varchar(20) primary key,
name varchar(20),
age int
);
建立从表:
create table if not exists meipo(
m_bid varchar(20),
m_gid varchar(20)
);
添加联合主键:
alter table meipo add constraint primary key(m_bid,m_gid);
建立媒婆表和body表的关联
alter table meipo add constraint foreign key(m_bid) references boy(bid);
建立媒婆表和girl表的关联
alter table meipo add constraint foreign key(m_gid) references girl(gid);
向主表中添加数据:
insert into boy values('b01','tom',20);
insert into boy values('b02','jack',20);
insert into boy values('b03','babo',20);
insert into boy values('b04','lisi',20);
insert into boy values('b05','xiaoming',20);
insert into girl values('g01','rows',20);
insert into girl values('g02','lucy',20);
insert into girl values('g03','lili',20);
insert into girl values('g04','xiaohong',20);
insert into girl values('g05','xiaohua',20);
建立多对多之间 添加数据 先添加两个主表的数据 再添加中间表的数据
删除数据时 要先删除中间表的数据 在删除主表中的数据
查询一下 相过亲的男孩和女孩:
select b.name,g.name from boy b,girl g,meipo m where b.bid=m.m_bid and g.gid=m.m_gid;
查询一下 相过亲的男孩:
select b.name from boy b ,meipo m where b.bid =m.m_bid;
查询一下 没有相过亲的男孩
select b.name from boy as b left join meipo as m on b.bid=m.m_bid where m.m_mid=null;
查询一下 相过亲的女孩:
select g.name from girl g,meipo m where g.gid=m.m_gid;
//sql92 92年的标准
select b.name,g.name from boy b,girl g,meipo m where b.bid=m.m_bid and g.gid=m.m_gid;
//sql99 99年的标准 inner join 内链接 取交集
select b.name,g.name from boy b inner join meipo m on b.bid=m.m_bid
inner join girl g on g.gid=m.m_gid;
3.一对一
1.主键对主键
主表:
create table if not exists student(
id int primary key,
name varchar(20),
age int
);
从表:
create table if not exists student2(
sid int primary key,
name varchar(20),
age int
);
从表:
alter table student2 add constraint foreign key(sid) references student(id);
添加数据:
先添加主表 在添加从表
删除数据:先删除从表 在删除主表
2.主键对外键
主表:
create table if not exists student3(
id int primary key,
name varchar(20),
age int
);
从表:
create table if not exists student4(
sid int primary key,
name varchar(20),
age int ,
s_id int
);
建立主从表:
alter table student4 add constraint foreign key(s_id) references student3(id);