首页 > 代码库 > MySQL基础学习二

MySQL基础学习二

一,数据库操作

  主键

    主键是索引的一种,并且是唯一性索引,且必须定义为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)

 

MySQL基础学习二