一,数据库操作
主键
主键是索引的一种,并且是唯一性索引,且必须定义为primary key。一个表只有一个主键,主键可以由多列组成。
声明主键的关键字为:primary key
简单的一个声明主键的示例:
create table score(sid int auto_increment primary key)engine=innodb default charset=utf8 primary key为声明的关键字。
外键
如果一个实体的某个字段指向另一个实体的主键,就称为外键。
被指向的实体,称之为主实体(主表),也叫父实体(父表)。
负责指向的实体,称之为从实体(从表),也叫子实体(子表)。
作用:用于约束处于关系内的实体。增加子表记录的时候,是否有与之对应的父表记录,如果主表没有相关的记录,从表不能插入。
外键示例代码:
#创建被关联的子表 create table class(cid int auto_increment primary key,clname char(20))engine=innodb default charset=utf8; #插入数据 insert into class(clname) values("三年级"),("一年级"),("四年级"),("二年级"); #创建主表(父表) create table student(sid int auto_increment primary key,sname char(12), class_id int,constraint fk_id_class foreign key(class_id) references class(cid)) engine=innodb default charset=utf8; #constraint fk_id_class foreign key(class_id) references class(cid)关键词,foreign key后跟父表列名,reference后加子表列名。 insert into student(sname,class_id) values("stu1"),("stu2"),("stu3");
外键变种:
外键与主键都有唯一索引,且都不能重复。区别就是主键不能为空,外键的唯一索引可以为空。
外键变种分为以下几种关系:
一对多,一对一,多对多
1,一对一关系:
create table userinfo1( id int auto_increment primary key, name char(10), gender char(10), email varchar(64) )engine=innodb default charset=utf8; create table admin( id int not null auto_increment primary key, username varchar(64) not null, password VARCHAR(64) not null, user_id int not null, unique uq_u1 (user_id),#关键字,指定外键的一对一关系 CONSTRAINT fk_admin_u1 FOREIGN key (user_id) REFERENCES userinfo1(id) )engine=innodb default charset=utf8;
2,一对多关系
3,多对多关系
create table userinfo2( id int auto_increment primary key, name char(10), gender char(10), email varchar(64) )engine=innodb default charset=utf8; create table host( id int auto_increment primary key, hostname char(64) )engine=innodb default charset=utf8; create table user2host( id int auto_increment primary key, userid int not null, hostid int not null, unique uq_user_host (userid,hostid),#关键字,指定为多对多的关系语句 CONSTRAINT fk_u2h_user FOREIGN key (userid) REFERENCES userinfo2(id), CONSTRAINT fk_u2h_host FOREIGN key (hostid) REFERENCES host(id) )engine=innodb default charset=utf8;
数据表的操作:
插入,修改,选择,删除数据:
#一次插入多条数据的方式: insert into student(sname,class_id) values("stu1"),("stu2"),("stu3"); #修改表内数据 update student set sname="stu10" #操作显示表数据 select sid,sname from student;#显示学生表的id与学生名字 select sid,sname from student where sid>3;显示表中sid大于3,的学生id与姓名 #删除表数据 delete from student where id=1;#删除表中id为1的数据
where条件语句
where:条件限制语句,在数据操作中需要对数据进行按条件筛选,就需要用到where语句。在使用时徐注意:
where函数条件后不允许加聚合函数条件
语法: where 条件表达式
条件表达式的运算符
模糊匹配的关键字 like
模糊匹配补充 _下划线 指的是该字符之后的一个任意数值,示例:where username like"a_"
自增数据操作
在数据表的会经常设置自增数据,自增数据是可以对其进行修改查看等操作的。由于mysql的步长是基于会话操作的,每次修改针对的是每一个会话而不是全局,如果需要对全局进行修改要是global
查看:
show session variables like ‘auto_inc%‘; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | +--------------------------+-------+ 2 rows in set, 1 warning (0.00 sec)
修改自增步长:
set session auto_increment_increment=2; Query OK, 0 rows affected (0.00 sec) show session variables like ‘auto_inc%‘; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 2 | | auto_increment_offset | 1 | +--------------------------+-------+ 2 rows in set, 1 warning (0.00 sec)
全局查看:
全局查看是基于关键字global。
设置全局步长值:set global auto_increment_increment=2;
show global variables like ‘auto_inc%‘; +--------------------------+-------+ | Variable_name | Value | +--------------------------+-------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | +--------------------------+-------+ 2 rows in set, 1 warning (0.00 sec)