mysql 的增删改查
数据库的基本流程就是先看你的数据库中的库都是哪些:show databases;
然后再进入相应的库进行操作 : use+进入的库/表 切换路径
查看这个库内的所有的表:
show tabales;
查看这个表内的所有的所有信息:
select * from +表名;
数据表基本
1、创建表
1
2
3
4
|
create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGINE=InnoDB DEFAULT CHARSET=utf8 |
是否可空,null表示空,非字符串 not null - 不可空 null - 可空
默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值 create table tb1( nid int not null defalut 2, num int not null )
自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自增(表中只能有一个自增列) create table tb1( nid int not null auto_increment primary key, num int null ) 或 create table tb1( nid int not null auto_increment, num int null, index(nid) ) 注意:1、对于自增列,必须是索引(含主键)。 2、对于自增可以设置步长和起始值 show session variables like 'auto_inc%'; set session auto_increment_increment=2; set session auto_increment_offset=10; shwo global variables like 'auto_inc%'; set global auto_increment_increment=2; set global auto_increment_offset=10;
主键,primary key 一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。 create table tb1( nid int not null auto_increment primary key, num int null ) 或 create table tb1( nid int not null, num int not null, primary key(nid,num) )
2、删除表
1
|
drop table 表名 |
3、清空表
1
2
|
delete from 表名 truncate table 表名 |
4、修改表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
添加列:alter table 表名 add 列名 类型 删除列:alter table 表名 drop column 列名 修改列: alter table 表名 modify column 列名 类型; -- 类型 alter table 表名 change 原列名 新列名 类型; -- 列名,类型 添加主键: alter table 表名 add primary key(列名); 删除主键: alter table 表名 drop primary key; alter table 表名 modify 列名 int, drop primary key; 添加外键:alter table 从表 add constraint 外键名称(形如:FK_从表_主表) foreign key 从表(外键字段) references 主表(主键字段); 删除外键:alter table 表名 drop foreign key 外键名称 修改默认值:ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000; 删除默认值:ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
|
改一个表中的列:
修改列: alter table 表名 modify column 列名 类型; -- 类型 alter table 表名 change 原列名 新列名 类型; -- 列名,类型 alter table t1 modify name char(10); 直接把你的t1 表中的name列的char给修改为10个字节的 其中的column可以省略不写 给一个列改名字: alter table t1 change name NAME char(10); 把t1表中的name列的名字改为NAME
表内容操作
查看一个表的具体的信息:desc+表名
1、增
1
2
3
|
insert into 表 (列名,列名...) values (值,值,值...) insert into 表 (列名,列名...) values (值,值,值...),(值,值,值...) insert into 表 (列名,列名...) select (列名,列名...) from 表 |
Insert into t1(id,name) values(1,’老王’) 表示 给t1这个表中的 id和name列分别插入加入数据 1 和老王 也可以省略into 不写
2、删
1
2
|
delete from 表 delete from 表 where id=1 and name = 'alex' |
delete from+表 这个清空表之后下次再增加就会从以后的基础上增加
truncate table +表 这个清空表之后后就会从1 开始增加
3、改
1
|
update 表 set name = 'alex' where id>1 |
4、查
1
2
3
|
select * from 表 select * from 表 where id > 1 select nid, name ,gender as gg from 表 where id > 1 |
主键:
主键是为了保证数据的唯一性而设置的
一张表只能有一个主键
一个主键可以用两个列合起来做一个主键
CREATE TABLE t1( nid int(11) NOT NULL AUTO_INCREMENT , pid int(11) NOT NULL , num int(11) NOT NULL , PRIMARY KEY(pid,num) //把这个两个列设置为主键 )ENGINE = INNODB DEFAULT CHARSET=UTF8;
上面就是把t1表中的pid和num列设置为主键 并且主键不可以为空
外键:
外键好比就是你的表格中有一些人物的属性有很多人物的属性是一样的 或者这些属性是很多人的是重复的 那么如果都写上汉字比如‘中共中央北京市海定区 五道口职业技术学院’这个属性很多人具有的话,你再存储的时候也要每一个人都要写吗?不,如果每个人都写那么就会很占内存 因为占用好多字节,我们可以建立一个表格把这些属性存放起来 然后就给这些属性 设定id值 把这个id值和人物的表格关联绑定,然后 如果具有的属性就用属性代表的id来表示就节省很多内存 这就是外键由来,
外键的创建:
在创建表的时候就创建外键:先创建属性表 (主表)后创建字表就是要绑定外键的表
在表内创建:
constraint +外键名字+foreign key(本表的id) +references 从表名字(主表id列)
必须要给你的外键起名字 同一个数据库中的外键的名字不可以相同
同一个表也可以建立多个外键 就是把不同的列建立不同的外键
#被关联表
create table class(
id int auto_increment primary key,
name varchar(32)
)engine=innodb default charset=utf8;
#关联表
create table student(
id int auto_increment primary key,
name varchar(32),
class_id int,
constraint fk_stu_class foreign key(class_id) references class(id) # 这个是指定它的外键是自己建立的一个列
)engine=innodb default charset=utf8;
这就是在创建表的时候同时把外键创立,constraint +外键名字+ foreign key +(本表的要关联的列一般都是id列) +references +从表名(父表的id列)
如果这个时候建立了外键那么 主表再删除的时候就不能了 因为它本身是有关联的需要先删除关联表
外键的关联必须是两个都是相同的 类型 不能一个是bigint 一个是int 两个列都应该是相同的类型
修改自增的起始值:
修改一个表id自增的起始值就是让他们可以直接跳到每一个我们想要的起始值
比如:这样可以直接从1调到20插入
Alter table +表名 Auto_increment = 你想要设置的从第几位开始的id
Alter table t1 auto_increment = 20;这个是把你的要自增的id设置从20开始增加
但是只可以增大你的设置的id
步长:
不仅仅可以设置自增的起始值还可以设置增加的步长
你在设置自增的值的时候其实也可以设置步长增加的 但是mysql的自增步长设置,只能分为会话步长和全局步长,会话步长就是这次你的登陆的设置 别人的设置没有或者别人的登陆是没有作用的 会话就是你自己的这一次登陆才能生效,而全局步长是设置之后以后的所有都遵循这个设置的,不论那一次登陆 无论谁登陆
MySQL: 自增步长
基于会话级别:
show session variables like 'auto_inc%'; 查看全局变量
set session auto_increment_increment=2; 设置会话步长
# set session auto_increment_offset=10;
基于全局级别:
show global variables like 'auto_inc%'; 查看全局变量
set global auto_increment_increment=2; 设置会话步长
# set global auto_increment_offset=10;
你在设置自增的值的时候其实也可以设置步长增加的 但是mysql的自增步长设置,只能分为会话步长和全局步长,会话步长就是这次你的登陆的设置 别人的设置没有或者别人的登陆是没有作用的 会话就是你自己的这一次登陆才能生效,而全局步长是设置之后以后的所有都遵循这个设置的,不论那一次登陆 无论谁登陆
MySQL: 自增步长
基于会话级别: show session variables like 'auto_inc%'; 查看全局变量 set session auto_increment_increment=2; 设置会话步长 # set session auto_increment_offset=10; 基于全局级别: show global variables like 'auto_inc%'; 查看全局变量 set global auto_increment_increment=2; 设置会话步长 # set global auto_increment_offset=10;
数据类型:
MySQL的数据类型大致分为:数值、时间和字符串
一般有bigint int 只不过是表示的数字的大小值不一样而已 bigint表示的值比较多