登录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只能跟在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);
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);
唯一约束不是主键 是后选主键
唯一约束也不能重复
唯一约束可以为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);
添加数据:
先添加主表 在添加从表
删除数据:先删除从表 在删除主表
主表:
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);